OpenGL ES中的纹理镜面反射?

时间:2012-03-04 18:48:51

标签: android opengl-es lighting

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

那么,我该怎么做呢?我是否必须使用另一种纹理作为specluar高光,还有另一种更简单的方法吗?

比你!

P.S。我正在使用OpenGL ES 1.x

2 个答案:

答案 0 :(得分:1)

一种解决方法是在两次传递中运行:第一次传递使用环境和放大器渲染纹理。漫反射光照,第二遍渲染顶部的镜面高光(未启用纹理)。

答案 1 :(得分:1)

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

在玩了一个星期后,我认为只需要在进行混合时禁用深度测试,只需处理每次传递时渲染对象的顺序。通常,您希望在绘制较近的对象之前完成远处对象的所有渲染过程。 这照顾了我完全没有的闪烁问题。