从透视到正交矩阵的转变

Ian*_*ess 14 opengl 2d glsl orthographic

我有一个简单的三角形场景.我正在使用透视投影.我设置了我的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;
Run Code Online (Sandbox Code Playgroud)

一切正常,我可以改变相机的值,三角形仍然可以正常显示.

但我想使用正交投影.当我将投影矩阵更改为正交投影时,它无法预测,我无法显示三角形,或者我只是在屏幕的一角看到它的一小部分.要使用正交投影,我这样做:

glm::mat4 Projection = glm::ortho( 0.0f, 800.0f, 600.0f, 0.0f,-5.0f, 5.0f);
Run Code Online (Sandbox Code Playgroud)

虽然我不改变视图和模型矩阵中的任何内容.我只是不能正常工作.

我只需要朝着正确的方向努力,我做错了什么?我缺少什么,我该怎么做才能正确设置正投影?

PS我不知道是否需要它,但这些是三角形的坐标:

static const GLfloat g_triangle[] = {
    -1.0f, 0.0f, 0.0f, 
    1.0f, 0.0f, 0.0f,
    0.0f, 2.0f, 0.0f, 
};
Run Code Online (Sandbox Code Playgroud)

Nic*_*ler 15

你的三角形大约1个单位.如果使用800/600单位宽的正投影矩阵,三角形看起来非常小是很自然的.只需减小正交矩阵的边界,并确保三角形位于此区域内(例如,第一个顶点位于视图之外,因为其x坐标小于0).

此外,请确保您的三角形不会被背面剔除或z剪裁擦除.顺便说一句zNear的负值有点不寻常但应该适用于正交投影.