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

Java OpenGL-纹理映射后无法渲染除白色以外的其他颜色,java,opengl,jogl,Java,Opengl,Jogl,在渲染其他具有纹理的立方体之后,我尝试渲染一个彩色立方体。我有多个符合Drawer接口的“Drawer”对象,并且我将每个对GL对象的引用传递给每个实现类的draw(final GL)方法。然而,无论我做什么,我似乎无法渲染彩色立方体 代码示例: gl.glDisable(GL.GL_TEXTURE_2D); gl.glColor3f( 1f, 0f, 0f ); gl.glBegin(GL.GL_QUADS); // Front Face Point3f point = player.get

在渲染其他具有纹理的立方体之后,我尝试渲染一个彩色立方体。我有多个符合Drawer接口的“Drawer”对象,并且我将每个对GL对象的引用传递给每个实现类的draw(final 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调用,但仍然会得到一个白色立方体。怎么了?

您可能想尝试的一件事是:
glBindTexture(GL\u TEXTURE\u 2D,0)
将纹理绑定到nil。

您可能想尝试的一件事是:
glBindTexture(GL\u texture\u 2D,0)
将纹理绑定为nil。

一些要检查的内容:

  • 是否有着色器处于活动状态
  • 有任何总账错误吗
  • 你还改变了哪些州?例如,GL_颜色_材质、混合或照明将更改几何体的外观
  • 如果先绘制无纹理的立方体,是否有效?如果它真的想弄清楚它在哪一点变成白色。也有可能立方体在第一帧中仅以正确的颜色显示,然后肯定会涉及GL状态
  • 将glPushAttrib/glPopAttrib放置在绘图方法的开头/结尾可能会有所帮助,但最好首先找出问题的原因
一些需要检查的事项:

  • 是否有着色器处于活动状态
  • 有任何总账错误吗
  • 你还改变了哪些州?例如,GL_颜色_材质、混合或照明将更改几何体的外观
  • 如果先绘制无纹理的立方体,是否有效?如果它真的想弄清楚它在哪一点变成白色。也有可能立方体在第一帧中仅以正确的颜色显示,然后肯定会涉及GL状态
  • 将glPushAttrib/glPopAttrib放置在绘图方法的开头/结尾可能会有所帮助,但最好首先找出问题的原因

    • 有几件事你需要确保你做到

      首先:

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

      如果这仍然不能解决问题,请确保正确使用混合(如果您使用的是混合)

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

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

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

      您需要确保执行以下几项操作

      首先:

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

      如果这仍然不能解决问题,请确保正确使用混合(如果您使用的是混合)

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

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

      如果以上两种方法都不能解决您的问题,您可能需要在代码的这一部分之前向我们提供更多有关您正在执行/设置的信息。

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


      因此,简单地说,如果启用了照明,请尝试使用GL_颜色_材质

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


      因此,简单地说,如果启用了照明,请尝试使用GL_颜色_材质

      没有骰子。问题仍然存在。没有骰子。这个问题仍然存在。