サンプルとかみながら法線の求め方を作っていたんですが
分からなくなったので質問させてください
正規化した後どうやって角度を求めたら良いのでしょうか…
// 独自頂点フォーマット
typedef struct {
D3DXVECTOR3 position;
D3DXVECTOR3 normal;
DWORD color;
float a;
} CUSTOMVERTEX2;
~現在自分の乗っている三角形ポリの座標を求める~
↓求めた後
//P1~P3に求めたXYZの頂点座標を代入
CUSTOMVERTEX2 P1=triVertex[I1];//頂点情報その1
CUSTOMVERTEX2 P2=triVertex[I2];//その2
CUSTOMVERTEX2 P3=triVertex[I3];//その3
D3DXVECTOR3 vec1, vec2; // ベクトル
D3DXVECTOR3 normalize; // 法線ベクトル
vec1 = P1.position - P2.position;
vec2 = P3.position - P2.position;
// 外積を求める
D3DXVec3Cross( &normalize, &vec1, &vec2 );
CUSTOMVERTEX2 vertices;
//正規化する
D3DXVec3Normalize( &vertices.normal, &normalize );
ここまではやってみました
足りない所があったり
皆様からしたらアホすぎる質問かもしれませんがもしよかったらお願いします
解決していませんが
vec1 = P1.position - P2.position;
vec2 = P3.position - P2.position;
だと上向きの水平ポリゴンが
X 0
Y -1
Z 0
という下向きのベクトルを示す結果になっていたので
vec1 = P1.position - P3.position;
vec2 = P2.position - P3.position;
こっちに訂正します(これであってるのかな…)
自己解決しました
//外積を求める
D3DXVec3Cross( &normalize, &vec1, &vec2 );
//正規化する
D3DXVec3Normalize( &vertices.normal, &normalize );
//角度を求める
rotX = atan2f(vertices.normal.z,vertices.normal.y);
rotZ = -atan2f(vertices.normal.x,vertices.normal.y);
rotY = atan2f(vertices.normal.x,vertices.normal.z);
アークタンジェントというものを使うことで角度を取得することが出来ました
…そもそもプログラムより数学的な問題であってここで質問すること自体が
場違いだったようです
すいませんでした