3D Scene Panning in perspective projection (OpenGL)

拥有回忆 提交于 2019-11-28 19:43:37

I don't know about the OpenGL specifics, but if I understand your question correctly I can help out with the mathematics:

I assume you have already selected the object, by clicking the object and thus "sending" a ray through your scene that hits your object in the anchorpoint p.

To understand the following:

Now you drag your mouse along vector t. Using the intercept theorem you can easily calculate the vector s by which p has to be translated to "keep it under the cursor":

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

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

s is parallel to t, so it is t normalized multiplicated by |s|:

s = t / |t| * |s|

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

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

If you are panning, you are doing the exact same thing, just that you are not shifting p by s, but you have to translate your whole scene by -s.

It is impossible to have the finishing point under your mouse. Panning in perspective mode can be done in two ways. One is translating camera and the other is rotating camera. Translating camera will result in object rotation for user view. Rotation camera for panning has two constraints. one is not to change camera position and the other is to stop rotation with respect to camera direction. i.e., the axis of rotation should be parallel to the plane formed by camera right and up vectors.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!