可以在WP7上使用Short2作为顶点位置吗?

时间:2012-06-07 23:48:37

标签: c# windows-phone-7 xna-4.0

我在使用Short2来处理顶点数据中的(x,y)位置时遇到了麻烦。这是我的顶点结构:

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月开始,我已经假定这个限制已经修复了......?不幸的是,我没有可以测试的设备。

任何人都可以确认这仍然是模拟器中的一个问题或指出我为什么不能正常工作的另一个原因?

1 个答案:

答案 0 :(得分:0)

由Shawn Hargreaves先生解决:“你可以在顶点数据中使用Short2,但这是一个整数类型,所以你的顶点着色器必须写成接受整数而不是浮点输入.BasicEffect需要浮点数,所以Short2不起作用有了它,NormalizedShort2可能是更好的选择吗?“

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

我可以确认NormalizedShort2确实适用于WP7仿真器和实际设备上的位置数据。

谢谢,肖恩!