OpenGL绘制立方体
前言
本教程需要一定的数学基础(懂得向量,矩阵算法),以及需要一定的OpenGL绘图基础。
如果没有学过OpenGL,建议看看LearnOpenGL CN,那里有十分齐全的OpenGL教程。
前置知识
三维向量的旋转
首先定义向量 ( x y z w ) \left(\begin{matrix} \color{red}x \\\color{green}y \\\color{blue}z \\\color{purple}w \end{matrix}\right) ⎝⎜⎜⎛xyzw⎠⎟⎟⎞旋转角度 ( α β γ ) \left(\begin{matrix} \color{red}\alpha \\\color{green}\beta \\\color{blue}\gamma \end{matrix} \right) ⎝⎛αβγ⎠⎞,在本文中定义 α \alpha α为绕 x x x轴旋转角度, β \beta β为绕 y y y轴旋转角度, γ \gamma γ为绕 z z z轴旋转角度。
沿 x x x轴旋转公式:
[ 1 0 0 0 0 cos α − sin α 0 0 sin α cos α 0 0 0 0 1 ] ⋅ ( x y z w ) = ( x cos α ⋅ y − sin α ⋅ z sin α ⋅ y + cos α ⋅ z w ) \left[\begin{matrix} \color{red}1 &\color{red}0 &\color{red}0 &\color{red}0 \\\color{green}0 &\color{green}\cos{\alpha} &\color{green}-\sin{\alpha} &\color{green}0 \\\color{blue}0 &\color{blue}\sin{\alpha} &\color{blue}\cos{\alpha} &\color{blue}0 \\\color{purple}0 &\color{purple}0 &\color{purple}0 &\color{purple}1 \end{matrix} \right]\cdot \left(\begin{matrix} \color{red}x \\\color{green}y \\\color{blue}z \\w \end{matrix}\right)=\left(\begin{matrix} x \\\color{green}\cos{\alpha}\color{black} \cdot y - \color{green}\sin{\alpha}\color{black}\cdot z \\\color{blue}\sin{\alpha}\color{black}\cdot y + \color{blue}\cos{\alpha}\color{black}\cdot z \\w \end{matrix}\right) ⎣⎢⎢⎡10000cosαsinα00−sinαcosα00001⎦⎥⎥⎤⋅⎝⎜⎜⎛xyzw⎠⎟⎟⎞=