【问题标题】:How do I get openGL to render a coloured quad?如何让 openGL 渲染彩色四边形?
【发布时间】: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 应该可以工作。

标签: java opengl


【解决方案1】:

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

glDisable(GL_LIGHTING);
glDisable(GL_TEXTURE_2D);

// Draw quads

glEnable(GL_LIGHTING);
glEnable(GL_TEXTURE_2D);

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

【讨论】:

  • 它只会再次重置照明,但我想我可以解决这个问题。谢谢大家的帮助:)
猜你喜欢
  • 1970-01-01
  • 2021-06-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多