Java 如何让openGL渲染彩色四边形?

Java 如何让openGL渲染彩色四边形?,java,opengl,Java,Opengl,基本上,我试图让openGL绘制一组四边形。这些四边形中的每一个都有不同的颜色。现在我的问题是,当我调用glColor4f()时,颜色不会应用到材质上。我发现这是因为我在渲染过程中一直在其他地方使用纹理,所以我禁用了它。不过,结果并非如此。在谷歌搜索之后,我发现了glColorMaterial(),它确实正确地显示了四边形,但因为我使用GLcolor4f()为每个四边形着色,所以舞台上的每个3D纹理对象都着色了。所以现在我有点卡住了;我想在我的3D对象上启用照明,但是这几个四边形应该只是用平面颜

基本上,我试图让openGL绘制一组四边形。这些四边形中的每一个都有不同的颜色。现在我的问题是,当我调用glColor4f()时,颜色不会应用到材质上。我发现这是因为我在渲染过程中一直在其他地方使用纹理,所以我禁用了它。不过,结果并非如此。在谷歌搜索之后,我发现了glColorMaterial(),它确实正确地显示了四边形,但因为我使用GLcolor4f()为每个四边形着色,所以舞台上的每个3D纹理对象都着色了。所以现在我有点卡住了;我想在我的3D对象上启用照明,但是这几个四边形应该只是用平面颜色绘制,没有任何照明。openGL是如何做到这一点的? 我的openGL上下文设置:

glViewport(0, 0, dim.width, dim.height);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(60.0f, (float)(dim.width/dim.height), 0.1f, 10000.0f);
glMatrixMode(GL_MODELVIEW);
glClearColor(94.0f/255.0f, 161.0f/255.0f, 255.0f/255.0f, 0.5f);
glClearDepth(1.0);
glShadeModel(GL_SMOOTH);
glEnable(GL_DEPTH_TEST);
glDepthFunc(GL_LEQUAL);
glEnable(GL_CULL_FACE); 
glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glEnable(GL_LIGHTING);
glEnable(GL_LIGHT1); 
glEnable(GL_TEXTURE_2D); 

正如Platinum Azure所说,您需要在绘制四边形之前禁用照明和纹理,然后再将其打开。像这样:

glDisable(GL_LIGHTING);
glDisable(GL_TEXTURE_2D);

// Draw quads

glEnable(GL_LIGHTING);
glEnable(GL_TEXTURE_2D);

您可以像往常一样使用
glColorf
(您不需要
glcolormative
)。

我不知道这个问题的确切答案。。。但是OpenGL是非常基于状态的,无论何时渲染顶点,都会考虑状态。所以我不记得怎么做了,但你基本上想禁用你启用的任何东西,以获得纹理、材质和照明,然后渲染你的四边形,然后重新启用一切。(编辑:使用
glDisable(GL_照明)
。希望这样做。)@fazo:OP在其他四边形上有一些纹理,应该使用照明进行渲染。glColorMaterial和GL_发射应该可以工作。它只会再次重置照明,但我想我可以解决这个问题。谢谢大家的帮助:)