Rob*_*nes 2 iphone opengl-es opengl-es-lighting
我的问题的答案表明DOT3照明可以帮助OpenGL ES渲染,但我很难找到DOT3照明的合适定义.
编辑1
iPhone相关信息非常感谢.
DOT3照明通常被称为每像素照明.使用顶点照明时,将在每个顶点计算光照,并在三角形上插入生成的光照.在每像素照明中,顾名思义,对象是计算每个像素的光照.
这是在固定功能硬件上完成的方式,因为iPhone使用所谓的寄存器组合器.名称DOT3来自此呈现状态:
glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB, GL_DOT3_RGB);
Run Code Online (Sandbox Code Playgroud)
请查看Wolfgang Engels博客上的这篇博客文章,了解有关如何设置此内容的更多信息.
在进行逐像素照明时,使用所谓的法线贴图也很受欢迎.这意味着对象上每个点的法线都存储在特殊纹理贴图中,即法线贴图.这在IDO软件的游戏DOOM 3中得到了普及,其中使用了相当低的多边形模型但具有高分辨率的法线贴图.使用这种技术的原因是眼睛对光线的变化比对形状的变化更敏感.
我在你的另一个问题中看到,出现这个问题的原因是你想减少顶点数据的内存占用.这是真的,您只需要将纹理坐标的两个组件存储到法线贴图中,而不是在每个顶点中存储法线的三个组件.启用每像素照明将带来性能成本,所以我不确定这是否会赢得净胜利,像往常一样建议尝试看看.
最后,点中的漫射照明强度与表面法线和光的方向之间的角度的余弦成比例.两个矢量的点积被定义为:
a dot b = |a||b| cos(theta)
Run Code Online (Sandbox Code Playgroud)
其中|a|和|b|是向量的长度a和b分别与theta它们之间的角度.如果长度等于1,|a|并且|b|被称为单位向量,则公式简化为:
a dot b = cos(theta)
Run Code Online (Sandbox Code Playgroud)
这意味着漫射照明强度由表面法线和光线方向之间的点积给出.这意味着所有漫反射照明都是DOT3照明的一种形式,即使该名称已经引用了每像素类型.