亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

旋轉一組向量

旋轉一組向量

森欄 2019-09-27 15:39:06
我正在嘗試將一組采樣的矢量旋轉到三角形的法線如果正確,則隨機采樣的半球將與三角形對齊。目前,我在Z軸上生成它,并嘗試將所有樣本旋轉到三角形的法線。但似乎“剛好”glm::quat getQuat(glm::vec3 v1, glm::vec3 v2){    glm::quat myQuat;    float dot = glm::dot(v1, v2);    if (dot != 1)    {        glm::vec3 aa = glm::normalize(glm::cross(v1, v2));        float w = sqrt(glm::length(v1)*glm::length(v1) * glm::length(v2)*glm::length(v2)) + dot;        myQuat.x = aa.x;        myQuat.y = aa.y;        myQuat.z = aa.z;        myQuat.w = w;    }    return myQuat;}我是從此頁面底部提取的:http : //lolengine.net/blog/2013/09/18/beautiful-maths-quaternion-from-vectors然后我 :glm::vec3 zaxis = glm::normalize( glm::vec3(0, 0, 1) );  // hardcoded but test orginal axisglm::vec3 n1 = glm::normalize( glm::cross((p2 - p1), (p3 - p1)) ); //normalglm::quat myQuat = glm::normalize(getQuat(zaxis, n1));glm::mat4 rotmat = glm::toMat4(myQuat); //make a rotation matrixglm::vec4 n3 = rotmat * glm::vec4(n2,1); // current vector I am trying to rotate
查看完整描述

3 回答

?
元芳怎么了

TA貢獻1798條經驗 獲得超7個贊

構造4x4變換矩陣而不是四元數。

http://img1.sycdn.imooc.com//5d8dbcc80001342305850199.jpg

  1. 不要忘記OpenGL具有列明智矩陣

    所以對于double m[16]; 
    X軸向量in m[ 0],m[ 1],m[ 2] 
    Y軸向量in m[ 4],m[ 5],m[ 6] 
    Z軸向量in m[ 8],m[ 9],m[10] 
    和位置in m[12],m[13],m[14]

    LCS意味著局部坐標系(你的三角形或對象或其他)
    GCS意味著全球坐標系(世界或其他)。

    所有X,Y,Z矢量都應歸一化為單位矢量,否則會發生縮放。

  2. 施工

    1. Z軸矢量設置為三角形法線

    2. 將位置(LCS原點)設置為三角形的中點(或其頂點的平均點)

    3. 現在你只需要XY軸系這是很容易

      X = any triangle vertex - triangle midpoint 
      X = substraction of any 2 vertexes of triangle

      必須滿足的唯一條件X是它必須位于三角形平面上。 
      現在Y = X x Z,叉積將創建垂直于X和的矢量Z(其也位于三角形平面中)。

    4. 現在,將所有這些內容放入矩陣中,并將其作為矩陣或任何形式加載到OpenGLModelView。


查看完整回答
反對 回復 2019-09-27
?
米琪卡哇伊

TA貢獻1998條經驗 獲得超6個贊

不知道萬向節鎖定的含義(我的詞典只知道萬向節頭),但是如果您想將點對準/鎖定到三角形(而不僅僅是其平面),則將原點(x0,y0,z0)和一個在每幀或每次迭代中,以相同的方式(相對于三角形)進行軸旋轉。因此,例如,如果原點是三角形(中點(P0+P1+P2)/3)的平均頂點,并且X(或Y)軸指向相同的三角形頂點,(P0-((P0+P1+P2)/3))那么您的半球所處的三角形位置/方向將始終以相同的方式對齊(即使三角形改變了)形狀)

查看完整回答
反對 回復 2019-09-27
?
MYYA

TA貢獻1868條經驗 獲得超4個贊

萬向節鎖定是一系列旋轉(即next_transform = rotate_func(current_transform))的一部分,失去了自由度。您要在此處執行的操作并不是從數量上隨時間變化的意義上進行輪換。它只是根據輸入在每一幀生成一個新的變換。

查看完整回答
反對 回復 2019-09-27
  • 3 回答
  • 0 關注
  • 1024 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號