Реализация оси вращения дуги без проекционной матрицы?

У меня есть вопрос о реализации arcball в opengl с помощью Android Studio.

После вычисления оси вращения я должен перевернуть ось через конвейер рендеринга обратно в пространство объекта, чтобы вращение можно было применить в пространстве объекта.

Эта часть будет написана так:

obj_rotateAxis = normalize(vec3(inverse(mat3(camera->projMatrix) * mat3(camera->viewMatrix) * mat3(teapot->worldMatrix)) * rotateAxis));

Однако я слышал, что правильная форма должна быть такой:

obj_rotateAxis = normalize(vec3(inverse(mat3(camera->viewMatrix) * mat3(teapot->worldMatrix)) * rotateAxis));

где projMatrix отбрасывается. Почему мы не учитываем матрицу проекции при реализации дугового шара, хотя преобразование проекции выполняется для объекта?


person migodaet    schedule 18.06.2017    source источник


Ответы (1)


Насколько мне известно, вы используете arcBall для вычисления угла поворота, который вы примените к своему объекту. Когда вы хотите повернуть объект, вы хотите, чтобы он вращался от начала координат мира (мировая матрица) или от точки обзора (матрица вида).

Матрица проекции не представляет фактическое местоположение вашего объекта. Чем дальше вы находитесь, тем меньше вы получите, вы не хотите, чтобы глубина влияла на ваше вращение.

Таким образом, вы вычисляете вращение от точки обзора или начала координат, а затем позволяете матрице проекции выполнять свою работу при рендеринге.

person Paltoquet    schedule 18.06.2017