我在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函数不保留它。我不完全确定,因为我真的不知道这里发生了什么。
这就是问题所在,我该如何解决?如果不是,那是什么以及如何解决它?
答案 0 :(得分:0)
我的绘图是由很多用alpha透明度绘制的三角形组成的......而且...... CopyTexImage2D函数不保留
这不是它的工作原理。一旦绘制了图片,无论哪个帧缓冲区,剩下的都是像素的值。使用的几何形状与此无关。
最可能的问题是,您正在渲染该纹理,而前一个绘制步骤的状态仍然处于启用状态,并且正在“流血”。但是,如果没有看到用于绘制所有不同阶段的源代码,很难说清楚。我建议您编辑您的问题,添加该代码。