在路径跟踪器中查找屏幕坐标背后的数学
Math behind finding screen coordinates in a path tracer
我已经提供了一个框架,其中实现了一个简单的路径跟踪器。到目前为止,我要做的是理解整个代码,因为我需要亲自动手。不幸的是,我到达了一个步骤,我实际上不知道发生了什么,因为我是一个新手在高级图形领域,我没有设法"解密"这一部分。开发人员试图获得屏幕角的坐标作为注释。我需要理解的是它背后的数学原理,以及用到的一些变量。下面是代码:
// setup virtual screen plane
vec3 E( 2, 8, -26 ), V( 0, 0, 1 );
static float r = 1.85f;
mat4 M = rotate( mat4( 1 ), r, vec3( 0, 1, 0 ) );
float d = 0.5f, ratio = SCRWIDTH / SCRHEIGHT, focal = 18.0f;
vec3 p1( E + V * focal + vec3( -d * ratio * focal, d * focal, 0 ) ); // top-left screen corner
vec3 p2( E + V * focal + vec3( d * ratio * focal, d * focal, 0 ) ); // top-right screen corner
vec3 p3( E + V * focal + vec3( -d * ratio * focal, -d * focal, 0 ) ); // bottom-left screen corner
p1 = vec3( M * vec4( p1, 1.0f ) );
p2 = vec3( M * vec4( p2, 1.0f ) );
p3 = vec3( M * vec4( p3, 1.0f ) );
例如:- 什么是"d"变量,为什么"d"answers"focal"都是固定的?
- "焦距"是焦距吗?
- 你认为"E"answers"V"向量是什么?
- 矩阵"M"是CameraToWorldCoordinates矩阵吗?
我猜:
E
:眼睛位置-眼睛/相机在世界空间中的位置
V
:视图方向-摄像机正在看的方向,在世界坐标
d
:命名常数的一个半角是一半的屏幕尺寸远离中心(相机看的地方)
focal
:成像平面到摄像机的距离。考虑到它在屏幕角偏移中的使用,它似乎也是图像平面在世界坐标中的高度。
M
:我认为这是WorldToCamera
矩阵。它用于变换基于E
如何计算积分:
从相机开始:
E
沿着视图方向移动
focal
距离,有效移动到图像平面中心:+ V * focal
添加X &Y将移动半个屏幕距离:
+ vec3( ::: )
考虑到
V
没有出现在vec3()
参数中(也没有任何up
或right
向量),这似乎硬编码了V
与Z轴共线的想法。最后,通过
M
将点转换为点(与方向相反,因为它们的齐次坐标为1)。
相关文章:
- UE4-如何在给定4个屏幕坐标的情况下缩放纹理或材质
- 跳转到通过输入坐标定义的控制台屏幕位置
- 如何在Openscenegraph中从二维鼠标点击的屏幕坐标点计算三维点(世界坐标)
- 检测屏幕上的坐标是否可交互
- OpenGL屏幕坐标到世界坐标
- 将 2D 屏幕坐标转换为 3D 世界坐标
- 如何获得世界坐标屏幕(DX11,C )的射线方向
- 屏幕坐标和设备坐标有什么区别?
- 使用二维屏幕坐标gluUnproject获取三维模型坐标
- 对话框单位到屏幕坐标
- 将文本光标移动到特定的屏幕坐标
- 在 OpenGL 中将 3D 坐标转换为屏幕坐标
- 原点直接到屏幕坐标
- 将屏幕坐标转换为游戏坐标
- 俯仰和偏航至2d屏幕坐标
- 将顶点坐标转换为屏幕坐标"same"
- OpenGL转换在NDC坐标而不是屏幕坐标(2D)
- 在路径跟踪器中查找屏幕坐标背后的数学
- 笛卡尔坐标和屏幕坐标之间的转换
- 排序屏幕坐标