https://haqr.eu/tinyrenderer/camera/
之前我们用的是正交投影,Z 坐标只用来处理遮挡关系。
这里实现一个简单的相机,也就是直接把世界沿着相机反方向变换。这个例子中我们把模型的所有顶点坐标,沿着 y 轴旋转 30°。
关于旋转矩阵:看 维基 或者看 GAMES 101 的 03 Transformation
// [ cos(a) 0 sin(a) ] [ x ]
// [ 0 1 0 ] x [ y ]
// [ -sin(a) 0 cos(a) ] [ z ]
rotate_y :: (using v: Vector3, angle: float) -> Vector3 {
c := cos(angle);
s := sin(angle);
return Vector3.{
c * x + s * z,
y,
-s * x + c * z,
};
}
https://github.com/qiekn/tinyrenderer-jai/blob/main/050_rotating_camera.jai


我应该去找一个鸽子模型,做一个”道理我都懂,但是鸽子为什么那么大”。人类在干坏事的时候是不会觉得累的,这个图我一定要渲染出来。
persp :: (using v: Vector3) -> Vector3 {
c := 3.0;
factor := 1.0 / (1.0 - z / c);
return v * factor;
}
这一部分我超级不喜欢,他的这个文章里面的投影矩阵写得有些糟糕。我不用他这个,等后面我直接 Model View Projection 一套搞完。
这两章其实就是说 MVP 矩阵做的事情,大家应该都看过 GAMS 101,所以这篇文章就太啰嗦了。
GAMES 101 04 Transformation Cont.



