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

时间:2011-04-06 19:23:16

标签: java opengl

基本上,我试图让openGL绘制一堆四边形。这些四边形中的每一个都有不同的颜色。现在我的问题是,当我调用glColor4f()时,颜色不会应用于材质。我发现那是因为我在渲染过程中一直在其他地方使用纹理,所以我禁用了它。仍然没有结果。经过一些谷歌搜索后,我遇到了glColorMaterial(),它确实正确地显示了四边形,但是因为我使用glColour4f()为每个四边形着色,所以舞台上的每个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); 

1 个答案:

答案 0 :(得分:3)

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

glDisable(GL_LIGHTING);
glDisable(GL_TEXTURE_2D);

// Draw quads

glEnable(GL_LIGHTING);
glEnable(GL_TEXTURE_2D);

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