2

我正在开发一个类似 DCC 的工具,它具有 3D 视口,您可以使用鼠标四处移动,类似于 Maya、Blender 等。

我需要一些数学方面的帮助。

我试图确定两点。第一个是基于目标距离的小车速度。在小尺度上(例如,dist=10^-3),它​​移动得太快,而在大尺度上(例如,dist=10^6),它移动得太慢。我想要一个平坦的“相机速度”输入,可以整体缩放效果,但在所有比例下,相机都应该感觉相同。如果我在 0.1 或 1000 个单位之外,这无关紧要,对于给定的鼠标增量,我应该感觉我正在以相同的速度接近目标。

另一个是相机平移,同样基于相机距离。实际上,我希望相机目标沿着与相机对齐并distance_to_target远离单位的平面完美地跟踪鼠标光标。我不确定透视失真是否会影响这一点?

输入是:

// Distance in world units to camera's centre of interest
real distance_to_target

// Number of pixels mouse has moved horizontally since last frame
int mouse_delta_x

// Number of pixels mouse has moved vertically since last frame
int mouse_delta_y

// The vector of the mouse delta, normalized into -1 to 1 space based on
// viewport dimensions where a value of (-1,-1) or (1,1) means the cursor
// moved from one corner of the viewport to the other, or further, since
// the last frame.
vec2 mouse_delta_vector

// Scale the dolly speed
real dolly_speed

通常我会凭经验做这样的事情,尝试不同的值,直到找到我喜欢的东西,但为此我认为是时候尝试理论了。

4

1 回答 1

4

对于问题 1,只需使用比例速度缩放。

    currSpeed = currDistToTarget * refSpeed / refDistToTarget

其中 refSpeed 和 refDistToTarget 是您认为通过实验可以接受的值。

至于问题2,这个想法是一样的——也就是说,你计算一个距离加权的角度。如果您的 FOV 从未改变,您可以尝试上述相同的线性速度缩放。这里主要是为 refDistanceToTarget 和 refSpeed 找到正确的值。

于 2012-07-03T16:57:23.380 回答