我正在使用glMatrix來編碼Webgl,並希望從現有投影和視圖矩陣(有點像lookat函數的反轉)獲取眼圖位置,焦點和向上方向。有沒有辦法做到這一點?glMatrix有沒有lookat的反向函數?
回答
我沒有實現一個,沒有。我甚至不知道你可以將它分解成原始媒介,就此而言。 lookAt點可能位於沿原始射線的任何位置,您將如何確定合適的向上矢量是什麼?我想這是一個單向算法(只是懶得證明它!)
除此之外,然而,我懷疑你是否想要做到這一點,即使有一種方法。我敢打賭,跟蹤你使用的值並操縱它們,而不是試圖將它們從矩陣來回拖到向量和後面,這幾乎總是更有利的。
是和沒有:是的,你可以反轉模型視圖轉換並且沒有,你不會得到確切所有這三個矢量是相同的。
lookAt
的模型視圖轉換與CSG模型中使用的connectTo
操作非常相似。它將您的場景安裝在相機前。這是通過平移和三軸旋轉完成的。 eye
點被翻譯爲(0,0,0)
並且圍繞它進行所有進一步的旋轉。通過用逆矩陣變換(0,0,0)
,可以輕鬆導出視點。
但是,中心點僅用於調整沿軸的視圖軸。在openGL中,眼睛正面臨着-Z
。中心和眼睛之間的距離丟失。所以如果你自己定義距離,你可以很容易地沿着你的視軸獲得一箇中心點。假設我們需要距離d
。然後我們只需要用逆矩陣變換(0,0,-d)
,我們得到一個有效的中心點,但不完全相同。中心點僅限定兩個旋轉角度,即攝像機搖攝和傾斜。
更糟糕的是重建矢量。它僅用於相機的側傾角,因此僅用於一個標量值。因此,對於逆變換,您不僅可以選擇沿Y軸的任何正值,還可以選擇YZ平面中具有正Y值的任意點。爲了得到完全垂直於觀察軸且尺寸爲1的向上矢量,我們只需將(0,1,0)
與逆矩陣變換。記住這次轉換爲矢量(而不是點)。
現在我們有眼睛,中心和向上重建,以便下次獲得完全相同的結果lookAt
。但由於這個矩陣只包含6個信息值(平移,平移,傾斜,滾動),所以我們必須選擇丟失的3個值(距離眼睛中心,相機YZ平面上向量的大小和角度)。
模型視圖矩陣當然可以做其他轉換(任何仿射),但lookAt函數僅將該矩陣用於平移和旋轉。它正在調整相機前面的場景而不會使其失真。
- 1. Vertex OpenGL LookAt沒有顯示
- 2. \ http_parse_headers()有反向函數嗎?
- 3. LookAt函數
- 4. 有沒有get_object_or_404()相反的函數
- 5. 關於LookAt()函數
- 6. OpenGL LookAt函數:是向上的向量是任意的嗎?
- 7. 有人可以從glMatrix中解釋mat4.translate函數嗎?
- 8. 的upload_max_filesize沒有反映在phpinfo()函數
- 9. 反向Logistic函數/反向Sigmoid函數
- 10. 是否有一些escaped_list_separator反向函數?
- 11. Django沒有反向django.contrib.auth.views.password_reset_confirm
- 12. django沒有反向匹配
- 13. Django - 沒有反向匹配/
- 14. 核心數據,沒有反向關係
- 15. 函數LookAt轉身對象?
- 16. Three.js,lookAt函數問題
- 17. 反射:LibraryMirror中沒有函數
- 18. 反應函數沒有定義沒有民主基金
- 19. LookAt函數後面的數學
- 20. Django的 - 蟒蛇:利用反向失敗:沒有反向匹配
- 21. 沒有反向功能的反向字符串
- 22. 反向工程的DB沒有外鍵
- 23. Clojure的:用反向排序,沒有它
- 24. 的RewriteCond - 反向引用沒有價值
- 25. 沒有反向代理的Jetty/Tomcat
- 26. 沒有反向匹配的django錯誤
- 27. 沒有子進程的Python反向shell
- 28. 沒有toBinaryString的反向位位置
- 29. 「IN」函數有沒有相反的地方?
- 30. 有沒有反正C#中的緩存函數/方法#