Открытые 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
}