我的代码适用于所有组件,除了镜面组件。
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);
它似乎忽略了镜面,但颜色,纹理坐标,位置等都完全没问题。
这是不使用灯光和材料。Fixed-vertex管道。不幸的是,在这一点上,着色器不是一个选项。
glGetError()也没有报告任何错误。
你说:
这是不使用灯光和材料。
specular只有在有光的情况下才能计算。(如果你想的话,我可以深入到背后的数学…)
从http://en.wikipedia.org/wiki/Specular_highlight:
镜面高光是在光照时出现在闪亮物体上的亮点。
在一个侧面说明什么是D3DPT_TRIANGLELIST在OpenGL代码?这只是问题中的一个错误,还是实际上是这样的?