1

私は頭を包み込もうとしています:

http://msdn.microsoft.com/en-us/library/bb196409.aspx

そして、参照はあまり続きません。短くて漠然としていて、そこから学べるものは何もありません。

Triangle = (3 つのベクトルのクラス) のリストを取得してレンダリングし、後で色またはテクスチャで塗りつぶすことができるメソッドを作成したいと考えています。

誰かが上記の方法を説明できますか? 私がしようとしていることが単に機能していないからです。三角形を1つ追加してみました。以下の私の理解は、私が間違っているところを修正してください。

「One Triangle」作成時の方法:

GraphicsDevice.DrawUserIndexedPrimitives<VertexPositionColor>
(
    PrimitiveType.TriangleStrip,
    "array of 3 VertexPositionColor?",
    0,
    (3? 9?),
    "I have no clue what to put here and why I should put it here?",
    "What do I put here?",
    "If 1 triangle, value should be = 1? 1 Triangle = 1 Primitive"
);

これを機能させるには何が必要ですか? メソッドに渡す三角形の数に応じて、レンダリングする必要がありますか? また、三角形の数に応じてどのような値が変化しますか?

...そして、成功した場合 (願わくはいつか)、どうすればそれを埋めることができますか?

参考文献はそれを非常にうまく行っているので、あいまいな短い答えはやめてください。

4

1 に答える 1

6

始める前に、あなたの考え方を明確にします。XNA では、ワイヤフレーム (アウトライン) の三角形、塗りつぶされた三角形、またはテクスチャ付きの三角形を描画します。「今描いて」「後で塗りつぶす」なんてことはありません。フレームバッファに既にあるものの上に何か他のものを描画することしかできません。

また、インデックス付きメッシュの背景についても説明しますこれは、DrawUserIndexedPrimitives (一連の頂点へのインデックスで構成される頂点および三角形) に供給されるデータです。

それを考えると、ドローコールがどのように機能するかは次のとおりです

    _effect.Texture = texture; // This sets the texture up so the 
    // shaders associated with this effect can access it

    // The color in each vertex is modulated with the texture color 
    // and linearly interpolated across vertices
    _effect.VertexColorEnabled = true;

    foreach (var pass in _effect.CurrentTechnique.Passes)
    {
        pass.Apply(); // This sets up the shaders and their state

        // TriangleList means that the indices are understood to be 
        // multiples of 3, where the 3 vertices pointed to are comprise
        // one triangle
        _device.DrawUserIndexedPrimitives(PrimitiveType.TriangleList,

        // The vertices. Note that there can be any number of vertices in here.
        // What's important is the indices array (and the vertexOffset, primitivecount, vertexCount) that determine
        // how many of the provided vertices will actually matter for this draw call
                                                      _vertices, 
        // The offset to the first vertex that the index 0 in the index array will refer to
        // This is used to render a "part" of a bigger set of vertices, perhaps shared across
        // different objects
                                                      0,
        // The number of vertices to pick starting from vertexOffset. If the index array 
        // tried to index a vertex out of this range then the draw call will fail.
                                                      _vertices.Count,
        // The indices (count = multiple of 3) that comprise separate triangle (because we said TriangleList - 
        // the rules are different depending on the primitive type)
                                                      _indices, 
        // Again, an offset inside the indices array so a part of a larger index array can be used
                                                      0,
        // Number of indices. This HAS to be a multiple of 3 because we said we're rendering
        // a list of triangles (TrangleList).
                                                      kvp.Value.Indices.Count / 3);
    }

それが明確であることを願っています。各パラメーターや概念について具体的な質問がある場合はお知らせください。この投稿を編集してそれらの点を明確にすることができます。

お役に立てれば!

于 2012-06-21T14:46:44.973 に答える