Short2 可以在 WP7 上用于顶点位置吗?

本文关键字:顶点 位置 用于 WP7 Short2 | 更新日期: 2023-09-27 18:36:42

我在顶点数据中使用 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 月开始的,我认为这个限制现在已经修复了......? 不幸的是,我没有设备可以测试。

任何人都可以确认这仍然是模拟器中的一个问题,或者指出我无法正常工作的另一个原因?

Short2 可以在 WP7 上用于顶点位置吗?

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

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

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

谢谢,肖恩!