如题,由于历次作业都没有进行mipmap的实践,我尝试了一下把作业3的牛牛模仿课件中三线性插值城堡的效果写出了一段程序,发现了预料之外的结果,想要探讨一下。
我设计了这样的过程:按照D=log2L,并以相邻两像素各自uv到当前像素的距离为L的近似值,判断出当前像素位于哪个mipmap层。我的颜色设计如下:
{0, 255, 255}, // green-blue
{72, 61, 139}, // Darkslateblue
{132, 112, 255}, // slight slate blue
{65, 105, 255}, // royal blue
{0, 191, 255}, // deep sky blue
{178, 238, 238}, // pale turquoise
{0, 206, 209}, // dark turquoise
{153, 51, 250}, // foreign purple
{180, 20, 150}, // interpolation 1
{230, 10, 50}, // interpolation 2
{255, 0, 0} // red
D越大,则该像素越红。
一个有趣的现象是,不论如何调试,我发现在大多数三角形边缘上都有红色的线框(红色是我设定的mipmap最高层的颜色,D=9)哪怕把eyepos从(0,0,10)移动到(0,0,30),几乎所有的三角形线框依然是红色的。这是由什么原因造成的?如果这是正常的现象,那么mipmap技术在应用中要如何克服线框位置上层数突变带来的潜在挑战呢?
问题代码已经push到github上(https://github.com/quaintSenator/Games101AS3),可以通过 ./Rasterizer output.png mipmap
调试。
Attachments:
You must be
logged in to view attached files.