2

我正在尝试将纹理放入我的 Java OpenGL 场景中,但是当我这样做时,其他事物的颜色会出现偏差,就好像它错误地混合了颜色一样。我将 LWJGL 用于 OpenGL,将 Slick 用于加载纹理。当我离开GL11.glEnable(GL11.GL_TEXTURE_2D);电话未注释时,颜色变暗,但是当我评论一行时颜色是正确的,但是我显然没有纹理。

我把我的代码放在这里http://codepaste.net/26bguu

有问题的行是第 63 行

我发现的一种解决方法是在我绘制纹理之前启用纹理,然后立即再次禁用。但是我觉得这应该是不必要的。下面是一些屏幕截图,显示了我的意思。唯一的区别是一行注释与未注释。

没有启用纹理。 所有的颜色都很鲜艳。

启用纹理。 所有颜色都较深。

4

1 回答 1

4

您确实需要根据需要启用和禁用GL_TEXTURE_2D

如果GL_TEXTURE_2D启用,GL 将(通常)忽略您提供的顶点颜色,而是将给定的纹理坐标映射到给定的纹理以获取每个片段/像素的颜色。如果你不传递纹理坐标,任何事情都可能发生——比如你发布的第二个屏幕截图。

必须进行 20 多次 opengl 调用来准备绘制每个“对象”的情况并不少见。这就是为什么 OpenGL 程序员花费大量时间将大量三角形组合到单个缓冲区中以通过一次绘制调用立即绘制的原因——它极大地提高了性能。

于 2012-04-04T15:17:13.783 回答