2012-05-11 86 views
1

我正在开发OpenGL中的4分割查看器。一个视图是透视图,其他视图是正交投影(前,左,上)。在glOrtho()视图中绘制立方体?

我写了一个从(-1,-1,-1)到(1,1,1)绘制一个立方体的方法,它在透视视图中工作良好,但是我无法让它工作我的观点使用glOrtho(...)。

现在我把它像这样:

glOrtho(0, width, height, 0, 0, 1); 

有趣的是,该视图不显示立方体的。我在OpenGL中为视图实现了一个边框,但它能够正确显示。

我正在使用Qt并编写了QGLWidget的派生类。

+0

假设你的视口也是按高度宽度的,而宽度和高度是你的屏幕坐标(比如说800x600),它会使你的立方体在正视图中宽2像素,否?你的近和远裁剪平面都是0和1,这可能根据眼睛的位置将立方体剪掉。 – vmpstr

+0

有道理。 ;)那么你会使用glScale使其仅适用于拼写视图,还是有更聪明的方法呢? – fuji

+0

@ j.dog:您通常会选择为投影空间体积设置的限制以匹配您的物体的限制。对于将是glOrtho(-aspect,aspect,-1,1,-1,1)的立方体,其中aspect = viewport_width/viewport_height – datenwolf

回答

1

glOrthomodel transformview transform之后的视图空间中定义了6个剪切平面。所以你应该在Eye Space中指定glOrtho的参数,而不是Screen Space。在你的情况下,它应该是glOrtho(-width/(float)height, width/height, -1.0f, 1.0f, -1.0f, 1.0f),它假定eye position(0.0, 0.0, 0.0)和你的viewportwidthheight。如果近平面位于观看者的后面(眼睛位置),则NearVal参数glOrtho应该为负数。你可能想要男人glOrtho4th ChapterCg tuturial可以给你关于不同坐标空间的变换的详细信息,即Object Space,World Space,Eye Space,Clip space,Normalized Device SpaceWindow Space

+0

那么如何将眼睛位置改为100,120? – paulm

+0

@paulm眼睛的位置是相对于模型的位置,你可以改变模型的位置,以调整到眼睛。 – toolchainX