2015-01-29 3 views
0

В моем OpenGL я хочу использовать левую систему координат для пространства модели, но правой рукой для пространства вида. Это потому, что если я думаю, что меня, как начало системы координат:OpenGL использует левую систему координат в представлении модели

  • для меня это общее, что thigs, которые далеко и передо мной есть Позитив г koordinate так что я должен использовать левую руку система координат в виде модели
  • , если я иду назад, я могу поставить z -= 1 в setLookAtM метод, который создает мой вид матрицы и является общим, что, если я иду назад, я должен вычесть значение г, если я иду назад

Я использую эти функции от android.OpenGL.Matrix, чтобы создать мою матрицу зрения и проекции:

Matrix.setLookAtM(data, 0,  0, 0, 0,  0, 0, -1,  0, 1, 0); 
Matrix.perspectiveM(projection, 45, width/height, 1f, 50f); 

Что я могу сделать/что я должен изменить, чтобы получить результат вышеписанными выше, так что ось г для моделей точек в экран, но ось Z для точек камеры из экрана?

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

ответ

1

Вы можете использовать любую систему координат, которую хотите.

Если вам нужна система координат в левом русле, но правая система координат глаз, это означает, что вам нужно перевернуть ручность в преобразовании вида. Вы можете сделать это с зеркальным преобразованием как часть матрицы представления.

Единственное небольшое осложнение состоит в том, что setLookAtM() не поддерживает это. Матрица, которую он создает, представляет собой комбинацию вращения и перевода, которая поддерживает ручность. Вы можете комбинировать результат с зеркальным преобразованием. Но так как матрица представления настолько проста с параметрами, которые вы передаете, так же легко построить матрицу представлений.

В самом деле, ваш setLookAtM() вызов:

setLookAtM(data, 0,  0, 0, 0,  0, 0, -1,  0, 1, 0); 

строит матрицу. Поэтому, если вы хотите перевернуть координату z, используйте это зеркальное преобразование как матрицу вида, а не идентификационную матрицу, которую вы имеете прямо сейчас:

[ 1 0 0 0 ] 
[ 0 1 0 0 ] 
[ 0 0 -1 0 ] 
[ 0 0 0 1 ] 
+0

Благодарим вас за это объяснение. Но теперь, допустим, я назвал 'setLookAtM (данные, 0 a, b, c, d, e, f, 0, 1, 0)'. Могу ли я использовать одну и ту же матрицу зеркал сверху или каким образом я должен ее изменить? – Cilenco

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