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)
)的一部分,失去了自由度。您要在此處執行的操作并不是從數量上隨時間變化的意義上進行輪換。它只是根據輸入在每一幀生成一個新的變換。
添加回答
舉報