将图像渲染到纹理并保留混合

时间:2013-06-16 01:16:17

标签: java opengl

我在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的幂。)

现在的问题是,当我将纹理重新绘制到屏幕上时,它的呈现方式与它向后备缓冲区呈现的方式不同。

我没有足够的代表直接发布图片< _<所以这是行为的截图。

enter image description here

请注意,左上角是直接渲染到屏幕时发生的情况,右下角是当我将其复制到纹理然后渲染纹理时会发生的情况。

我认为正在发生的事情是我绘制的对象由很多用alpha透明度和混合函数绘制的三角形组成,并且CopyTexImage2D函数不保留它。我不完全确定,因为我真的不知道这里发生了什么。

这就是问题所在,我该如何解决?如果不是,那是什么以及如何解决它?

1 个答案:

答案 0 :(得分:0)

  

我的绘图是由很多用alpha透明度绘制的三角形组成的......而且...... CopyTexImage2D函数不保留

这不是它的工作原理。一旦绘制了图片,无论哪个帧缓冲区,剩下的都是像素的值。使用的几何形状与此无关。

最可能的问题是,您正在渲染该纹理,而前一个绘制步骤的状态仍然处于启用状态,并且正在“流血”。但是,如果没有看到用于绘制所有不同阶段的源代码,很难说清楚。我建议您编辑您的问题,添加该代码。