2011-10-28 84 views
1

首先,我是XNA的新手,GPU的工作原理以及它如何與XNA(或DirectX)API協作。DrawUserPrimitives <VertexPositionTexture>對頂點着色器缺少Color0抱怨

我有一個多邊形繪製使用SpriteBatch。我正在對多邊形進行三角測量,並創建一個數組來保存頂點。我設置了頂點(和公正爲簡單起見,紋理偏移向量設置爲零),並嘗試繪製的圖元,但我得到這個錯誤:

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 answerthis blog post

2

您的着色器期望在頂點流中有一個Color ....所以您必須使用VertexPositionColorTexture或更改着色器。

看來你並沒有使用任何着色器。如果活動着色器是與spritebatch一起使用的着色器,則無法將其繪製正確。

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);