RSRL开发记录(一)
深觉自己姿势水平还是太低,许多东西并没有学到家就准备搞东西,ne2d
就是一个典型的例子吧。虽然以后可能还会继续,但是现在先写个软渲染器来熟悉一些基础知识。
项目开在了GitHub和Git@OSC上,欢迎围观:
GitHub: https://github.com/riteme/RSRL
Git@OSC: https://git.oschina.net/riteme/RSRL
所谓乎开发记录,就是记录一点有点价值的东西,各位随意看看。
颜色运算
常见的屏幕颜色有四个分量:红(uint8_t
来记录,范围就是
计算一个颜色的反色可以用以下公式:
这里我们不考虑透明度。
另一个比较重要的就是Alpha混合,就是将两个颜色按照透明度混合,通常是这样计算的:
其中
同时,这个公式可以实现颜色的叠加顺序不同,最终的结果也会有所不同。
向量与矩阵
这里不在介绍什么是向量和矩阵了,这里至介绍一下为什么要使用矩阵。
首先我们的可能需要缩放一个向量,这可以使用矩阵来表示:
如果是旋转,那么这样也可以(下面示例的是绕Z轴旋转):
对于绕X轴和绕Y轴的旋转可以类似的构造。
很多其它的线性变换都可以用矩阵来表示。当我们想进行多个变换的时候,我们可以使用矩阵乘法来变为一个矩阵,这样就加速了复杂的变换。
但是平移向量出了一点意外,因为3维的矩阵无法表示平移变化。
为了统一它们,平移变化被加上了一维,使用四维矩阵来表示之:
是不是非常巧妙?虽然向量和矩阵都变成了四维,但是这样我们就可以将所有的线性变换都用矩阵表示,并且可以利用矩阵乘法来加速变换。这也就是为什么矩阵在计算机图形学中十分重要的原因之一了。