#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);