【问题标题】:Fast way to make vertices darker?使顶点变暗的快速方法?
【发布时间】:2012-11-04 07:18:02
【问题描述】:

要为体素游戏制作光照系统,我需要为每个顶点指定一个暗度值。我正在使用GL_COLOR_MATERIAL 并为每个顶点指定一种颜色,如下所示:

glEnable(GL_COLOR_MATERIAL);

glBegin(GL_QUADS);

glColor3f(0.6f, 0.6f, 0.6f);
glTexCoord2f(...);
glVertex3f(...);

glColor3f(0.3f, 0.3f, 0.3f);    
glTexCoord2f(...);
glVertex3f(...);

glColor3f(0.7f, 0.7f, 0.7f);        
glTexCoord2f(...);
glVertex3f(...);

glColor3f(0.9f, 0.9f, 0.9f);
glTexCoord2f(...);
glVertex3f(...);

glEnd();

这是可行的,但是对于许多四边形,它非常慢。我也在使用显示列表。关于如何使顶点变暗的任何好主意?

【问题讨论】:

  • 降低颜色值?我不明白你想做什么
  • 我只需要一种快速的方法来指定每个顶点的暗度(颜色)值,因为我目前正在做的事情非常慢。

标签: opengl lwjgl lighting


【解决方案1】:

您正在使用即时模式(glBegin、glEnd 以及介于两者之间的所有内容)。如果性能是您所需要的,那么我建议您停止这样做

您可能追求的是通用顶点属性。你瞧:现代 OpenGL 实际上有这个:通用属性。他们甚至走得更远,做正确的事并取消了预定义的属性(位置、颜色、法线、texcoords 等),并且在 OpenGL-3 核心及更高版本中只有通用属性。

函数 glVertexAttrib(大多数时候 Uniform 做得更好)和 glVertexAttribPointer 是你的朋友。指定如何使用适当的顶点着色器处理顶点属性。

【讨论】:

  • @LuisCruz:他们是锦上添花。并且在更高版本的 OpenGL 中是强制性的(与 VAO 一起)。 (我必须说,随着 VAO 的引入,API 会从指向偏移量的指针进行更改。)
猜你喜欢
  • 2014-02-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-27
  • 2023-04-05
相关资源
最近更新 更多