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