如何在OpenGL中获得镜面反射颜色?
我的代码适用于除镜面反射组件之外的所有内容。
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() 在任何时候都不会报告错误。
My code works for everything except specular component.
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);
It seems to ignore specular, but color, texture co-ordinates, positions, and so on are all completely fine.
This is NOT using lights and materials. Fixed-vertex pipeline. Shaders are not an option at this point, unfortunately.
glGetError() reports no errors at any point either.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
你说:
仅当存在光源时才能计算镜面反射。 (如果您愿意,我可以深入了解其背后的数学...)
来自 http://en.wikipedia。 org/wiki/Specular_highlight:
顺便说一句,D3DPT_TRIANGLELIST 在 OpenGL 代码中做什么?这只是问题中的一个错误还是实际上是这样的?
you said:
specular can only be calculated when there is a light to get it from. (if you want I can go into the math behind it...)
from http://en.wikipedia.org/wiki/Specular_highlight:
on a side note what is D3DPT_TRIANGLELIST doing in OpenGL code? is that just a mistake in the question or does it actually work like that?