Я работаю над проектом единства, в котором я должен вычислить экранные координаты точки мира «вручную». (Поэтому я не могу использовать Camera.WorldToScreen()
и т. Д.)матрицы преобразования строк и столбцов
На данный момент я смущен и даже не знаю, что делать, чтобы разъяснить это.
Я начал с this учебником и построен методом, который создает матрицу преобразования камеры, как этого
right_x, right_y, right_z, 0;
up_x, up_y, up_z, 0;
forward_x, forward_y, forward_z, 0;
0, 0, 0, 1;
Это не работало, пока я не использовал отрицаются вперед-вектор.
right_x, right_y, right_z, 0;
up_x, up_y, up_z, 0;
-forward_x, -forward_y, -forward_z, 0;
0, 0, 0, 1;
После этого изменения все было в порядке.
Позже я использовал this tutorial для всех недостающих шагов. Автор создает другую матрицу:
left_x, up_x, forward_x, 0;
left_y, up_y, forward_y, 0;
left_z, up_z, forward_z, 0;
0, 0, 0, 1;
Все остальные уроки, которые я нашел, пытаясь понять это также использовать этот вид матрицы. Они вставляют векторы в виде столбцов вместо строк. Хотя оба учебника предназначены для openGL, для меня работает только один из них.
Может кто-нибудь объяснить мне разницу? Почему это так? И может кто-нибудь объяснить, почему я должен инвертировать мой вектор вперед?
Я предполагаю, что оба вопроса связаны с тем, как openGL использует правша, а Unity использует левую систему координат. Но в этом случае я не понимаю, почему существуют два разных учебника OpenGL?
Я проигнорировал перевод, потому что сначала вычитал положение своей камеры из своей точки мира.Спасибо за ваш ответ – user2699453
Я до сих пор не понимаю, почему это работает только с '- forward'. Не могли бы вы объяснить это? – user2699453
Если для этого требуется '-forward' или' + forward', это зависит от того, как вы настроите матрицу проекции. Классические проекционные матрицы в GL (например, созданные теперь отмененными функциями glOrtho или 'glFrustum' /' gluPerspective' будут определять '-z_eye' как направление просмотра (но это всего лишь соглашение), так что ваши матрица представления должна преобразовать сцену таким образом, чтобы ваше «форвардное» направление в мировом пространстве трансформировалось в '-z_eye' (или, иначе говоря,' -forward' должно быть преобразовано в 'z_eye') – derhass