簡體   English   中英

透視投影中的3D場景平移(OpenGL)

[英]3D Scene Panning in perspective projection (OpenGL)

我設計了一個C ++類,用於從軌跡球旋轉,縮放和平移中抽象出用戶。 我有旋轉(使用軌跡球)和縮放按預期工作。 但是,平移不會像預期的那樣運行。 當我選擇一個點並拖動時,我希望在完成拖動時,拾取的點繼續在鼠標下方。 我對透視投影中的平移的理解如下。 目標和攝像機位置都將受到平移操作的影響。 攝像機目標和攝像機位置(眼睛)應與阻力成比例平移。 比例(可能不是常數)應該基於z深度。

在正交投影中平移是直接的,但是在視角方面存在問題。 如果可以解釋OpenGL的數學和實現細節,將會很有用。

我不知道OpenGL的細節,但如果我理解你的問題,我可以幫助解決數學問題:

我假設您已經選擇了該對象,方法是單擊該對象,然后通過您的場景“發送”一條光線,該光線在錨點p中擊中您的對象。

要了解以下內容:

使用透視投影進行平移

現在,您沿着矢量t拖動鼠標。 使用截距定理,您可以輕松計算p必須轉換為“保持在光標下”的向量s

| P | / | q | = | s | / | t |

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

s與t平行,因此它被歸一化乘以| s |:

s = t / | t | * | s |

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

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

如果你是平移,你正在做同樣的事情,只是你沒有用s P換,但你必須通過你的整個場景的轉換-

你的鼠標不可能有終點。 透視模式下的平移可以通過兩種方式完成。 一個是翻譯相機,另一個是旋轉相機。 翻譯相機將導致用戶視圖的對象旋轉。 用於平移的旋轉相機具有兩個約束。 一個是不改變攝像機位置,另一個是相對於攝像機方向停止旋轉。 即,旋轉軸應平行於由攝像機向右和向上矢量形成的平面。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM