我遇到了一些问题。
我需要类或结构来表示不同类型的顶点(TextureVertex
,ColorVertex
等)。我还需要一个超类 ( Vertex
),因为我需要能够VertexBuffer
为任何顶点类型制作。顶点必须是值类型,为什么我似乎需要一个结构。
这种冲突在 C# 中通常是如何解决的?
编辑:我需要值类型数据的原因是该方法(http://sharpdx.org/documentation/api/m-sharpdx-direct3d11-buffer-create--1-1)似乎需要这种方式。它调用非托管代码,顶点数据进入数据参数。
编辑2:抛出一些代码
public interface Vertex
{ }
[StructLayout(LayoutKind.Sequential)]
public struct TextureVertex : Vertex
{
private Vector3 _position;
public Vector3 Position { get { return _position; } set { _position = value; } }
private Vector2 _texture;
public Vector2 Texture { get { return _texture; } set { _texture = value; } }
private Vector3 _normal;
public Vector3 Normal { get { return _normal; } set { _normal = value; } }
public TextureVertex(float x, float y, float z, float u, float v)
{
_position = new Vector3(x, y, z);
_texture = new Vector2(u, v);
_normal = new Vector3();
}
}
...
TextureVertex[] vertices = new []
{
new TextureVertex(-1.0f, -1.0f, 0.0f, 0.0f, 1.0f),
new TextureVertex(-1.0f, +1.0f, 0.0f, 0.0f, 0.0f),
new TextureVertex(+1.0f, +1.0f, 0.0f, 1.0f, 0.0f),
new TextureVertex(+1.0f, -1.0f, 0.0f, 1.0f, 1.0f)
};
...
VertexBuffer = Buffer.Create<Vertex>(Graphics.Device, BindFlags.VertexBuffer, vertices);