什么是DOT3照明?
-
19-09-2019 - |
题
解决方案
DOT3-照明通常被称为每个像素的光照。与顶点照明照明在每个顶点计算出,将所得照明被内插在三角形。在每个像素的光照,顾名思义,该对象是在每个像素来计算照明
这是在固定功能硬件完成的iPhone是用所谓的寄存器组合的方式。名称DOT3来源于此渲染状态:
glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB, GL_DOT3_RGB);
看这的沃尔夫冈博客条目恩格斯博客上究竟如何进行此设置的详细信息。
当做每个像素的光照它的流行也利用所谓的正常地图。这意味着,在正常的对象上的每个点的存储在一个特殊的纹理图,法线图。这是在游戏DOOM 3的地方相当低多边形模型用在ID软件,但具有高分辨率法线贴图推广。之所以使用这种技术是,眼睛处于照明比在形状变化到的变化更为敏感。
我在你的其他问题,看到这想出的原因是你想减少顶点数据的内存占用。这是真实的,而不是存储在每个顶点的一个正常的三个组件,你只需要存储两个部件的纹理坐标法线贴图。使每个像素的光照会带来性能上的代价,虽然,所以我不知道这是否会成为一个净赢,像往常一样的建议是尝试看看。
最后,在一个点处的漫反射光照强度正比于表面法线和光的方向之间的角度的余弦值。两个矢量的点积是定义为:
a dot b = |a||b| cos(theta)
其中|a|
和|b|
是矢量a
和b
的分别的长度和theta
是它们之间的角度。如果长度等于一,|a|
和|b|
被称为单位矢量和下式简化为:
a dot b = cos(theta)
这意味着,漫射照明强度是由表面法线与光的方向之间的点积给出。这意味着所有的漫射照明是DOT3照明的一种形式,即使该名称已经到指每个像素的类。
其他提示
从这里:
凹凸贴图穿着其中每一纹理像素的亮度定义了纹理像素的高度的模型的纹理。
每一纹理像素的高度然后被用于扰乱在表面上的照明。
正常映射是把纹理上的模型,其中每一纹理像素的颜色是定义的方向确实三个值,关于表面点位置。
的颜色(255,0,0),例如,可能意味着在该位置的表面指向下方的X轴正方向。
在换句话说,每个纹素是一种正常的。
在DOT3名字来源于你实际上这些正常人做的。
让我们假设你有指向的方向的光源点的向量。让我们说你有这是在告诉你对你的模型的特定纹理像素正常的载体,其方向纹理像素点。
如果你做这两个法向量称为“积”的简单数学方程式,像这样:
点=和N1x N2X + N1y N2y + N1z * N2z
然后,将得到的值是一个数,它告诉你这两个向量在同一方向上多少点。
如果该值是-1,则它们指向相反方向,这实际上意味着,纹理像素指向在光源,并且所述光源设置在纹素指向,所以纹理像素应点亮
如果该值为1,则它们指向相同的方向,这意味着纹理像素被从光源背向。
和如果该值为0,则在90度相对于其它的矢量点中的一个。即:如果你站在地上期待,那么你的观点向量相对于正常指向了地面90度。