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
バイス生成時
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)
        );

    /*描画*/
}

まずはこれだけあれば大丈夫でしょうか。



描画編へ