2012-06-07 92 views
0

我在使用Short2作爲我的頂點數據中的(x,y)位置時遇到了問題。這是我的頂點結構:可以在WP7上使用Short2作爲頂點位置嗎?

struct VertexPositionShort : IVertexType 
{ 
    private static VertexElement[] 
     vertexElements = new VertexElement[] 
     { 
      new VertexElement(0, VertexElementFormat.Short2, VertexElementUsage.Position, 0), 
     }; 
    private static VertexDeclaration 
     vertexDeclaration = new VertexDeclaration(vertexElements); 

    public Short2 
     Position; 


    public static VertexDeclaration Declaration 
    { 
     get { return new VertexDeclaration(vertexElements); } 
    } 

    VertexDeclaration IVertexType.VertexDeclaration 
    { 
     get { return new VertexDeclaration(vertexElements); } 
    } 
} 

使用WP7模擬器,沒有什麼如果我用這個結構繪製的 - 沒有文物,沒有!但是,如果我使用一個結構相同的Short2結構被Vector2替換,那麼它完全可以正常工作。

我發現這是一個模擬器特定問題的引用:「在Windows Phone模擬器中,SkinnedEffect骨骼索引通道必須指定爲整數頂點元素格式之一 - Byte4,Short2或Short4 。這種相同的整數數據格式不能用於其他着色器輸入通道,如仿真器上的顏色,位置和紋理座標。「 (http://www.softpedia.com/progChangelog/Windows-Phone-Developer-Tools-Changelog-154611.html)但是,這是從2010年7月,我會認爲這個限制已經被修復了...?不幸的是我沒有一個設備去測試。

任何人都可以證實,這仍然是一個問題在模擬器或指向我的另一個原因,爲什麼這是行不通的?

+0

我剛剛在一臺真正的WP7設備(HTC 7 Mozart)上測試過這個功能,令我驚訝的是,我得到了和模擬器相同的結果!用Short2位置繪製的所有東西都不會呈現......想法? – Bob

回答

0

由Shawn Hargreaves先生解決:「你可以在頂點數據中使用Short2,但是這是一個整數類型,所以你的頂點着色器必須被寫入接受整數而不是浮點輸入,BasicEffect需要浮點數,所以Short2不會使用它,NormalizedShort2可能是更好的選擇?「

http://blogs.msdn.com/b/shawnhar/archive/2010/11/19/compressed-vertex-data.aspx

我可以證實,NormalizedShort2是實際可行的位置數據,同時在WP7模擬器和真實設備。

謝謝,肖恩!

相關問題