0

マイクロソフトが提供する基本的な効果のサンプルに基づいてプロジェクトを開始しました。次に、カメラを動かすために入力されたキーを追加しました。最後のステップは、DXFファイルからテスト3Dデータをロードすることです。DXFインポートを自分で作成しました。これは、3D三角形を表す単純な3Dfaceオブジェクトです。基本エフェクトサンプルのコードを調整して、バリアント頂点カウントを読み取りました。しかし、頂点が正しく設定されていても、頂点宣言と頂点バッファーが正しく設定されていても、Normal0が見つからないというエラーが発生します。問題は頂点宣言にあると思います。元のサンプルには12個の三角形しかありませんが、私の最初のサンプルDXFには約1000個あります。問題はここにあると思います:

private void CreateVertexBuffer()
{
vertexDeclaration = new VertexDeclaration(new VertexElement[]
    {
        new VertexElement(0, VertexElementFormat.Vector3, VertexElementUsage.Position, 0),
        new VertexElement(12, VertexElementFormat.Vector3, VertexElementUsage.Normal, 0),
        new VertexElement(24, VertexElementFormat.Vector2, VertexElementUsage.TextureCoordinate, 0)
    }
);
vertexBuffer = new VertexBuffer(
    graphics.GraphicsDevice,
    vertexDeclaration,
    number_of_vertices,
    BufferUsage.None
    );
Vertices = new VertexPositionNormalTexture[number_of_vertices];
InitializeVerts();
vertexBuffer.SetData<VertexPositionNormalTexture>(Vertices);
graphics.GraphicsDevice.SetVertexBuffer(vertexBuffer);

}

Vertex Element 12 ... Vertex Element 24 ...これらは問題のある領域ですか?

4

1 に答える 1

0

VertexNormalTextureカスタム頂点タイプを宣言する場合、そのクラスを頂点タイプのデータとして使用することはできません。IVertexTypeクラスから派生したデータを保持するために、新しい構造体を作成する必要があります。次に、構造内で、メソッドを介して頂点宣言を使用できるようにします。

次に、新しい構造体をTypeフィールドのパラメーターとして使用してバッファーを作成します。

このMSDNの記事を参照してください。

于 2012-08-03T08:51:04.230 に答える