2012-03-04 78 views
1

我试图让镜面高光超过纹理映射的objetcs。据我所知,OpenGL不直接计算纹理颜色的最终颜色(例如纯白色)的方法是调用glLightModelf(GL_LIGHT_MODEL_COLOR_CONTROL,GL_SEPARATE_SPECULAR_COLOR),但在OpenGL ES中不支持。OpenGL ES中的高光纹理?

那么,我该怎么做呢?我是否还需要使用另一种纹理作为特别亮点,还有另一种更简单的方法吗?

比你!

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

+0

假设OpenGL ES 1.0/1.1正确吗?在OpenGL ES 2.0中,这将是微不足道的。 – 2012-03-04 19:26:38

+0

是的,opengl es 1.x,忘记提及它,对不起 – WaLi 2012-03-04 19:30:09

回答

1

一种解决方法是两次运行:第一次使用环境渲染纹理&漫反射光照,第二次渲染将高光反射渲染到顶部(未启用纹理处理) 。

+0

我会尝试一下,并评论它是如何,谢谢! – WaLi 2012-03-04 19:36:13

+1

+1当然,在这种情况下,您应该使用叠加混合('glBlendFunc(GL_ONE,GL_ONE)')和'glDepthFunc(GL_EQUAL)'进行深度测试。 – 2012-03-04 19:45:31

+0

这似乎是正确的方式,但我无法让它工作完美。使用混合函数'glBlendFunc(GL_ONE,GL_ONE)',整个物体看起来非常亮(光线是白色的),也许用其他混合函数会更好,但我找不出哪一个是 – WaLi 2012-03-04 20:06:55

1

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

玩了一个星期后,我发现只需在进行混合时禁用深度测试,并简单地照顾每次渲染对象的顺序。通常,您希望在绘制更近的物体之前完成远物体的所有渲染过程。 这照顾我完全有的闪烁问题。