1

わかりました、これは難しい質問です。1 つの頂点配列で立方体とピラミッドを作成しています。私の問題は、立方体の頂点ではなくピラミッドの頂点のみを回転させることですが、いくつかの頂点を回転できる関数がわかりません。頂点を回転しようとすると、ピラミッドと立方体が回転します。

4

2 に答える 2

2

また

  • 立方体とピラミッドを異なる頂点配列に配置し、異なる変換を使用して各配列をレンダリングします

また

  • 頂点シェーダーで回転を適用し、頂点シェーダーが各頂点を立方体またはピラミッドの一部として扱うかどうかを決定できるようにする補助的な頂点ごとの情報を渡します(つまり、それぞれの場合に異なる変換を適用します)。これは、「ブレンドウェイト」を使用して「頂点ブレンディング」を行うのと少し似ています。ただし、バイナリの場合にのみ関心があります。
于 2010-09-24T20:37:00.840 に答える
1

最初に考えたのは、ピラミッドとキューブの頂点が配列内の重複しない別々の範囲を占めるようにすることです。ピラミッドの頂点を回転させるときは、配列のその範囲についてのみDirectXに通知します(配列全体ではなく、ベースポインターと範囲のサイズを使用します)。

DirectXAPIをチェックします...

編集

確認済み。重要な機能は...

D3DXVECTOR4 * D3DXVec4TransformArray(D3DXVECTOR4 * pOut,
                                     UINT OutStride,
                                     CONST D3DXVECTOR4* pV,
                                     UINT VStride,
                                     CONST D3DXMATRIX* pM,
                                     UINT n
                                    );

C ++では、配列のサブ範囲は多くの点でそれ自体が配列であり、要点を言えば、ほとんどの場合、境界がどこにあるかを示すことのない単なるメモリブロックです。したがって、変換を適用するサブ範囲を示すためにpV、異なるものと異なるものを渡すだけnです。関数に関する限り、それ配列全体です。おそらく、変換されていない部分を個別にコピーする必要があります-memcpyの仕事だと思います。

ストライド値は通常、ベクトルのサイズに位置合わせのパディングを加えたものですが、これについても「嘘をつき」、配列内の3つおきのベクトルなどに変換することができます。

于 2010-09-24T20:36:50.210 に答える