ConSoftRenderer 开发日志
zhouleyi2003吧
全部回复
仅看楼主
level 12
2023年08月06日 14点08分 1
level 12
最近发现了宝藏课程 games101,虽然只看到第四节课,虽然连光栅化都没讲到,虽然老师还没布置作业,我已经开始摩拳擦掌,准备写点代码了——边学边做是我一直以来的习惯。
回到正题。既然课程的主题是 computer graphics,那就干点和 cg 有关的事情:我打算运用所学知识实现一个基于控制台的 soft renderer,因而取名为 Con(sole)SoftRenderer。
2023年08月06日 14点08分 2
level 12
首先把自己之前写的半成品引擎的数学库给搬过来:
2023年08月06日 14点08分 3
level 12
六月的时候写过一个控制台贪吃蛇,把它的控制台 API 封装部分搬过来:
2023年08月06日 14点08分 4
level 12
现在我可以专心于图形学本身了。
2023年08月06日 14点08分 5
level 12
由于我还没学光栅化,我目前只能单纯地把点首尾相连起来,然后再加之以各种矩阵变换,看看最终所得的图像是否和预期一致。
这是我定义的三个点。对应的图像(不经过变换)如
镇楼
图所示。
2023年08月06日 14点08分 6
level 12
忘记附上自己的 drawLine 函数了。方便起见就写了个 lambda。
2023年08月06日 14点08分 7
level 12
现在轮到矩阵出场了!让我想想……最先讲的是 scale matrix (缩放矩阵):
放大倍数为 2:
放大倍数为 0.5:
2023年08月06日 14点08分 8
level 12
看上去一切正常。那么来试试稍微有点不太一样的……
x 轴放大倍数 2,y 轴放大倍数 0.5, z 轴不变:
2023年08月06日 14点08分 9
level 12
漏了张关键的图片。
上面的 for 循环对应前面提到的矩阵运算,下面的则实现绘图。
2023年08月06日 14点08分 10
level 12
然后是 shear matrix(剪切矩阵):
此时 x' = x + y,所以 y 坐标越大的点会被向右拉伸得更远:
2023年08月06日 14点08分 11
level 12
然后是 rotate matrix (旋转矩阵),旋转 15 度:
在控制台中,x 轴朝右,y 轴朝下,根据右手定则, z 轴正方向指向屏幕内,因此这里给了正角度,反而是顺时针旋转。
2023年08月06日 15点08分 12
level 12
接下来把它们组合到一起,即 linear transformation (线性变换)。
旋转 15 度 + 0.5 倍缩放:
2023年08月06日 15点08分 13
应该叫 linear transform。
2023年08月06日 15点08分
level 12
试试平移变换。
2023年08月06日 15点08分 14
level 12
今天先到这里吧。目前为止一切顺利。
睡前打算啃啃之前买的《op amps for everyone 5e.》,希望读完之后能对运放有更深入的了解,教科书上讲得实在是太浅了。
2023年08月06日 15点08分 15
1 2 3 4 尾页