我正在尝试在渲染其他具有纹理的立方体后渲染彩色立方体。我有多个符合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调用,但这仍然给了我一个白色的立方体。怎么了?
答案 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)
要检查的一些事项: