【发布时间】:2011-04-06 19:23:16
【问题描述】:
基本上,我试图让 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);
【问题讨论】:
-
我不知道确切的答案...但是 OpenGL 是非常基于状态的,每当您渲染顶点时总是会考虑状态。所以...我不记得如何实际做了,但你基本上想禁用你启用的任何东西来获得纹理、材质和光照,然后渲染你的四边形,然后重新- 再次启用一切。 (编辑: 使用
glDisable(GL_LIGHTING)。希望这样做。) -
@fazo:OP 在其他四边形上有一些应该用光照渲染的纹理。
-
glColorMaterial 和 GL_EMISSION 应该可以工作。