Изменение поворота оси куба от центра к самому правому углу куба в opengl es

#opengl-es

#opengl-es

Вопрос:

Я сталкиваюсь с проблемами при вращении куба, мои требования — повернуть куб так, чтобы его новое положение начиналось с конца одной грани, я попытался повернуть куб с помощью команды opengl es glrotatef (90,0,1), здесь вращение происходит в центре куба, я хочу сдвинуть правый угол куба. Если мне не ясно, пожалуйста, дайте мне знать

Ответ №1:

rotatef вращается вокруг начала координат. Таким образом, вы можете либо настроить геометрию вашего куба таким образом, чтобы его координаты располагались с началом координат на грани, вокруг которой вы хотите повернуть, либо вы можете сделать это самостоятельно во время выполнения с помощью быстрого вызова translatef .

Итак, предполагая, что ваш куб равен 2 единицам в каждом направлении (т. Е. простирается на одну единицу от центра как положительно, так и отрицательно), тогда, вероятно, у вас есть что-то вроде:

 glRotatef(90, 0, 1, 0);
somehowDrawCube();
  

Вы бы поместили:

 glRotatef(90, 0, 1, 0);
glTranslatef(-1, 0, 0); // to align the right face onto the local origin
somehowDrawCube();
  

Комментарии:

1. Спасибо, что ответили на мой вопрос, еще один дополнительный вопрос, возможно ли изменить точку поворота примитивов в Android opengl es

2. Нет, все вращения выполняются вокруг центра. Обычная практика заключается в смещении объекта так, чтобы точка поворота, которую вы поворачиваете, была центром, выполните вращение, затем сместитесь назад, чтобы правильный центр был центром. Что из-за того, как вы применяете вещи в OpenGL, обычно означает glTranslatef(-vector to pivot); glRotatef(as required); glTranslatef(vector to pivot);