为什么缩放(统一)对象会导致对象在OpenGL ES 1.x中变亮?
更为明显的是,它会变暗,因为不是缩小法线也会使物体变暗吗?但由于某种原因,物体变得更轻。当我向上扩展时,对象变得更暗。在我看来,这应该是相反的。
请不要建议使用GL_NORMALIZE等。我只是好奇为什么OpenGL实现会这样。
答案 0 :(得分:7)
简单的问题,复杂的答案。这是红皮书中的相关摘录:
转换法线
法线向量不会变换 与顶点或位置相同的方式 向量。在数学上,它更好 把法线向量看作不是 矢量,但作为垂直的平面 对那些向量。然后, 正常的转换规则 矢量描述 垂直的转换规则 飞机。表示均匀平面 由行向量(a,b,c,d),其中 a,b,c或d中的至少一个是 非零。如果q是非零的真实 数字,然后(a,b,c,d)和(qa,qb, qc,qd)代表同一平面。一个 点(x,y,z,w)T在平面上 (a,b,c,d)如果ax + by + cz + dw = 0。(如果w = 1,这是欧氏飞机的标准描述。)为了 (a,b,c,d)代表欧几里德 飞机,a,b或c中的至少一个必须 非零。如果他们都是零,那么 (0,0,0,d)代表“平面at 无限,“包含所有的 “无限远点。”
如果p是均匀平面而v是a 同质顶点,然后声明 写着“v在飞机上的谎言” 数学上为pv = 0,其中pv为 正常矩阵乘法。如果M是 非奇异顶点变换 (也就是说,有一个4×4矩阵 逆M-1),则pv = 0 相当于pM-1Mv = 0,所以Mv所在 在飞机上pM-1。因此,pM-1是 顶点下的平面图像 转型M.
如果你想要考虑法向量 作为向量而不是作为平面 垂直于它们,让v和n成为 矢量使得v是垂直的 到了然后,nTv = 0.因此,对于 任意非奇异变换 M,nTM-1Mv = 0,表示nTM-1 是变形的转置 法向量。于是,改造了 法向量是(M-1)T n。其他 单词,法向量被转换 通过逆转置 转换点的转换。 呼!
简而言之,位置和法线不会以相同的方式变换。如前文所述,正常变换矩阵是(M-1)T 。将M缩放到sM将导致(M-1)T / s :比例因子越小,转换后的法线越大......我们走了!
答案 1 :(得分:0)
似乎法线不会随对象缩放。这意味着对于全尺寸的对象的法线将更大地覆盖更小尺寸的对象。这将导致光源和法线之间的角度完全相同,但是在更小的表面上。
答案 2 :(得分:0)
在opengl的上下文中的答案就在这里, http://www.opengl.org/resources/features/KilgardTechniques/oglpitfall/
见#16。它给出了整个故事。