, поэтому я довольно новый с 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
}