Переход от перспективы к орфографической матрице - PullRequest
14 голосов
/ 06 марта 2012

У меня есть сцена с одним простым треугольником. И я использую перспективную проекцию. Моя матрица MVP настроена (с помощью GLM) следующим образом:

glm::mat4 Projection = glm::perspective(45.0f, 4.0f / 3.0f, 0.1f, 100.0f);
glm::mat4 View       = glm::lookAt(
    glm::vec3(0,0,5), // Camera is at (0,0,5), in World Space
    glm::vec3(0,0,0), // and looks at the origin
    glm::vec3(0,1,0)  // Head is up (set to 0,-1,0 to look upside-down)
);  
glm::mat4 Model      = glm::mat4(1.0f);
glm::mat4 MVP        = Projection * View * Model;

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

Но я хочу использовать ортографическую проекцию. И когда я изменяю матрицу проекции на орфографическую, она работает непредсказуемо, я не могу отобразить треугольник или просто вижу небольшую его часть в углу экрана. Чтобы использовать ортографическую проекцию, я делаю это:

glm::mat4 Projection = glm::ortho( 0.0f, 800.0f, 600.0f, 0.0f,-5.0f, 5.0f);

пока я ничего не меняю в матрицах просмотра и модели. И я просто не работаю должным образом.

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

PS Я не знаю, нужно ли это, но это координаты треугольника:

static const GLfloat g_triangle[] = {
    -1.0f, 0.0f, 0.0f, 
    1.0f, 0.0f, 0.0f,
    0.0f, 2.0f, 0.0f, 
};

1 Ответ

15 голосов
/ 06 марта 2012

Ваш треугольник составляет около 1 единицы.Если вы используете матрицу ортографической проекции шириной 800/600 единиц, естественно, что ваш треугольник выглядит очень маленьким.Просто уменьшите границы ортогональной матрицы и убедитесь, что треугольник находится внутри этой области (например, первая вершина находится за пределами вида, поскольку ее x-координата меньше 0).

Кроме того, убедитесь, чточто ваш треугольник не стирается при отбраковке задней поверхности или z-отсечении.Кстати ... отрицательные значения для zNear немного необычны, но должны работать для ортографических проекций.

...