3 回答
TA贡献1798条经验 获得超7个赞
构造4x4变换矩阵而不是四元数。
不要忘记OpenGL具有列明智矩阵
所以对于
double m[16];
是X
轴向量inm[ 0],m[ 1],m[ 2]
是Y
轴向量inm[ 4],m[ 5],m[ 6]
是Z
轴向量inm[ 8],m[ 9],m[10]
和位置inm[12],m[13],m[14]
该LCS意味着局部坐标系(你的三角形或对象或其他)
和GCS意味着全球坐标系(世界或其他)。所有
X,Y,Z
矢量都应归一化为单位矢量,否则会发生缩放。施工
将
Z
轴矢量设置为三角形法线将位置(LCS原点)设置为三角形的中点(或其顶点的平均点)
现在你只需要
X
和Y
轴系这是很容易让
X = any triangle vertex - triangle midpoint
或X = substraction of any 2 vertexes of triangle
必须满足的唯一条件
X
是它必须位于三角形平面上。
现在Y = X x Z
,叉积将创建垂直于X
和的矢量Z
(其也位于三角形平面中)。现在,将所有这些内容放入矩阵中,并将其作为矩阵或任何形式加载到OpenGL
ModelView
。
TA贡献1998条经验 获得超6个赞
不知道万向节锁定的含义(我的词典只知道万向节头),但是如果您想将点对准/锁定到三角形(而不仅仅是其平面),则将原点(x0,y0,z0)和一个在每帧或每次迭代中,以相同的方式(相对于三角形)进行轴旋转。因此,例如,如果原点是三角形(中点(P0+P1+P2)/3
)的平均顶点,并且X(或Y)轴指向相同的三角形顶点,(P0-((P0+P1+P2)/3))
那么您的半球所处的三角形位置/方向将始终以相同的方式对齐(即使三角形改变了)形状)
TA贡献1868条经验 获得超4个赞
万向节锁定是一系列旋转(即next_transform = rotate_func(current_transform)
)的一部分,失去了自由度。您要在此处执行的操作并不是从数量上随时间变化的意义上进行轮换。它只是根据输入在每一帧生成一个新的变换。
添加回答
举报