1

我试图在纹理映射的对象上获得镜面高光。据我所知,OpenGL 不计算纹理颜色(例如纯白色)的最终颜色的唯一直接方法是使用 call glLightModelf(GL_LIGHT_MODEL_COLOR_CONTROL,GL_SEPARATE_SPECULAR_COLOR),但这在 OpenGL ES 中不受支持。

那么,我该怎么做呢?我是否必须为镜面高光使用其他纹理,还有其他更简单的方法吗?

比你!

PS 我正在使用 OpenGL ES 1.x

4

2 回答 2

1

一种解决方法是分两次运行:第一次通过环境光和漫反射光渲染纹理,第二次通过在其之上渲染镜面高光(未启用纹理)。

于 2012-03-04T19:34:15.213 回答
1

谢谢你的好建议,他们拯救了我的一天。唯一的问题是闪烁。我首先认为深度缓冲区和有限的深度分辨率存在问题,但事实并非如此。我不得不使用 gl.glDepthFunc(GL10.GL_ALWAYS); 完美融合。然而,对于复杂的基元,您将能够看穿对象。

又玩了一个星期后,我发现在进行混合时只需禁用深度测试,只需注意每次渲染对象的顺序即可。通常,您希望在绘制更近的对象之前完成远对象的所有渲染过程。这可以解决我完全遇到的闪烁问题。

于 2012-08-02T23:37:19.647 回答