1

在渲染其他具有纹理的立方体后,我正在尝试渲染彩色立方体。我有多个符合 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

4 回答 4

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);

如果这些事情都不能解决您的问题,您可能需要在代码的这一部分之前向我们提供有关您正在做什么/设置的更多信息。

于 2009-05-04T20:10:26.730 回答
3

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

因此,简单地说,如果您启用了照明,请尝试使用 GL_COLOR_MATERIAL。

于 2009-05-04T20:20:48.110 回答
0

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

于 2009-05-04T14:12:18.417 回答
0

需要检查的一些事项:

  • 是否有着色器处于活动状态?
  • 任何 gl 错误?
  • 你还改变了哪些其他状态?例如 GL_COLOR_MATERIAL,混合或光照会改变几何体的外观。
  • 如果您先绘制无纹理的立方体,它会起作用吗?如果它确实试图弄清楚它在什么时候变白。也有可能立方体只会在第一帧中以正确的颜色显示,那么肯定涉及到 GL 状态。
  • 将 glPushAttrib/glPopAttrib 放在绘图方法的开头/结尾可能会有所帮助,但最好首先找出导致问题的原因。
于 2009-05-04T15:53:02.543 回答