opengl中相机的坐标是多少?

时间:2016-04-13 13:25:06

标签: opengl

我想确定opengl中相机的坐标是什么。 所以我只是在窗口中绘制一个球体,代码是这样的:

glutSolidSphere (1.0, 20, 16); //draw a sphere, its radius is 1

//I use glOrtho to set the x,y coordinate

//1
glOrtho(-1,1,-1,1,-0.99,-1.0);

//2
glOrtho(-1,1,-1,1,-1.0,-0.99);
//3
glOrtho(-1,1,-1,1,1.0,0.99);

//5
glOrtho(-1,1,-1,1,1.0,1.0);
//6
glOrtho(-1,1,-1,1,10,10);
//7
glOrtho(-1,1,-1,1,0.0,0.0);

//8
glOrtho(-1,1,-1,1,-0.5,0.5);

//9
//glOrtho(-1,1,-1,1,0.0,0.1);

在案例1,2,3,4中,图片如下: a small circle

在案例5,6,7中,球体大小相同 窗户。

在案例8中,图片如下: like a torus,strange

根据glOrtho描述:

void glOrtho(   GLdouble    left,
    GLdouble    right,
    GLdouble    bottom,
    GLdouble    top,
    GLdouble    nearVal,
    GLdouble    farVal);

假设摄像机的坐标固定在opengl中。 从案例1开始,似乎相机处于(0,0,0);

1)但如果那时,案例2,3,4如何与案例1相同?

2)案例5,6,7如何出来?

3)案例8如何出来?

1 个答案:

答案 0 :(得分:3)

你好像混淆了几件事。

从概念上讲,默认的glOrthoglFrustum()/gluPerspecitve()函数假定相机处于眼睛空间原点并且看向负z方向。如果您已将ModelView矩阵保留为idendity(默认值),则表示您的对象空间与眼睛空间相同,因此您直接在眼睛空间中绘图。

OpenGL定义了一个三维观看量。这意味着您的视口/窗口大小不仅限制了2D矩形,而且还有芦荟近和远剪裁平面。该查看体积在_normalized设备坐标中被描述为轴对齐的立方体-1 <= x,y,z <= 1

投影矩阵的目的是转换一些 查看该规范化多维数据集的卷。使用正交投影,将没有透视效果。远处的物体看起来不会变小。因此,您可以将ortho矩阵解释为在眼睛空间中定义轴对齐的长方体,这定义了屏幕上可见的空间部分。请注意,您可以设置该投影,以便可以看到实际位于“相机”背后的内容(使用nearfar的相关值。)

您的案例1-4看起来完全相同,因为您只删除了一小部分z in [0.99, 1]z in [-1, -0.99]。与球体的交点将仅显示为光盘。如果你翻转范围并不重要,因为它只会翻转前面或后面的内容。没有灯光,你基本上只看到了silhuette,所以你看不出差异。

您的案例5,6和7只是无效,参数nearfar必须不相同。该代码将只生成GL错误并且根本不创建正交矩阵,这意味着投影矩阵保留为标识 - 然后,您可以获得[-1,1] ^ 3查看量。由于您绘制的半径为1的球体位于原点的中心,因此它将完全适合。

案例8只是-0.5 <= z <= 0.5内的一个切口,即交叉点。