Object のサイズと描画のサイズ

C# DirectX で小さいモデルから大きいモデルまで、画面全体に同じように描画します。
Object のサイズと描画のサイズは別物で、1ミリ以下のものから数キロメートルを超えるものまで 画面全体に同じように描画することができます。

前田稔(Maeda Minoru)の超初心者のプログラム入門

プログラムの説明

  1. 4面体の頂点座標(X,Y,Z)と頂点の色を定義しています。
    プログラムは 四面体を回転しながら描画する を参照して下さい。
    隣り合った三角形の一辺がつながるように頂点を定義(TRIANGLESTRIP)しています。
    「四面体を回転しながら描画する」と同じサイズで定義してみました。
        int[] cor = new int[6]
        {  (int)0x0000ff, (int)0xff0000, (int)0xffffff, (int)0x00ff00, (int)0x0000ff, (int)0xff0000  };
    
        float[,]    vt = new float[6, 3]
        { { -5.0f, 0.0f, 5.0f },   { 5.0f, 0.0f, 5.0f },  { 0.0f, 8.16f, 2.11f },
          {  0.0f, 0.0f, -3.66f }, { -5.0f, 0.0f, 5.0f }, { 5.0f, 0.0f, 5.0f } };
        
  2. 前回と違いサイズが一桁小さくなっています。
    int[] cor はサイズが変わっても同じです。
    モデルを画面全体に大きく描画して下さい。
        float[,]    vt = new float[6, 3]
        { { -0.5f, 0.0f, 0.5f },    { 0.5f, 0.0f, 0.5f },  { 0.0f, 0.816f, 0.211f },
          {  0.0f, 0.0f, -0.366f }, { -0.5f, 0.0f, 0.5f }, { 0.5f, 0.0f, 0.5f } };
        
  3. 前回と違いサイズが二桁大きくなっています。
    モデルを画面全体に収まるように描画して下さい。
    モデルのサイズが変わると「どこをどう設定しなければならない」のでしょう。
    ヒントは カメラを設定して描画する を参照して下さい。
        float[,]    vt = new float[6, 3]
        { { -500.0f, 0.0f, 500.0f }, { 500.0f, 0.0f, 500.0f },  { 0.0f, 816.0f, 211.0f },
          {  0.0f, 0.0f, -366.0f },  { -500.0f, 0.0f, 500.0f }, { 500.0f, 0.0f, 500.0f } };
        
  4. モデルの中心座標は (0,0,0) に設定するのが普通なのですが、中心をずらすとどうなるのでしょう。
    下記に定義した四面体を画面の中央に描画して下さい。
    中央に描画する方法には、カメラの座標を変える方法と、注視点を変える方法と、Object の座標を変える方法などがあります。
        float[,]    vt = new float[6, 3]
        { {  0.0f, 0.0f, 500.0f },    { 1000.0f, 0.0f, 500.0f }, { 500.0f, 816.0f, 211.0f },
          {  500.0f, 0.0f, -366.0f }, { 0.0f, 0.0f, 500.0f },    { 1000.0f, 0.0f, 500.0f } };
        
  5. このままではウインドウのアスペクト比(縦横比)が変わるとモデルの形も変わります。
    そこでウインドウのアスペクト比が変わってもモデルの形が変わらないように設定してみましょう。
    ウインドウを縦長,横長にして、モデルの形が変わらないことを確認して下さい。
        device.Transform.Projection = Matrix.PerspectiveFovLH((float)Math.PI / 4,
            (float)this.Width / (float)this.Height, 1.0f, 5000.0f);
        

超初心者のプログラム入門(C# Frame Work)