Abh*_*bhi 2 iphone opengl-es ios opengl-es-2.0
我正在尝试找到任何教程或示例代码,它们解释并显示了OpenGL ES 2.0中灯光的使用.我在网上看到的大多数材料都是指Opengl ES 1.1.
任何人都可以提供有关如何在OpenGL ES 2.0中进行照明的任何链接或文档吗?
Bra*_*son 11
OpenGL ES 2.0的难点在于,由于您可以根据自己的需要编写自己的着色器,因此没有一种方法可以为对象提供照明.这取决于您希望如何呈现您的内容.
也就是说,您可以通过提供光线方向和计算每个顶点的光强度来复制OpenGL ES 1.1的固定功能照明功能.你可以在这个示例应用程序中看到一个这样的示例,我为我的一个类打了一对.
这里使用的顶点着色器如下:
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));
}
Run Code Online (Sandbox Code Playgroud)
使用匹配的片段着色器:
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);
}
Run Code Online (Sandbox Code Playgroud)
光点方向的点积和该顶点处的法线用于计算从该顶点撞击观察者眼睛的光强度.然后在每个三角形的顶点之间插入该光强度,以给出每个片段的强度.
我在我的开源Molecules应用程序中做了一些更高级的每像素照明,其中每个球体和圆柱体实际上是一个位于矩形内的光线跟踪冒名顶替者.对于每个像素,我计算虚拟对象上该点处的镜面反射和环境光照贡献,然后将其与在模型加载时计算的环境遮挡因子相结合.这远远超出了你可以用照明做的另一个极端,但是你可以深入研究那里的代码或者阅读我关于它如何工作的小文章.
| 归档时间: |
|
| 查看次数: |
5064 次 |
| 最近记录: |