gpt4 book ai didi

c++ - 实现离轴投影

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:19:13 25 4
gpt4 key购买 nike

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

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

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

enter image description here

以上两者有什么区别?

离轴投影在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 点 作为中心时屏幕的?

最佳答案

I am not sure why off-axis projection is the appropriate method to achieve the above effect.

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

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

关于c++ - 实现离轴投影,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16416552/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com