为什么缩小对象会导致OpenGL ES中的对象更轻?

时间:2009-05-25 22:08:19

标签: opengl-es

为什么缩放(统一)对象会导致对象在OpenGL ES 1.x中变亮?

更为明显的是,它会变暗,因为不是缩小法线也会使物体变暗吗?但由于某种原因,物体变得更轻。当我向上扩展时,对象变得更暗。在我看来,这应该是相反的。

请不要建议使用GL_NORMALIZE等。我只是好奇为什么OpenGL实现会这样。

3 个答案:

答案 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。它给出了整个故事。