2013-11-08 3 views
1

, поэтому я довольно новый с opengl и создаю 3d фигуры. Поэтому для моего примера у меня два квадрата: один с высотой/шириной 2 с центром в координате начала координат (0,0, -10) и один, который находится в левой части окна. Я пытаюсь повернуть квадрат, лежащий в начале координат вдоль плоскости x-z, без поворота квадрата, который расположен в крайнем левом углу экрана. Мой подход к этому состоял в том, чтобы сохранить каждую координату xyz центрального квадрата в переменной и создать метод, который использует поведение cos (theta) для поворота квадрата вдоль плоскости x-z. Мой код работает, но я предполагаю, что это ужасный подход, так как должен быть создан еще более эффективный метод, который может выполнять те же функции. Я посмотрел на glRotatef(), но из того, что я понял, это только поворачивает мой просмотр камеры, который в конце будет вращать как средний квадрат, так и левый квадрат, тогда как я хочу только повернуть средний квадрат. Есть ли еще какой-нибудь другой метод, который может легко вращать одну 2D-форму в 3d-пространстве?Как повернуть одну фигуру в 3d пространстве в opengl?

В случае, если это применимо, я включил вращающийся код, который я сделал для среднего квадрата: (Кстати, синий класс - это всего лишь класс I, который имеет квадратные координаты и степень окружности для cos (theta))

if (Keyboard.isKeyDown(Keyboard.KEY_LEFT)) { 

      blue.setCircle(blue.getCircle()+1f);//getCircle is initially zero and gets incremented by 1 for everytime the program loops with the user holding the left button. 

      blue.setXfrontTR((float)Math.cos(Math.toRadians(blue.getCircle())));//Changing top-right x coordinate of the middle square 
      blue.setZfrontTR(-10f+ ((float)Math.cos(Math.toRadians(blue.getCircle()+270f)))); //Changing top-right z coordinate of the middle square. 

      blue.setXfrontTL((float)Math.cos(Math.toRadians(blue.getCircle()+180f))); 
      blue.setZfrontTL(-10f+ ((float)Math.cos(Math.toRadians(blue.getCircle()+90f))));//Changing top-left x,z coordinates 

      blue.setXfrontBL((float)Math.cos(Math.toRadians(blue.getCircle()+180f))); 
      blue.setZfrontBL(-10f+ ((float)Math.cos(Math.toRadians(blue.getCircle()+90f))));//Changing bottom-left x,z coordinates 

      blue.setXfrontBR((float)Math.cos(Math.toRadians(blue.getCircle()))); 
      blue.setZfrontBR(-10f+ ((float)Math.cos(Math.toRadians(blue.getCircle()+270f))));//Changing bottom-right x-z coordinates 
} 

ответ

0

Если вы даете каждому объекту, для которого требуется независимое перемещение, модельная матрица просмотра вы можете достичь этого. Другой вариант, чтобы быстро сделать/переместить несколько независимых объектов заключается в следующем:

для каждого объекта:

pushMatrix()

ничья объект

popMatrix()

в то время как в modelview matrix ...

Метод рисования в значительной степени зависит от версии OpenGL, для которой вы кодируете, но приведенное выше будет работать для упрощения рисунок. Я не специалист по программированию OpenGL/3D, поэтому, если вы немного подождете, вы можете услышать (см.) Лучшую мудрость, чем то, что я предлагаю :)

Смежные вопросы