OpenGL - 纹理映射后无法渲染白色以外的颜色

时间:2009-05-04 14:06:27

标签: java opengl jogl

我正在尝试在渲染其他具有纹理的立方体后渲染彩色立方体。我有多个符合Drawer接口的“Drawer”对象,我将每个对GL对象的引用传递给每个单独实现类的 draw(final GL gl)方法。但是,无论我做什么,我似乎都无法呈现彩色立方体。

代码示例:

gl.glDisable(GL.GL_TEXTURE_2D);

gl.glColor3f( 1f, 0f, 0f );
gl.glBegin(GL.GL_QUADS);
// Front Face
Point3f point = player.getPosition();

gl.glNormal3f(0.0f, 0.0f, 1.0f);
//gl.glTexCoord2f(0.0f, 0.0f);

gl.glVertex3f(-point.x - 1.0f, -1.0f, -point.z + 1.0f);
//gl.glTexCoord2f(1.0f, 0.0f);

gl.glVertex3f(-point.x + 1.0f, -1.0f, -point.z + 1.0f);
//continue rendering rest of cube. ...
gl.glEnd();
gl.glEnable(GL.GL_TEXTURE_2D);

我也尝试在每个顶点调用之前抛出glColor3f调用,但这仍然给了我一个白色的立方体。怎么了?

4 个答案:

答案 0 :(得分:3)

您需要确保做一些事情。

首先关闭:

gl.glEnable(gl.GL_COLOR_MATERIAL);

这将允许您将颜色应用于顶点。 (在调用glColor3f之前执行此操作。)

如果仍然无法解决问题,请确保正确使用混合(如果您正在使用混合。)

对于大多数应用程序,您可能希望使用

gl.glEnable(gl.GL_BLEND);
gl.glBlendFunc(gl.GL_SRC_ALPHA,gl.GL_ONE_MINUS_SRC_ALPHA);

如果这两件事都没有解决您的问题,您可能需要在代码的这一部分之前向我们提供有关您正在进行/设置的更多信息。

答案 1 :(得分:3)

如果启用了光照,则颜色来自材质,而不是glColor顶点颜色。如果您提到的绘图功能是为纹理对象设置材质(并且纹理下的白色材质很常见),则其余的立方体将为白色。使用GL_COLOR_MATERIAL设置OpenGL来获取glColor命令并更新材质而不仅仅是顶点颜色,这样就可以了。

所以,简单地说,如果你启用了照明,请尝试GL_COLOR_MATERIAL。

答案 2 :(得分:0)

您可能想要尝试的一件事是:glBindTexture(GL_TEXTURE_2D, 0);将纹理绑定到nil。

答案 3 :(得分:0)

要检查的一些事项:

  • 是否有效果器?
  • 任何gl-errors?
  • 你改变了哪些其他州?例如GL_COLOR_MATERIAL,混合或光照将改变几何体的外观。
  • 如果先绘制非纹理立方体,它是否有效?如果它确实试图找出它变成白色的点。也有可能立方体只会在第一帧中以正确的颜色显示,然后肯定会涉及GL状态。
  • 在绘图方法的开头/结尾放置glPushAttrib / glPopAttrib可能会有所帮助,但最好先找出导致问题的原因。