我在 Java 中使用 OpenGL,我一直在尝试在后台缓冲区上绘制一些东西,将其复制到纹理上,然后将纹理绘制到屏幕上。
这是我用来进行复制的代码。
int textureNumber = GL11.glGenTextures();
GL11.glBindTexture(GL11.GL_TEXTURE_2D, textureNumber);
GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_WRAP_S, GL11.GL_REPEAT);
GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_WRAP_T, GL11.GL_REPEAT);
GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MAG_FILTER, GL11.GL_NEAREST);
GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MIN_FILTER, GL11.GL_NEAREST);
GL11.glTexEnvf(GL11.GL_TEXTURE_ENV, GL11.GL_TEXTURE_ENV_MODE, GL11.GL_REPLACE);
GL11.glCopyTexImage2D
(
GL11.GL_TEXTURE_2D, 0, GL11.GL_RGBA,
0, 0,
NewMath.roundUpTwo(width), NewMath.roundUpTwo(height),
0
);
(roundUpTwo 方法只是将宽度和高度四舍五入到最接近的 2 次幂。)
现在这里的问题是,当我将纹理重新绘制到屏幕上时,它的呈现方式与渲染到后台缓冲区的方式不同。
我没有足够的代表直接发布图片 <_< 所以这里是行为的截图。
请注意,左上角是我直接渲染到屏幕时发生的情况,右下角是我将其复制到纹理然后渲染纹理时发生的情况。
我认为正在发生的事情是,我正在绘制的对象是由许多使用 alpha 透明度和混合函数绘制的三角形组成的,而 CopyTexImage2D 函数并没有保留它。不过我不完全确定,因为我真的不知道这里发生了什么。
这就是问题所在,我该如何解决?如果不是,那是什么,我该如何解决?