Открытые TK переводят или меняют координаты примитивов

Я кодирую игру Jump n' Run с боковой прокруткой в ​​C# с использованием Open TK Framework. Чтобы включить эффект боковой прокрутки, я бы добавил фиксированное значение ко всем координатам X моего Vector3, который является частью PrimitiveType.Quad. Все мои платформы, которые я строю из нескольких квадов, хранятся в связанном списке, так что я могу перебирать его.

У меня вопрос, должен ли я добавить фиксированный констат ко всем координатам, что потребовало бы повторения моего списка платформ

ИЛИ ЖЕ

Желательно ли обновить компонент X объекта, а затем перевести его с помощью GL.Translate(x, y, z)?

Какой метод лучше с точки зрения производительности? Должен ли я перевести камеру в сторону (что также потребует вызова функции перевода в фоновом режиме, если я обеспокоен)?

public void Move() {// is applied on a platform object

        posX -= 0.015; 

        A.X -= 0.015; // A-H are Vector3
        B.X -= 0.015;
        C.X -= 0.015;
        D.X -= 0.015;
        E.X -= 0.015;
        F.X -= 0.015;
        G.X -= 0.015;
        H.X -= 0.015;        
    }

this.gameObjects.drawObjects(); 
//method that iterates through linked list and draws platform objects

или лучше только обновить posX и использовать Translate(); метод:

GL.LoadIdentity();
GL.Translate(posX, 0.0f, -3.5f); 

1 ответ

Определенно идти с GL.Translate() вариант. Это причина, почему это так. Сохраняйте координаты рисования постоянными и обновляйте систему координат.

Если вы хотите производительность, то создайте список отображения с примитивами рисования, а затем для рендеринга используйте GL.Tanslate() а также GL.Rotate() и вызвать список с GL.CallList()

Редактировать 1

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

for (int i=0; i<objects.Count; i++)
{
    GL.PushMatrix();
    objects[i].Render();
    GL.PopMatrix();
}

public void Render()
{
    GL.Translate(Position);
    GL.Scale(Scale, Scale, Scale);

    ... draw primitives
}
Другие вопросы по тегам