3
A
回答
15
一點歷史在這裏需要。 GLM的unproject實際上是對使用不推薦的OpenGL固定功能渲染的gluUnProject
函數的或多或少的直接替換。在這種模式下,模型和視圖矩陣實際上結合在「模型視圖」矩陣中。顯然,GLM筆者下降的命名,這更是混淆事物的「視圖」的一部分,但它歸結爲通過類似view*model
。
現在的實際使用:
- 勝利是持有三個組件已經在窗口座標意義的載體。這些是視口中的座標'x,y',您通常通過讀取深度緩衝區來檢索'z'座標,如果您甚至想使用此功能,模型,視圖和投影矩陣應該自行說明。但一個好的(opengl專用)可能會有用。
- 視區被定義爲在glViewport,這意味着(X,Y,W,H)。 X和Y指定視口的左下角(通常爲0,0)。寬度和高度(w,h)。請注意,在許多其他系統中,y,y指定左上角,那麼您必須轉換您的y座標,然後顯示在下面鏈接的NeHe代碼中。
應用時,您只需將提供的窗口座標轉換回對象座標,或多或少地與您的呈現代碼通常所做的相反。
對原始gluUnProject
的半正式解釋可以找到NeHe article。但是,當然這是OpenGL特有的,而glm可以用在其他上下文中。
2
視區中傳遞四個浮點數:視口的x和y窗口座標,隨後其寬度和高度。這與使用的順序相同。通過glGetFloatv(GL_VIEWPORT, ...)
。因此,在大多數情況下,前兩個值應爲0。
正如KillianDS已經指出的那樣,model
說法其實是個模型視圖矩陣,看到的例子使用的unProject()
在gtx_simd_mat4.cpp
,功能test_compute_gtx()
:
glm::mat4 E = glm::translate(D, glm::vec3(1.4f, 1.2f, 1.1f));
glm::mat4 F = glm::perspective(i, 1.5f, 0.1f, 1000.f);
glm::mat4 G = glm::inverse(F * E);
glm::vec3 H = glm::unProject(glm::vec3(i), G, F, E[3]);
如您所見,作爲第二個參數傳遞的矩陣基本上是翻譯和透視轉換的產物。
相關問題
- 1. glm :: unproject問題,世界到屏幕空間對齊錯誤
- 2. glm :: unProject將鼠標位置轉換爲3個座標
- 3. glm :: unProject不起作用,屏幕上的光線位置不正確
- 4. 使用GLM
- 5. 在Java中正確使用unproject libgdx
- 6. 使用modelr :: add_predictions glm
- 7. 使用GLM的問題
- 8. DirectXMath Unproject在錯誤的軸
- 9. 放大使用GLM功能
- 10. Proc GLM(SAS)使用R
- 11. glm:無法使用從quaternion.hppMat4
- 12. R - 在data.table中使用glm
- 13. LibGDX unProject返回錯誤值
- 14. SceneKit unproject Z文檔說明?
- 15. mat4項目/ unproject不工作
- 16. 使用glm的四元數到矩陣
- 17. 使用GLM的同樣隨機
- 18. 使用glmet-包的懲罰性GLM
- 19. 使用glm的條件預測概率
- 20. 什麼是使用GLM的最佳glMatrixMode()?
- 21. 通過glm :: unproject將2D邊緣切換到3D模型空間 - 射線不與模型相交
- 22. glm()中「PROC GLM; FREQ」的等價物?
- 23. C++ glm Opengl glm :: mat4轉換和旋轉glm :: vec4
- 24. 在glm中使用predict()函數
- 25. 在glm中使用「custom」sin和cos :: rotate
- 26. 如何預測在R中使用glm?
- 27. GLM無法使用g ++/C++編譯11
- 28. 在GLM準規範中使用變量
- 29. 使用GLM加載OBJ文件
- 30. 在OpenGL中使用glm :: ortho投影
除視區不被視爲矩陣。這是四個花車。因此,我對這些參數實際上在什麼順序等方面感到困惑。 – Puppy 2012-03-28 09:30:31
@DeadMG:我已經更新了答案。 – KillianDS 2012-03-28 09:54:18