C#でツールを作る その5 -3Dポリゴン 準備編-
3D描画のための設定はいろいろ面倒ですねぇ。
3Dを使い始めた頃は何を設定していいのか全然わからなくて、非常に困りました。
少しでも設定が足りないと何も描画されないですからね。
エラーとか警告を出してくれれば楽なんですが。。。
デバイス生成時のパラメータ
- Zバッファの自動生成を有効にする
- Zバッファのフォーマット
- とりあえずDepthFormat.D16
バックバッファのクリア時
- Zバッファもクリア
- ClearFlags.ZBuffer
レンダーステート
- Zバッファ有効
- RenderState.ZBufferEnable
- Zバッファへの書き込み有効
- RenderState.ZBufferWriteEnable
- とりあえずライティングオフ
- RenderState.Lighting
カメラの設定
- ビュー行列
- Transform.View
- Matrix.LookAtLH()
- カメラ座標
- 注視点
- カメラの真上方向
- プロジェクション行列
- Transform.Projection
- Matrix.PerspectiveFovLH
- 視野角
- アスペクト比
- 視線方向で見える範囲(naer, far)
デバイス生成時
private void CreateDevice() { PresentParameters pp = new PresentParameters(); pp.Windowed = true; pp.SwapEffect = SwapEffect.Discard; // //Zバッファの生成 // pp.EnableAutoDepthStencil = true; pp.AutoDepthStencilFormat = DepthFormat.D16; /*デバイス生成*/ }
描画時
private void Render() { device.Clear(ClearFlags.Target | ClearFlags.ZBuffer, Color.FromArgb(0x333333), 1.0f, 0); device.BeginScene(); // //3D描画のための設定 // device.RenderState.Lighting = false; device.RenderState.ZBufferEnable = true; device.RenderState.ZBufferWriteEnable = true; // //カメラの設定 // device.Transform.View = Matrix.LookAtLH( new Vector3( 2.0f, 3.0f, -5.0f ), //カメラ座標 new Vector3( 0.0f, 0.0f, 0.0f ), //注視点 new Vector3( 0.0f, 1.0f, 0.0f ) //カメラの真上方向 ); device.Transform.Projection = Matrix.PerspectiveFovLH( Geometry.DegreeToRadian( 45.0f ), //視野角 ( float )view.Width / view.Height, //アスペクト比 1.0f, 100.0f //視線方向で見える範囲(naer, far) ); /*描画*/ }
まずはこれだけあれば大丈夫でしょうか。
描画編へ