LWでの回転行列メモ1
私的メモなので間違ってる可能性が高いです。
世に僅かにある情報の断片の泡沫の一つとしてメモ(;・з・)
基本的にmat[3][3]として。
[0]:[0][1][2]
[1]:[0][1][2]
[2]:[0][1][2]
●iteminfo->param(LWIP_RIGHT/UP/FORWARD)の戻りをrt[3],up[3],fw[3]として、
○[0][0]=rt[0], [0][1]=rt[1]...のように素(横方向)に代入すると
[X Y Z]
[0][0][1][2] rt→
[1][0][1][2] up→
[2][0][1][2] fw→
となり、D3Dの(?)行列になる。 その正式な呼称は不明、便宜上D3Dモデルと呼ぶ。
・radianを行列に変換する際は応じた要素にcos(radian),sin(radian)を突っ込む。
Head回転(Y軸回転)
[0][0]= cos [0][2]=-sin
[2][0]= sin [2][2]= cos
Pitch回転(X軸回転)
[1][1]= cos [1][2]= sin
[2][1]=-sin [2][2]= cos
Bank回転(Z軸回転)
[0][0]= cos [0][1]= sin
[1][0]=-sin [1][1]= cos
○[0][0]=rt[0], [1][0]=rt[1]...のように縦方向に代入すると
X [0][0][0][0]
Y [1][1][1][1]
Z [2][2][2][2]
rt up fw
↓ ↓ ↓
となり、OpenGLの(?)行列になる。 便宜上OGLモデルと呼ぶ。
・radianを行列に変換する際は応じた要素にcos(radian),sin(radian)を突っ込む。
Head回転(Y軸回転)
[0][0]= cos [0][2]= sin
[2][0]=-sin [2][2]= cos
Pitch回転(X軸回転)
[1][1]= cos [1][2]=-sin
[2][1]= sin [2][2]= cos
Bank回転(Z軸回転)
[0][0]= cos [0][1]=-sin
[1][0]= sin [1][1]= cos
※D3DとOGLでは行列の縦横の違いから、sinと-sinの入る先が入れ替わる事になる。
●LWではradian値から行列を作る場合、BPHの順で掛ける。
行列の乗算処理は、
for(i = 0; i < 3; ++i)
for(j = 0; j < 3; ++j)
state; として、
○D3Dでのstate;は
m[i][j] = (m1[i][0] * m2[0][j]) + (m1[i][1] * m2[1][j]) + (m1[i][2] * m2[2][j]);
○OGLでのstate;は
m[j][i] = (m1[0][i] * m2[j][0]) + (m1[1][i] * m2[j][1]) + (m1[2][i] * m2[j][2]);
となる。
続く。
世に僅かにある情報の断片の泡沫の一つとしてメモ(;・з・)
基本的にmat[3][3]として。
[0]:[0][1][2]
[1]:[0][1][2]
[2]:[0][1][2]
●iteminfo->param(LWIP_RIGHT/UP/FORWARD)の戻りをrt[3],up[3],fw[3]として、
○[0][0]=rt[0], [0][1]=rt[1]...のように素(横方向)に代入すると
[X Y Z]
[0][0][1][2] rt→
[1][0][1][2] up→
[2][0][1][2] fw→
となり、D3Dの(?)行列になる。 その正式な呼称は不明、便宜上D3Dモデルと呼ぶ。
・radianを行列に変換する際は応じた要素にcos(radian),sin(radian)を突っ込む。
Head回転(Y軸回転)
[0][0]= cos [0][2]=-sin
[2][0]= sin [2][2]= cos
Pitch回転(X軸回転)
[1][1]= cos [1][2]= sin
[2][1]=-sin [2][2]= cos
Bank回転(Z軸回転)
[0][0]= cos [0][1]= sin
[1][0]=-sin [1][1]= cos
○[0][0]=rt[0], [1][0]=rt[1]...のように縦方向に代入すると
X [0][0][0][0]
Y [1][1][1][1]
Z [2][2][2][2]
rt up fw
↓ ↓ ↓
となり、OpenGLの(?)行列になる。 便宜上OGLモデルと呼ぶ。
・radianを行列に変換する際は応じた要素にcos(radian),sin(radian)を突っ込む。
Head回転(Y軸回転)
[0][0]= cos [0][2]= sin
[2][0]=-sin [2][2]= cos
Pitch回転(X軸回転)
[1][1]= cos [1][2]=-sin
[2][1]= sin [2][2]= cos
Bank回転(Z軸回転)
[0][0]= cos [0][1]=-sin
[1][0]= sin [1][1]= cos
※D3DとOGLでは行列の縦横の違いから、sinと-sinの入る先が入れ替わる事になる。
●LWではradian値から行列を作る場合、BPHの順で掛ける。
行列の乗算処理は、
for(i = 0; i < 3; ++i)
for(j = 0; j < 3; ++j)
state; として、
○D3Dでのstate;は
m[i][j] = (m1[i][0] * m2[0][j]) + (m1[i][1] * m2[1][j]) + (m1[i][2] * m2[2][j]);
○OGLでのstate;は
m[j][i] = (m1[0][i] * m2[j][0]) + (m1[1][i] * m2[j][1]) + (m1[2][i] * m2[j][2]);
となる。
続く。
この記事へのコメント