QA From TinyRenderer&TinyRenderer问题汇总
最近在学习TinyRenderer这个库,包括学习这个库本身的wiki以及一些知乎上的内容。遇到的问题在这里记录一下。
git:https://github.com/xkyl-yhw/SoftRenderer
库文件混乱,使用的版本不同.以及函数不统一的问题
比较经典的就是本身tinyrenderer在一开始教学为了区分vec
normalize()函数
其中函数不统一的比较经典的就是vec的normalize()函数,第一版的标准化函数是直接应用在vec上的,而第二版则是返回一个标准化vec。
具体可以直接看返回值,前者是vec<2>,是第二版的定义。后者返回值是vec<2>& 是我仿造第一版新增在第二版的定义。

uv坐标
第一版的uv坐标会乘以texture图片大小,而第二版的不会,直接返回uv坐标。
图片输出后出现的破面,缺点
这个问题是初学一开始经常会遇到的问题。可能出现在各个阶段。这里个人对光栅化阶段的两种方式进行分析,我们在画三角形的过程中可能采用的是线扫描或者包围盒的方式进行像素填充,重点是像素填充的一定是整形,就是光栅化阶段所确定的包围盒的区域也好,线扫描的上下左右区间也罢。一定是整型范围,你可以通过floor/ceil稍微扩大范围,或者用int(float + 0.5)进行float到int的转换。
可能有以下原因:
- 这个与上面版本不清楚有关系,导致需要对函数进行改写,不能粗暴的更换头文件。
- float精度有关
- vec
和 vec 之间的转换有关。
float精度
精度问题主要是在 https://zhuanlan.zhihu.com/p/523501661 这里最后有提及

vec 和 vec 之间的转换有关。
建议一定看清楚函数参数输入的是Vec3

Reference:
https://github.com/ssloy/tinyrenderer
https://www.zhihu.com/column/c_1515686815151034369
https://github.com/xkyl-yhw/SoftRenderer