【发布时间】:2014-12-28 17:44:16
【问题描述】:
我正在尝试恢复一个点的 WORLD 位置,知道它在 EYE 空间中的深度,计算如下(在顶点着色器中):
float depth = - uModelView * vec4( inPos , 1.0 ) ;
其中 inPos 是世界空间中的一个点(显然,我不想恢复这个特定的点,而是一个以该格式表示深度的点)。
它是标准化的屏幕位置(在 0 和 1 之间),计算如下(在片段着色器中):
vec2 screen_pos = ( vec2( gl_FragCoord.xy ) - vec2( 0.5 ) ) / uScreenSize.xy ;
我可以访问以下信息:
- uScreenSize :顾名思义,就是屏幕的宽度和高度
- uCameraPos : 世界空间中的相机位置
和标准矩阵:
- uModelView : 模型视图相机矩阵
- uModelViewProj : 模型视图投影矩阵
- uProjMatrix : 投影矩阵
如何计算 WORLD 空间中某个点的位置 (X,Y,Z) ? (不在EYE空间)
我无法访问其他(我不能使用近、远、左、右……),因为投影矩阵不限于透视或正交。
提前致谢。
【问题讨论】: