1

我正在尝试获得离轴投影效果,其中屏幕的内容会根据用户的位置而变化。这类似于此视频中正在执行的操作:
http ://www.youtube.com/watch?feature=player_embedded&v=Jd3-eiid-Uw

我不确定为什么离轴投影是达到上述效果的合适方法。我似乎在这里想到了两种方法:1)使用 glFrustum,2)使用 lookAt()
在上面的应用程序中,“相机”基本上根据用户的位置移动。透视投影的( , , , , , )glFrustum坐标用于更改屏幕上的对象,因为它们会在用户移动时从不同的位置出现。leftrightbottomtopnearfar

同时,我发现这非常类似于使用用户的位置平移相机,然后gluLookAt(centerPosition)将相机设置lookAt为中心。但是我没有得到所需的效果,我想知道为什么会这样。

在此处输入图像描述

以上两者有什么区别?

离轴投影在OpenGL中是通过以下方式实现的:

glMatrixMode(GL_PROJECTION);  
    glLoadIdentity();            
    glFrustum(fNear*(-fFov * ratio + headX),  
              fNear*(fFov * ratio + headX),  
              fNear*(-fFov + headY),  
              fNear*(fFov + headY),  
              fNear, fFar);  
          
    glMatrixMode(GL_MODELVIEW);  
    glLoadIdentity();  
    gluLookAt(headX*headZ, headY*headZ, 0, headX*headZ, headY*headZ, -1, 0, 1, 0);
    glTranslatef(0.0,0.0,headZ);

上面的gluLookAt(...)有什么意义,而不是当我尝试使用相机并且只是将其lookAt point作为屏幕中心时?

4

1 回答 1

5

我不确定为什么离轴投影是达到上述效果的合适方法。

因为显示屏对应于截头体的近平面。当你四处移动你的头时,你会看离轴的屏幕。以这种方式,您必须通过对投影平截头体执行相同的操作来重现这一点。

但是,使用lookAt 会旋转场景,从而丢失近平面和屏幕平面之间的对应关系。

于 2013-05-07T10:56:18.820 回答