我正在尝试使用GLUI在OpenGL中实现一个功能,以便"Arcball“控件用于输入灯光的位置。我不知道该怎么做,因为arcball给出的旋转矩阵是4x4维的,而光的位置是一个由3个坐标组成的一维阵列。
发布于 2012-11-09 16:09:48
围绕场景旋转灯光只对平行光有意义(即无限大的位置)。所以你不是在旋转一个点,而是一个方向,就像法线一样。非常简单:让未旋转的灯光具有(0,0,1,0)方向。然后,为了在场景中旋转它,你可以将它乘以给定矩阵的转置逆矩阵。但是因为你知道这个矩阵只包含一个旋转,所以这是一个特例,转置逆与原始矩阵相同。
因此,您只需将初始灯光方向(0,0,1,0)与矩阵相乘即可。
我们可以进一步简化这一过程。如果你看一下乘法,你会看到,它本质上只是提取矩阵的(加权)列,对于这些列,原始灯光位置向量是非零的。所以,如果我们真的从(0,0,1,0)的光方向开始,你只需从arcball旋转矩阵中取第三列。
https://stackoverflow.com/questions/13301752
复制相似问题