首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >透视投影中的三维场景平移(OpenGL)

透视投影中的三维场景平移(OpenGL)
EN

Stack Overflow用户
提问于 2012-08-23 18:12:23
回答 2查看 4K关注 0票数 12

我设计了一个C++类,它将用户从轨迹球旋转、缩放和摇摄中抽象出来。我得到了旋转(使用轨迹球)和缩放工作,如预期的。然而,摇摄的行为并不像预期的那样。当我选择一个点并拖动时,我希望在完成拖动时,选中的点继续在鼠标下面。我对透视投影中的平移的理解如下。目标和摄像机的位置,都会受到pan操作的影响。摄像机目标和摄像机位置(眼睛)应与拖动成比例转换。比例性(可能不是常数)应以z深度为基础。

平移在正射投影中是直接的,但在透视上却是一个问题。如果您能够解释、OpenGL的数学和实现细节,这将是非常有用的。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-08-23 19:38:33

我不知道OpenGL的具体内容,但如果我正确理解了您的问题,我可以帮助解决以下问题:

我假设您已经选择了该对象,单击该对象,从而“发送”一条光线通过您的场景,击中您的对象在锚点p。

了解以下各点:

现在你把鼠标拖动到向量t上。使用截距定理,你可以很容易地计算出向量s,根据这个向量,p必须被翻译成“保持在光标下面”:

P_x/_

=(\x{e76f}\x{e76f}\x{e76f}*

S与t平行,因此它不是归一化的,它被乘以:

S=t/x_x**_s_x

S=t/溶胶-t

S=t*(x,p,x,q,q,x,x,n,2,2,2,2,2,2,2,2,4,2,4,2,4,2,4,2,4,2,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,0)

如果你是在摇摄,你做的是完全一样的事情,只是你没有移动p一个s,但是你必须用-s翻译你的整个场景。

票数 10
EN

Stack Overflow用户

发布于 2014-11-19 06:51:03

在你的鼠标下面不可能有终点。透视模式下的摇摄可以通过两种方式完成。一种是平移相机,另一种是旋转相机。转换相机会导致用户视图的对象旋转。用于平移的旋转相机有两个限制。一种是不改变摄像机的位置,另一种是停止相对于摄像机方向的旋转。也就是说,旋转轴应该平行于由摄像机向右和向上矢量形成的平面。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12097693

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档