gpt4 book ai didi

c++ - 透视投影中的 3D 场景平移 (OpenGL)

转载 作者:可可西里 更新时间:2023-11-01 15:22:03 27 4
gpt4 key购买 nike

我设计了一个 C++ 类,将用户从轨迹球旋转、缩放和平移中抽象出来。我已经按预期进行了旋转(使用轨迹球)和缩放。但是,平移并不像预期的那样运行。当我选择一个点并拖动时,我希望在完成拖动时,选择的点继续位于鼠标下方。我对透视投影中的平移的理解如下。目标和相机位置都会受到平移操作的影响。相机目标和相机位置(眼睛)应与阻力成比例地平移。比例(可能不是常数)应基于 z 深度。

平移在正交投影中是直截了当的,但会带来透视问题。如果能够解释OpenGL 的数学和实现细节,将会很有用。

最佳答案

我不知道 OpenGL 的细节,但如果我正确理解你的问题,我可以帮助解决数学问题:

我假设您已经选择了该对象,方法是单击该对象,然后“发送”一条光线穿过您的场景,在 anchor p中击中您的对象。

理解以下内容:

Panning with perspective projection

现在您沿着 vector t 拖动鼠标。使用截距定理,您可以轻松计算 vector sp 必须通过该 vector 转换为“将其保持在光标下”:

|p|/|q| = |s|/|t|

|s| = ( |p|/|q| ) * |t|

s 与 t 平行,因此 t 归一化乘以 |s|:

s = t/|t| * |s|

s = t/|t| * ( |p|/|q| ) * |t|

s = t * ( |p|/|q| )

如果你在平移,你在做完全相同的事情,只是你没有将 p 移动 s,但你必须通过 - s

关于c++ - 透视投影中的 3D 场景平移 (OpenGL),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12097693/

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