This is a simple projection of four-dimensional objects into three-dimensional space, and then the projection objects are presented on the 2D screen.
这是一个简单的将四维物体投影到三维空间中再将投影物体呈现在2D屏幕上的程序.
xyz space
y z
^ ^
| /
|/--> x
xyw space
y w
^ ^
| /
|/--> x
xzw space
w z
^ ^
| /
|/--> x
yzw space
y z
^ ^
| /
|/--> w
In camera coordinates, we set the camera to point in the positive direction of the w axis.
在相机坐标中,我们设定相机指向w轴正方向.
The camera has three line of sight angles f_ x, f_ y, f_ z is used to describe half of the viewing angle of the camera in the x, y, z axes.
相机拥有三个视线角f_x, f_y, f_z用来描述相机在x, y, z轴方向上可观察范围角度的一半.
\begin{cases}
x'=\frac{x}{w\tan f_a}\\
y'=\frac{y}{w\tan f_a}\\
z'=\frac{z}{w\tan f_a}
\end{cases}
We remember R_t is the rotation matrix of θ that rotates clockwise about the t axis.
我们记R_t为绕t轴顺时针旋转θ的旋转矩阵
R_x=\left[\begin{array}{ccc}
1 & 0 & 0 & 0 \\
0 & \cos\theta & -\sin\theta & -\sin\theta \\
0 & \sin\theta & \cos\theta & \sin\theta \\
0 & \sin\theta & -\sin\theta & \cos\theta
\end{array}\right]
R_y=\left[\begin{array}{ccc}
\cos\theta & 0 & \sin\theta & \sin\theta \\
0 & 1 & 0 & 0 \\
-\sin\theta & 0 & \cos\theta & -\sin\theta \\
-\sin\theta & 0 & \sin\theta & \cos\theta
\end{array}\right]
R_z=\left[\begin{array}{ccc}
\cos\theta & -\sin\theta & 0 & -\sin\theta \\
\sin\theta & \cos\theta & 0 & \sin\theta \\
0 & 0 & 1 & 0 \\
\sin\theta & -\sin\theta & 0 & \cos\theta
\end{array}\right]
R_w=\left[\begin{array}{ccc}
\cos\theta & -\sin\theta & \sin\theta & 0 \\
\sin\theta & \cos\theta & -\sin\theta & 0 \\
-\sin\theta & \sin\theta & \cos\theta & 0 \\
0 & 0 & 0 & 1
\end{array}\right]
!!!: Note that the length of the column vector of this rotation matrix is greater than 1, which needs to be manually divided back, otherwise there will be amplification effect!
!!!: 注意,这个旋转矩阵的列向量长度大于1需要手动除回去否则会有放大效应!