Всегда ли вид с камеры установлен на (0,0,0) и смотрит в положительном направлении z?
Пространство вида - это пространство, которое определяет вид наscene.
Какая часть является «видимой» (является проекцией на область просмотра), зависит от матрицы проекции. В общем (в OpenGL) исходная точка (0,0,0) и ось пространства z указывает за пределы области просмотра. Но матрица проекции инвертирует ось * z. Он превращается из системы для правой руки области обзора в систему для левой руки в нормированном пространстве устройства.
в обратном направлении для преобразования вида камеры вмировоззрение
Да.
Матрица представления преобразуется из мирового пространства в пространство просмотра. Матрица проекции преобразует декартовы координаты пространства просмотра в однородные координаты пространства отсечения. Координаты пространства клипа преобразуются в нормализованное пространство устройства путем деления компонентов xyz на w компонента (Перспективное деление ).
Нормализованное пространство устройствакуб с минимумом (-1, -1, -1) и максимумом (1, 1, 1). Таким образом, 8 угловых точек куба являются углом объема представления в нормализованном пространстве устройства.
(-1, -1, -1) ( 1, -1, -1) ( 1, 1, -1) (-1, 1, -1) // near plane
(-1, -1, 1) ( 1, -1, 1) ( 1, 1, 1) (-1, 1, 1) // far plane
Если вы хотите преобразовать точку из нормализованного пространства устройства для просмотра пространства, то вам необходимо:
- преобразование с помощью матрицы обратной проекции
- преобразование с помощью матрицы обратного просмотра
- делит компонент xyz результата на его ш компонент
glm::mat4 view; // view matrix
glm::mat4 projetion; // projection matrix
glm::vec3 p_ndc; // a point in normalized device space
glm::mat4 inv_projetion = glm::inverse( projetion );
glm::mat4 inv_view = glm::inverse( view );
glm::vec4 pth = inv_view * inv_projetion * glm::vec4( p_ndc, 1.0f );
glm::vec3 pt_world = glm::vec3( pth ) / pth.w;