【问题标题】:How to get specular color in OpenGL?如何在OpenGL中获得镜面颜色?
【发布时间】:2011-11-25 06:51:03
【问题描述】:

我的代码适用于除镜面反射组件之外的所有内容。

glEnable(GL_COLOR_SUM);
...
glEnableClientState(GL_COLOR_ARRAY);
glColorPointer(4, GL_UNSIGNED_BYTE, 0, color);
glEnableClientState(GL_SECONDARY_COLOR_ARRAY);
glSecondaryColorPointer(3, GL_UNSIGNED_BYTE, 0, specular);
...
glDrawArrays(D3DPT_TRIANGLELIST, 0, 2);

似乎忽略了高光,但颜色、纹理坐标、位置等都完全没问题。

这不是使用灯光和材质。固定顶点管道。不幸的是,此时着色器不是一个选项。

glGetError() 也不会在任何时候报告错误。

【问题讨论】:

  • "这不是使用灯光和材料。"如果您不使用灯光和材质,则辅助颜色将仅用作纹理环境功能的一部分。那么......他们是什么。你调用了哪些glTexEnv 函数?
  • 我正在使用默认值...如果我必须适当地更改 glTexEnv,它们会更改为什么?那么文档中提到的GL_COLOR_SUM有什么用呢?

标签: opengl colors vertices specular


【解决方案1】:

你说:

这不是使用灯光和材质。

高光只能在有光源的情况下计算。 (如果你愿意,我可以进入它背后的数学......)

来自http://en.wikipedia.org/wiki/Specular_highlight

镜面高光是在被照亮时出现在闪亮物体上的亮点。

附带说明 D3DPT_TRIANGLELIST 在 OpenGL 代码中的作用是什么?这只是问题中的一个错误,还是实际上是这样工作的?

【讨论】:

  • 我已经找到了解决方案 - 它启用了辅助颜色并使用它。如果您在进行自己的光照计算而不使用 OpenGL 材质/光照系统,则可以使用镜面反射和漫反射。
  • @PhoenixX_2 等等...在没有着色器的情况下,您如何进行自己的光照计算?您是否将预先/手动计算的镜面值放入辅助颜色?如果很抱歉,我误解了你的问题。
  • 是的……它真的是为 2D 游戏设计的,并且在低端硬件上不使用着色器的情况下改变高光以产生闪光效果。
猜你喜欢
  • 2018-06-25
  • 1970-01-01
  • 2014-02-07
  • 2016-05-11
  • 1970-01-01
  • 2012-05-29
  • 2011-08-04
  • 2015-09-19
  • 2016-07-11
相关资源
最近更新 更多