1

編集

Mark Hが提案したことを読んだので(どうもありがとう、とても役に立ちました)、私の質問は次のように構造化されてより明確になると思います:

XNA 4.0 を使用して、立方体を描画しようとしています。

この方法を使用しています:

GraphicsDevice.DrawUserIndexedPrimitives<VertexPositionColor>(
    PrimitiveType.LineList,
    primitiveList,
    0,  // vertex buffer offset to add to each element of the index buffer
    8,  // number of vertices in pointList
    lineListIndices,  // the index buffer
    0,  // first index element to read
    7   // number of primitives to draw
);

このページから一連の三角形を単純に描画するコード サンプルを取得しました。立方体を描画するために、このコードを変更したいと思います。立体感を感じられるように、カメラをずるずると動かすことができました。立方体を定義する 8 つのポイントを含むように頂点配列を設定しました。しかし、各 に対して描画する必要があるプリミティブの数 (最後のパラメーター) を完全には理解できませんPrimitiveType

そのため、立方体を描画できませんでした (定義されていない順序のエッジの一部のみ)。

詳細:

頂点インデックス リストを作成するために使用されるサンプル

// Initialize an array of indices of type short.
lineListIndices = new short[(points * 2) - 2];

// Populate the array with references to indices in the vertex buffer
for (int i = 0; i < points - 1; i++)
{
    lineListIndices[i * 2] = (short)(i);
    lineListIndices[(i * 2) + 1] = (short)(i + 1);
}

恥ずかしいことに、立方体の場合は同じことができません。

  • のサイズはlineListIndices
  • どのように入力すればよいですか?どの順番で?

そして、別の を使用すると、これらはどのように変化しますPrimitiveTypeか?

コード サンプルには、完全には理解できない別の呼び出しもいくつかあります。

// Initialize the vertex buffer, allocating memory for each vertex.
vertexBuffer = new VertexBuffer(graphics.GraphicsDevice, vertexDeclaration,
points, BufferUsage.None);

// Set the vertex buffer data to the array of vertices.
vertexBuffer.SetData<VertexPositionColor>(pointList);

vertexDeclaration = new VertexDeclaration(new VertexElement[]
  {
    new VertexElement(0, VertexElementFormat.Vector3, VertexElementUsage.Position, 0),
    new VertexElement(12, VertexElementFormat.Color, VertexElementUsage.Color, 0)
  }
);

つまり、重要な (サルのような) ガイドを見つけることができませんでしたVertexBufferVertexDeclaration彼らも物事の理解に関与している可能性があると思うので、私も報告しました。

頂点が配列に格納される順序に関連することも理解する必要があると思います。しかし、実際には、この関数で立方体を描画するために何を学べばよいのかわかりません。ですから、誰かが私を正しい方向に向けることができれば、それはありがたいです.

今回は自分自身を明確にしたことを願っています

4

1 に答える 1

2

最終的に、立方体を描くための価値のあるガイドを見つけることができました。そこではDrawUserPrimitive<T>メソッドを使用していますが、違いは非常に薄いものです。両方の方法を使用しても問題はありませんでした。ご覧のとおり、このガイドには、頂点を保存してから描画する必要がある順序や、描画メソッドを渡すプリミティブの数など、立方体の描画に関するすべての懸念事項に関する説明が含まれています。私のように悩んでいる方の参考になれば幸いです。

于 2013-10-25T07:43:53.157 に答える