【问题标题】:OpenGL/TK TexSubImage2D can't modify transparent pixelOpenGL/TK TexSubImage2D 不能修改透明像素
【发布时间】:2012-09-05 16:15:27
【问题描述】:

我已经用这个方法加载了一张图片:

    public static int LoadTexture(string file)
    {
        Bitmap bitmap = new Bitmap(file);

        int tex;

        GL.GenTextures(1, out tex);
        GL.BindTexture(TextureTarget.Texture2D, tex);

        System.Drawing.Imaging.BitmapData data = bitmap.LockBits(new System.Drawing.Rectangle(0, 0, bitmap.Width, bitmap.Height),
            System.Drawing.Imaging.ImageLockMode.ReadOnly, System.Drawing.Imaging.PixelFormat.Format32bppArgb);

        GL.TexImage2D(TextureTarget.Texture2D, 0, PixelInternalFormat.Rgba, data.Width, data.Height, 0,
            OpenTK.Graphics.OpenGL.PixelFormat.Bgra, PixelType.UnsignedByte, data.Scan0);

        bitmap.UnlockBits(data);

        GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureMinFilter, (int)TextureMinFilter.Linear);
        GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureMagFilter, (int)TextureMagFilter.Linear);
        GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureWrapS, (int)TextureWrapMode.Repeat);
        GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureWrapT, (int)TextureWrapMode.Repeat);

        Console.WriteLine("[ImageDisplay] Loaded image: " + file);

        return tex;
    }

我需要修改这张图片中的像素,所以我使用了这个:

GL.TexSubImage2D(TextureTarget.Texture2D, 0, X, Y, 1, 1, OpenTK.Graphics.OpenGL.PixelFormat.Rgb, PixelType.UnsignedInt, new uint[] { 0xFFFF0000 });

我的问题是,只有不透明的像素变成红色,透明的像素根本没有变化。

我该如何解决这个问题?

【问题讨论】:

    标签: c# opengl transparency textures opentk


    【解决方案1】:
    OpenTK.Graphics.OpenGL.PixelFormat.Rgb, PixelType.UnsignedInt, new uint[] { 0xFFFF0000 }
    

    您声明的pixel transfer formatGL_RGB。这意味着 3 个组件:依次为红色、绿色和蓝色。

    pixel transfer typeGL_UNSIGNED_INT,这意味着每个组件 都是一个无符号整数。因此,您需要提供一个每个像素包含 3 个无符号整数的数组。

    如果你希望每个组件都是一个无符号字节,那么你应该使用它作为你的类型。你的数组应该是一个无符号字节数组。

    【讨论】:

    • 请回复:/或其他人回答?这是纠正我对数据参数的使用,但没有解决这个问题。不透明的像素将更新为红色。透明像素仍然无法更改。
    • 好的,我明白了:GL.TexSubImage2D(TextureTarget.Texture2D, 0, x, y, 1, 1, OpenTK.Graphics.OpenGL.PixelFormat.Rgba, PixelType.UnsignedByte, new byte[] { 颜色.R, 颜色.G, 颜色.B, 255 });谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多