1

私は最初の C++ および DirectX 11 プロジェクトに取り組んでおり、現在の目標は画面に色付きの三角形を描画することです。これで問題なく動作しました。ただ、一箇所変えたいところがあるのですが、やり方がわかりません。解決策を探してみましたが、まだ見つかっていません。その理由は、何を検索すればよいかわからないためだと思います。

現在、次のように三角形の 3 つの頂点を設定しています。

VertexPos vertices[] =
{
    { XMFLOAT3(  0.5f,  0.5f, 1.0f )},
    { XMFLOAT3(  0.5f, -0.5f, 1.0f )},
    { XMFLOAT3( -0.5f, -0.5f, 1.0f )},
}

VertexPos は次のように定義されます。

struct VertexPos
{
    XMFLOAT3 pos;
};

現在、頂点の位置は -1.0F から 1.0F の範囲で設定されています。0.0F が中心です。次のような「実際の」座標を使用して頂点を配置できるように、これを変更するにはどうすればよいですか。

VertexPos vertices[] =
{
    { XMFLOAT3(  100.0f,  300.0f, 1.0f )},
    { XMFLOAT3(  200.0f,  200.0f, 1.0f )},
    { XMFLOAT3(  200.0f,  300.0f, 1.0f )},
}
4

1 に答える 1

2
  1. 通常の方法:

    • 正射影行列を作成します ( XMMatrixOrthographicLH()XMMATH を使用している場合)
    • CPU 側 (C++ コード) および GPU サイズ (頂点シェーダー) でこの行列を使用して定数バッファーを作成します。
    • 頂点シェーダーで頂点位置に直交射影行列を掛ける
  2. より簡単な方法(F.Lunaの本から):

    XMFLOAT3 SpriteBatch::PointToNdc(int x, int y, float z)
    {
        XMFLOAT3 p;
    
        p.x = 2.0f*(float)x/mScreenWidth - 1.0f;
        p.y = 1.0f - 2.0f*(float)y/mScreenHeight;
        p.z = z;
    
        return p;
    }
    

    ほぼ同じですが、CPU側です。もちろん、このコードをシェーダーに移動することもできます。

PSおそらく、あなたの本/マニュアル/チュートリアルは、少し後でそれについて学ぶでしょう. したがって、それを信頼して、段階的に進めてください。

ハッピーコーディング!=)

于 2013-10-07T19:47:58.943 に答える