3d TO 2d

已知:3d模型的顶点,1256个;
对应的三角面片。
求:此3d模型的2d照片。

step1: 载入数据;

vertices = np.load("meanFace.npy")
triangles = np.load("mesh.npy")

这里,vertices的shape(1, 3768).

step2: 调整顶点,进行旋转/平移/缩放,改变物体位置;

s = 180/(np.max(vertices[:, 1] - np.min(vertices[:, 1])))
R = angle2matrix([0, 30, 0])
t = [0, 0, 0]

这里是相似变换,所谓相似变换可以看作是在不同位置看同一场电影。


image.png

image.png

step3: 调整相机位置;
即从世界坐标系,变为相机参考系。
这里相机位置为(0, 0, 200)
这时再去看这个meanFace,

image.png

camera_verticestransformed_vertices,形状角度大小皆无变化,观看的角度变了。

step4: 变换到归一化相机坐标里。
在相机模型里,归一化相机坐标是使Z=1,成为透视投影;
除了射影变换,还有正交投影。

举个简单的例子来说明正交投影与透视投影照相机的区别。使用透视投影照相机获得的结果是类似人眼在真实世界中看到的有“近大远小”的效果(如下图中的(a));而使用正交投影照相机获得的结果就像我们在数学几何学课上老师教我们画的效果,对于在三维空间内平行的线,投影到二维空间中也一定是平行的(如下图中的(b))。

image.png

step5: 渲染成image。
需要从归一化相机坐标,变换到uv坐标系。


image.png

你可能感兴趣的:(3d TO 2d)