覆盖openGL 2d纹理中的每像素像素

Overwrite pixel per pixel in an openGL 2d texture

本文关键字:像素 纹理 openGL 2d 覆盖      更新时间:2023-10-16

我想创建一个openGL 2D纹理,并自行设置每个像素的RGBA值。有人能给我解释一下我的问题吗?我在网上没有找到。

如果你只是想写2D纹理的像素,你可以简单地使用glTexImage2D,它占用一个缓冲区,指定你想要上传到纹理的像素数据(https://www.opengl.org/sdk/docs/man/html/glTexImage2D.xhtml)。或者,可以使用glTexSubImage2D写入纹理的一部分像素(https://www.khronos.org/opengles/sdk/docs/man/xhtml/glTexSubImage2D.xml)。如果你想对帧缓冲区做类似的事情,你可以使用glDrawPixels(https://www.opengl.org/sdk/docs/man2/xhtml/glDrawPixels.xml)。

如果目标是后缓冲区,则可以尝试通过将纹理绑定为帧缓冲区来绘制纹理的精确像素值,然后渲染完全覆盖它的纹理四边形。然而,这个过程会受到混合和潜在的像素中心问题的影响,而glDrawPixels则不然。

不久前,我在玩OpenGL时做了这样的事情。

请在GitHub上查看此处的代码。你可以在main.cpp中找到它。

基本上,我的想法是创建一个浮点数组,设置值,用glBufferData复制到GPU,并用glDrawElements绘制。

我记得,就表现而言,经常这样做非常糟糕,所以这可能不是最好的方向。

还请注意,这段代码只是我的沙盒,可能不是最好的复制示例。