1

これは、いくつかの c# ドキュメントと構文を Visual Basic のものに変換することの問題です。私は Visual Basic で書いており、4.0 XNA リフレッシュ プラットフォームを使用しています。

私はRiemers.netで ac# チュートリアルに従っていますが、頂点、位置、色、および法線を処理するために彼の構造を再現するのに苦労しました。ビルド済みの VertexPositionColor & .VertexDeclaration を使用して、プログラムを正常に実行できました。

この問題の C# コードは次のとおりです。

 public struct VertexPositionColorNormal
 {            
     public Vector3 Position;
     public Color Color;
     public Vector3 Normal;

     public readonly static VertexDeclaration VertexDeclaration = new VertexDeclaration
     (
         new VertexElement(0, VertexElementFormat.Vector3, VertexElementUsage.Position, 0),
         new VertexElement(sizeof(float) * 3, VertexElementFormat.Color, VertexElementUsage.Color, 0),
         new VertexElement(sizeof(float) * 3 + 4, VertexElementFormat.Vector3, VertexElementUsage.Normal, 0)
     );
 }

そして、これは変換での私の試みです

Public Structure VertexPositionColorNormal

Public Position As Vector3
Public Color As Color
Public Normal As Vector3

Public Shared SizeInBytes As Integer = 7 * 4

Public Shared ReadOnly VertexDeclaration As VertexElement() = New VertexElement() _
{New VertexElement(0, VertexElementFormat.Vector3, VertexElementUsage.Position, 0), _
New VertexElement(4 * 3, VertexElementFormat.Color, VertexElementUsage.Color, 0), _
New VertexElement(4 * 4, VertexElementFormat.Vector3, VertexElementUsage.Normal,                 0)}

End Structure

私の試みは構文的に正しいように見えますが、次の行でエラーが発生します。

GraphicsDevice.DrawUserIndexedPrimitives(PrimitiveType.TriangleList, vertices, 0, vertices.Length, indices, 0, indices.Length / 3, VertexPositionColorNormal.VertexDeclaration)

そして、エラーの次の説明が表示されます。

エラー 18
アクセス可能な 'DrawUserIndexedPrimitives' を次の引数で呼び出すことができないため、オーバーロードの解決に失敗しました:

'Public Sub DrawUserIndexedPrimitives(Of VertexPositionColorNormal)(primitiveType As Microsoft.Xna.Framework.Graphics.PrimitiveType、vertexData() As VertexPositionColorNormal、vertexOffset As Integer、numVertices As Integer、indexData() As Short、indexOffset As Integer、primitiveCount As Integer、vertexDeclaration As Microsoft.Xna.Framework.Graphics.VertexDeclaration)': 'Integer' は 'Short' から派生していないため、型 'Integer の 1 次元配列' の値を 'Short の 1 次元配列' に変換できません。

'Public Sub DrawUserIndexedPrimitives(Of VertexPositionColorNormal)(primitiveType As Microsoft.Xna.Framework.Graphics.PrimitiveType、vertexData() As VertexPositionColorNormal、vertexOffset As Integer、numVertices As Integer、indexData() As Short、indexOffset As Integer、primitiveCount As Integer、vertexDeclaration As Microsoft.Xna.Framework.Graphics.VertexDeclaration)':タイプ 'Microsoft.Xna.Framework.Graphics.VertexElement の 1 次元配列' の値を 'Microsoft.Xna.Framework.Graphics.VertexDeclaration' に変換できません。

'Public Sub DrawUserIndexedPrimitives(Of VertexPositionColorNormal)(primitiveType As Microsoft.Xna.Framework.Graphics.PrimitiveType、vertexData() As VertexPositionColorNormal、vertexOffset As Integer、numVertices As Integer、indexData() As Integer、indexOffset As Integer、primitiveCount As Integer、vertexDeclaration As Microsoft.Xna.Framework.Graphics.VertexDeclaration)':タイプ 'Microsoft.Xna.Framework.Graphics.VertexElement の 1 次元配列' の値を 'Microsoft.Xna.Framework.Graphics.VertexDeclaration' に変換できません。

C:\Users\Xheis-Overlord\Documents\Visual Studio 2010\Projects\Test_Terrains2\Test_Terrains2\Test_Terrains2\Game1.vb 416 13 Test_Terrains2

4

2 に答える 2

1

私はVBに精通していませんが、エラーメッセージに基づいて、この行に部分的に問題があると思います:

Public Shared ReadOnly VertexDeclaration As VertexElement() = New VertexElement() _

含めた C# では、VertexDeclarationオブジェクトの型は実際にはVertexDeclaration. ただし、VB では、それを型VertexElement配列として扱っています。

また、何indicesですか?

参照用のDrawUserIndexPrimitivesに関する MSDN 記事へのリンクを次に示します。このメソッドには 4 つのオーバーロードがあり、どれも非常によく似ています。引数の型を再確認してください。

于 2012-10-05T13:50:48.413 に答える
0

元は配列ではありませんが、変換では配列です。これを試して:

 Public Structure VertexPositionColorNormal
     Public Position As Vector3
     Public Color As Color
     Public Normal As Vector3

     Public ReadOnly Shared VertexDeclaration As New VertexDeclaration( _
        New VertexElement(0, VertexElementFormat.Vector3, VertexElementUsage.Position, 0), _
        New VertexElement(Len(New Single) * 3, VertexElementFormat.Color, VertexElementUsage.Color, 0), _
        New VertexElement(Len(New Single) * 3 + 4, VertexElementFormat.Vector3, VertexElementUsage.Normal, 0))
 End Structure
于 2012-10-05T14:56:42.443 に答える