2

在我的项目中,我有一个类似于以下的类:

public class Vertices
{
    float[] vertexData1;
    int   vertexData1Offset;

    float[] vertexData2;
    int   vertexData2Offset;

    float[] vertexData3;
    int   vertexData3Offset;

    float[] vertexBuffer;

    int vertexCount;
    int vertexStride;

    public void Update()
    {
        for(int i = 0; i < vertexCount; i++)
        {
            vertexBuffer[(i * vertexStride) + vertexData1Offset] = vertexData1[i];
            vertexBuffer[(i * vertexStride) + vertexData2Offset] = vertexData2[i];
            vertexBuffer[(i * vertexStride) + vertexData3Offset] = vertexData3[i];
        }
    }
}

也就是说,我有一个数组(vertexBuffer),这个数组是另一组数组(vertexData1...)的组合。只有数组组合的方式,每个“组件数组”的元素都均匀分布在“主数组”中,所有元素都混杂在一起,而不是每个数组按顺序连接。

我想知道是否有一种方法可以公开这些数组(例如,以某种方式继承数组)(vertexData1...),以便此类的使用者可以访问它们,就好像它们是具有连续元素的常规数组一样(包括相互复制),但在幕后,对象实际上会在整个vertexBuffer中分布这些元素,从而不再需要 Update() 方法和重复数据。

这在 C# 中可能吗?

4

2 回答 2

3

是的,您可以使用索引器。就像是:

public class Vertices
{
    float[] vertexData1;
    int   vertexData1Offset;

    float[] vertexData2;
    int   vertexData2Offset;

    float[] vertexData3;
    int   vertexData3Offset;

    private float[] GetArrayForIndex(int index) {
      switch (index / vertexStride) {
        case 0: return verdexData1;
        case 1: return vertedData2;
        case 2: return vertexData3;
        default: throw new IndexOutOfRangeException();
      }
    }

    public float vertexBuffer[int index] {
      get {
        return GetArrayForIndex(index)[index % vertexStride];
      }
      set {
        GetArrayForIndex(index)[index % vertexStride] = value;
      }
    }

    int vertexStride;

}

我不确定您要如何排列索引器中的数据。您可能想要交换 和 的使用,/具体%取决于您是否希望阵列彼此接连或交错。

于 2012-10-28T15:03:42.850 回答
0

您可以实现 indexer this[int index] 并在其中提供您自己的功能:

public class Vertices
{
  public float this[int index]
  {
    get
    {
      // do your stuff here
    }
    set
    {
      // do your stuff here
    }
  }
}
于 2012-10-28T15:08:14.157 回答