如何使用OpenGL ES 2.0应用光源?

我试图find任何教程或示例代码,解释和显示在OpenGL ES 2.0灯的用法。 我在网上看到的大多数资料都是指Opengl ES 1.1。

任何人都可以提供任何关于如何在OpenGL ES 2.0中进行照明的链接或文档?

OpenGL ES 2.0的困难在于,由于您可以自己编写自己的着色器,因此无法为对象提供光照。 这将取决于你想如何展示你的内容。

也就是说,您可以通过执行诸如提供光线方向和计算每个顶点的光强度等方法来复制OpenGL ES 1.1的固定function照明function。 在这个示例应用程序中,我可以看到一个示例,我将其中一个类放在一起。

这里使用的顶点着色器如下:

attribute vec4 position; attribute vec4 normal; varying float lightIntensity; uniform mat4 modelViewProjMatrix; uniform vec3 lightDirection; void main() { vec4 newNormal = modelViewProjMatrix * normal; vec4 newPosition = modelViewProjMatrix * position; gl_Position = newPosition; lightIntensity = max(0.0, dot(newNormal.xyz, lightDirection)); } 

与匹配的片段着色器:

 varying highp float lightIntensity; void main() { lowp vec4 yellow = vec4(1.0, 1.0, 0.0, 1.0); gl_FragColor = vec4((yellow * lightIntensity * 0.2).rgb, 1.0); } 

在该顶点的光线方向和法线的点积被用来计算从该顶点击中观察者的眼睛的光强度。 然后在每个三angular形的顶点之间插入这个光强度,以给出每个片段的强度。

我在开源分子应用中做了一些更高级的每像素照明,其中每个球体和圆柱体实际上是位于矩形内的光线追踪冒名顶替者。 对于每个像素,我计算在虚拟物体上的该点处的镜面reflection和环境照明贡献,然后将其与在模型的加载处计算的环境遮挡因子组合。 这与你在照明方面可以做到的另一个极端相距甚远,但是你可以深入到那里的代码中,或者阅读我的小小的文章来了解它是如何工作的。