Создание двумерного массива вершин на C# для использования с XNA

В настоящее время нам предлагается нарисовать куб, используя следующую грубую структуру для хранения вершин:

VertexPositionTexture[] vert;
vert = new VertexPositionTexture[24];

Однако я подумал, что было бы лучше организовать и облегчить манипуляции, если бы я разбил вершины на двумерный массив следующим образом:

public class Square
{
    public VertexPositionTexture[] vert
}

Square[] cubeSide;
cubeSide = new Square[6];

однако я могу создать экземпляр cubeSide, но не вершин внутри каждого квадрата.

Я попытался создать конструктор внутри класса Square, но понял, что у меня есть вариант new Square[] или new Square(), но не оба. У меня может быть один квадрат с четырьмя вершинами или квадраты размера с одной вершиной.

Я пробовал VertextPositionTexture[] vert = new VertexPositionTexture[4] в классе Square, но это тоже не работает.

Чтобы добавить к моему замешательству, в прошлый раз, когда нас учили XNA, учителя вдолбили нам, что массивы должны быть объявлены в начале с точным количеством элементов, которые мы хотели. То есть у вас не может быть VertextPositionTexture[] vert, а должно быть VertextPositionTexture[4] vert. Они также были совершенно непреклонны в том, что однажды установленный массив никогда не сможет изменить свою емкость.

Как мне использовать двухмерный массив вершин, в котором я собираю 24 вершины в группы по 4, чтобы представлять грани в кубе?

Нас просят хранить каждую грань отдельно, т.е. наличие 24 вершин является установленным требованием.


person Gnemlock    schedule 16.08.2015    source источник


Ответы (1)


VertexPositionTexture[4] Vertices; не является допустимым кодом C#. Использование VertexPositionTexture Vertices = new VertexPositionTexture[4]; в вашем классе Square будет работать, но при этом создается только массив ссылок, а не объект для каждого элемента. Ниже показано, как вы начнете строить свои вершины.

public class Square
{
    public VertexPositionTexture[] Vertices;

    public Square()
    {
        Vertices = new VertexPositionTexture[4];
    }
}
Square side = new Square[6];
for (int i = 0; i < 6; i++)
{
    side[i] = new Square();
}

side[0].Vertices[0] = new VertexPositionTexture(Vector3, Vector2);
....

Теперь вы можете определить каждую из ваших вершин, содержащихся в отдельных объектах Square.

person Jason Norris    schedule 17.08.2015
comment
Все еще не работает. Я, вероятно, должен был быть более ясным, но, не имея возможности создать экземпляр, я имею в виду, что когда я делаю то, что вы предлагаете, сторона [¡] возвращает нулевую ссылку. - person Gnemlock; 18.08.2015
comment
Цикл for создает экземпляр Square для каждого элемента и определенно не должен впоследствии возвращать null. - person Jason Norris; 18.08.2015
comment
Могу, но это займет несколько дней. Жесткий диск умер - person Gnemlock; 18.08.2015
comment
Переписывая с нуля, похоже, это решило мою проблему. Я предполагаю, что мой синтаксис в исходной версии был неправильным - person Gnemlock; 26.08.2015