2013-10-17 36 views
-2

我想在我的窗口中的一个视口显示一个茶壶的正投影。glOrtho()不工作,因为我认为它会

mat4 view = translate (identity_mat4(), vec3 (0.0, 0.0, -40.0)); 
mat4 persp_proj = perspective(50.0, (float)width/(float)height, 0.1, 100.0); 
mat4 model = rotate_x_deg (identity_mat4(), 40); 
glViewport (0, 0, width/2, height/2); 
glOrtho(0,400,0,300,0,1); 
    glUniformMatrix4fv (proj_mat_location, 1, GL_FALSE, persp_proj.m); 
glUniformMatrix4fv (view_mat_location, 1, GL_FALSE, view.m); 
glUniformMatrix4fv (matrix_location, 1, GL_FALSE, model.m); 
glDrawArrays (GL_TRIANGLES, 0, teapot_vertex_count); 

这是我想用glOrtho绘制茶壶的正投影视图代码中的一部分。首先,我是否正确使用glOrtho?我想我是,但我没有得到我跳到的东西,所以我很怀疑我。

为什么我没有工作,以及如何去修复它?

如果我应该把glOrtho放在一个特定的地方,知道它在哪里会有帮助。

此外,因为我应该有几个视口所有的视口之后会有一个正交投影?

Here's我的整个程序 一小段代码片段是从线192-204

+0

您似乎在着色器和固定功能管线之间混淆起来。使用glOrtho和glUniformMatrix4fv是没有意义的。使用透视投影和正射投影也是没有意义的,你需要一个或另一个。 –

+0

当然不是。 'glOrtho(...)'将“当前”矩阵乘以一个正交投影矩阵。由于你使用着色器和自己的矩阵制服,所以“当前”矩阵的概念是没有意义的。更不用说在GL3核心环境中,没有矩阵堆栈,所以'glOrtho(...)'是一个无效函数。 –

+0

-1,*完整*代码在*问题中,而不是在pastebin中。 – genpfault

回答

2

采取我没有你的程序的全面了解,但鉴于我所看到的,我怀疑glOrtho会在所有的工作。它是一个(不推荐)函数,用于将固定函数流水线中的当前矩阵乘以正交投影矩阵。但是,您的程序似乎使用着色器并构建自己的矩阵(作为现代OpenGL程序应该)。因此,如果您目前没有使用glOrtho,那么您真正需要做的就是将mat4 persp_proj替换为mat4 ortho_proj,其中包含所需的正投影。

+1

没有足够的代表来回答你的答案,但是非常感谢你 – mcdowesj

相关问题