使用GLM的UnProject

Pup*_*ppy 5 c++

我不确定如何使用GLM提供的Unproject方法.

具体来说,视口传入的格式是什么?为什么函数不需要视图矩阵以及投影和世界矩阵?

Kil*_*nDS 15

这里需要一点历史.GLM的unproject实际上或多或少直接替代了gluUnProject使用弃用的OpenGL固定函数渲染的函数.在此模式下,模型和视图矩阵实际上组合在"ModelView"矩阵中.显然,GLM笔者下降的命名,这更是混淆事物的"视图"的一部分,但它归结为传递类似view*model.

现在用于实际使用:

  • win是一个向量,它包含三个在Window坐标中有意义的组件.这些是视口中的坐标"x,y",通常是通过读取深度缓冲区来检索的"z"坐标(x,y)
  • 如果您甚至考虑使用此功能,模型,视图和投影矩阵应该说明一切.但是一个好的(opengl特定的)复习可能是有用的.
  • 视口在glViewport中定义,表示(x,y,w,h).X和Y指定视口的左下角(通常为0,0).宽度和高度(w,h).请注意,在许多其他系统中,x,y指定左上角,然后必须变换y坐标,这将显示在下面链接的NeHe代码中.

应用时,您最终只需将提供的窗口坐标转换回对象坐标,或多或少与渲染代码通常所做的相反.

gluUnProject可以在NeHe文章中找到关于原件的一个不错的解释.但当然这是特定于OpenGL的,而glm可以在其他环境中使用.

  • 除了视口不被视为矩阵.这是四个花车.因此,我对这些参数实际所处的顺序等感到困惑. (3认同)