2014-02-12 4 views
1

Как определить, какие преобразования мне нужно, чтобы квадрат заполнил все окно в современных OpenGL. Скажем, например, у меня есть окно 800 x 600 и координаты с вершинами двух треугольников, простирающимися от -1 и 1. Без какого-либо преобразования, эти скоординированные заполнят окно 800 x 600, потому что координаты OpenGL простираются от -1 до 1 Что делать, если я хочу использовать стандартное преобразование MVP? Как определить, что нужно сделать, чтобы заполнить все окно. Рассмотрим этот код:Сделать квадратное заполнить полное окно

glm::mat4 projectionMatrix = glm::perspective(60.0f, 4.f/3.f, 0.1f, 100.0f); // gluPerspective equivalent for those who may not know about glm 
glm::mat4 viewMatrix = glm::translate(glm::mat4(1.0f), glm::vec3(0.0f, 0.0f, -5.0f));; 
glm::mat4 modelMatrix = glm::mat4(1.0f); 

с теми же координатами. Я бы теперь получил квадрат где-то посередине окна. Предполагая, что я не изменяю матрицу проекций, какие изменения необходимо внести в матрицы View и Model? Я понимаю матричную математику, но не так, как она относится к самим координатам окна.

Может ли кто-нибудь помочь мне понять это?

ответ

0

Для 2D-элементов (например, HUD) я обычно устанавливаю ортографическую матрицу с левым = 0, right = width, bottom = 0, top = height, где ширина и высота - это размер окна. znear = -1 и zfar = 1.

Тогда ваши прямоугольные вершины будут равны 0, 0, ширине и высоте.

Это то, что вы хотите? Я не уверен, почему вы хотите использовать перспективную матрицу для прямоугольника, заполняющего экран.

+0

Я никогда не мог заставить орто работать. Почему это не так: glm :: mat4 projectionMatrix = glm :: ortho (0.f, 800.f, 0.f, 600.f, -1.f, 1.f); glm :: mat4 viewMatrix = glm :: translate (glm :: mat4 (1.0f), glm :: vec3 (0.0f, 0.0f, 0.0f)) ;; glm :: mat4 modelMatrix = glm :: mat4 (1.0f) показать квадрат с координатами, описанными выше? Благодаря! – foobar5512