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

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

4

1 回答 1

0

由 Shawn Hargreaves 先生解决:“您可以在顶点数据中使用 Short2,但这是一个整数类型,因此您的顶点着色器必须编写为接受整数而不是浮点输入。BasicEffect 采用浮点数,因此 Short2 无法使用它。 NormalizedShort2 可能是更好的选择?”

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

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

谢谢,肖恩!

于 2012-06-22T13:00:33.263 回答