0

我有一个 OpenGL 程序,我在其中使用纹理显示图像。我希望能够加载要显示的新图像。

在我的初始化函数中,我调用:

Gl.glGenTextures(1, mTextures);

由于一次只会显示一张图像,因此我为每张图像使用相同的纹理名称。

每次加载新图像时,我都会调用以下命令:

Gl.glBindTexture(Gl.GL_TEXTURE_2D, mTexture[0]);

Gl.glTexImage2D(Gl.GL_TEXTURE_2D, 0, Gl.GL_LUMINANCE, mTexSizeX, mTexSizeY, 0, Gl.GL_LUMINANCE, Gl.GL_UNSIGNED_SHORT, mTexBuffer);
Gl.glTexParameteri(Gl.GL_TEXTURE_2D, Gl.GL_TEXTURE_MIN_FILTER, Gl.GL_LINEAR);   
Gl.glTexParameteri(Gl.GL_TEXTURE_2D, Gl.GL_TEXTURE_MAG_FILTER, Gl.GL_LINEAR);

第一个图像将按预期显示。但是,所有图像都在第一个之后加载,显示为全黑。

我究竟做错了什么?

4

4 回答 4

1

glDisable GL_TEXTURE_2D画完之后?如果禁用 2d 纹理,则放置一个glColor4f(1,1,1,1);至少应该看到白色矩形。它将帮助您在这里找到问题所在。

于 2010-11-05T12:00:52.557 回答
1

我认为问题不在于您显示的代码。您需要提供有关如何使用纹理进行绘制的更多信息,以及传递给的纹理数据的glTexImage2D外观。你确定它在你打电话时仍然有效glTexImage2D吗?

于 2009-10-18T09:06:53.747 回答
0

您何时使用这些纹理提交几何图形?我认为这是与纹理加载交错的,尽管您没有显示。当然,如果你打算用不同的图像替换纹理名称,你根本不需要使用纹理名称,是吗?您可以glTextImage2D在需要设置新纹理时进行调用,然后在必要时使用它,从不参与glBindTexture()

一个显而易见的事情当然是插入错误检查代码,当操作失败时,OpenGL 会存储一个错误代码,并且该代码在被应用程序读取之前不会被覆盖。有关更多信息,请参见glGetError()

于 2008-12-02T07:02:25.550 回答
0

您正在寻找的功能是“glCopyTexImage2D”或“glCopyTexSubImage2D”。

于 2008-12-05T01:09:20.630 回答