主要参考`scene.camera.py`部分代码,使用的是标准的针孔相机模型(pinhole camera model),将3DGS投射到2D图像,主要涉及到两个步骤:
1. 视图变换(view transformation):世界坐标系转换到相机坐标系->视图矩阵
2. 投影变换(projection transformation):相机坐标系投影到二维裁剪空间,映射到屏幕
# `Camera`的核心参数
## 相机内参
`FoVx`, `FoVy`:水平和垂直视场角(Field of View),角度越大所看到的范围越广;
`resolution`:图像分辨率,图像的长与宽的像素数量;
`znear`, `zfar`:近裁剪平面和远裁剪平面,相机只渲染这两个平面之间的物体。
视场角和这两个平面共同定义了视锥体。
## 相机外参
`R`:旋转矩阵,对应相机的朝向,即相机的三个轴对于世界坐标系的旋转关系
`T`:平移向量,定义了相机在世界坐标系的位置
## 变换矩阵的计算
`self.world_view_transform = torch.tensor(getWorld2View2(R, T, trans, scale)).transpose(0, 1).cuda()`
获得视图矩阵,由R\T\tans\scale确定。
`self.projection_matrix = getProjectionMatrix(znear=self.znear, zfar=self.zfar, fovX=self.FoVx, fovY=self.FoVy).transpose(0,1).cuda()`
投影变换矩阵,由相机的内参确定。
视图矩阵与投影矩阵的乘积,获得MVP矩阵,从而实现一步变换。
## 获得相机中心坐标
已知在相机坐标系中相机坐标在(0, 0, 0, 1),由视图矩阵的逆矩阵将相机坐标变换到世界坐标。
1311

被折叠的 条评论
为什么被折叠?



