2011-10-28 2 views
1

まず、XNAとGPUの仕組みと、XNA(またはDirectX)APIとの連携については初めてです。DrawUserPrimitives <VertexPositionTexture>は、頂点シェーダのColor0が不足していると文句を言います

私はSpriteBatchを使って描画するポリゴンを持っています。私はポリゴンを三角形分割し、頂点を保持する配列VertexPositionTextureを作成しています。私は頂点を設定する(だけ簡単にするために、ゼロにベクトルをオフセットテクスチャを設定)、およびプリミティブを描画しようとするが、私はこのエラーを取得する:ここで

The current vertex declaration does not include all the elements required by the current vertex shader. Color0 is missing.

は私のコードですが、私は、二重ました私のベクトルを三角測量からチェックしたところ、彼らは大丈夫です:

 VertexPositionTexture[] vertices = new VertexPositionTexture[triangulationResult.Count * 3]; 
     int ctr = 0; 
     foreach (var item in triangulationResult) 
     { 
      foreach (var point in item.Vertices) 
      { 
       vertices[ctr++] = new VertexPositionTexture(new Vector3(point.X, point.Y, 0), Vector2.Zero); 
      } 
     } 

     sb.GraphicsDevice.DrawUserPrimitives<VertexPositionTexture>(PrimitiveType.TriangleList, vertices, 0, triangulationResult.Count); 

私はおそらくここで間違っていますか?

答えて

1

使用BasicEffectあなたが描画されている場合はポリゴン(MSDN tutorial)。スプライト描画にはSpriteBatchを使用してください(例:Drawメソッドを使用)。

BasicEffectが必要とする頂点要素の種類は、適用する設定によって異なります。

色成分を含まない頂点要素タイプ(VertexPositionTextureなど)を使用するには、BasicEffect.VertexColorEnabledをfalseに設定します。

または、VertexPositionColorTextureなどの色を供給する頂点要素タイプを使用します。

SpriteBatchと同じ座標系を持つBasicEffectを作成する場合は、this answerまたはthis blog postを参照してください。

2

あなたのシェーダは、頂点ストリームのカラーを期待しています....だから、VertexPositionColorTextureを使用するか、シェーダを変更する必要があります。

シェイダーを使用していないようです。アクティブシェーダがスプライトバッチで使用されているシェーダであれば、それを正しく描画することはできません。

VertexPositionColorTexture[] vertices = new VertexPositionColorTexture[triangulationResult.Count * 3]; 
    int ctr = 0; 
    foreach (var item in triangulationResult) 
    { 
     foreach (var point in item.Vertices) 
     { 
      vertices[ctr++] = new VertexPositionColorTexture(new Vector3(point.X, point.Y, 0), Color.White, Vector2.Zero); 
     } 
    } 

    sb.GraphicsDevice.DrawUserPrimitives<VertexPositionColorTexture>(PrimitiveType.TriangleList, vertices, 0, triangulationResult.Count); 
関連する問題