ようやく当初の目的である、背景3Dな2DSTGっぽいことが出来るようになってきた。
前はMesh使わないとオブジェクトを設置できなかったけど、なんとか自力で描画できるようになった。
頂点情報をプログラムで算出してるから、複雑な形状は不可能。
外からデータを取ってこれるようにすればそれっぽいのかな。
D3DXMatrixPerspectiveFovLH(
&proj,
Math::degToRad(120.f),
800.f/600.f,
0,
5000
);
プロジェクション設定を上記のように間違えてて、
Zバッファがうまく動かねえってしばらく詰まってた。正しくは、
D3DXMatrixPerspectiveFovLH(
&proj,
Math::degToRad(120.f),
800.f/600.f,
1,
5000
);
のように、パラメータを0→1にする。0ではうまく動かないらしい。
このミス、前もした気がする。
頂点座標の計算は
D3DXMATRIXA16 mat, calc;
// 拡大
D3DXMatrixScaling( &mat, 省略 );
// 回転
D3DXMatrixRotationYawPitchRoll( &calc, 省略 );
mat *= calc;
// 平行移動
mat._41 += moveX;
mat._42 += moveY;
mat._43 += moveZ;
とかやると、拡大回転移動成分でできた行列が出来るので、
D3DXMATRIXA16 tmp;
D3DXMatrixIdentity( &tmp );
tmp._41 = 元データの頂点位置X;
tmp._42 = 元データの頂点位置Y;
tmp._43 = 元データの頂点位置Z;
tmp *= mat;
のように、行列に3Dモデルの頂点座標をセットしてから掛けてやると、
回転や移動後の座標が得られる。
動かしてみたらうまく動いたからこのようにしてるけど、
論理的に正しいのかどうかは分からん。
行列って数ⅢAかなんかだったっけ。まったく覚えてないね!
*090420追記
数ⅠA、ⅡB、ⅢCって区分だと後からわかった。何よⅢAって。
いかにわかってないかがわかる。俺の背中。俺スタイル。
0 件のコメント:
コメントを投稿