Home Forums GAMES在线课程(现代计算机图形学入门)讨论区 提高部分的解决方案 – 答案就在作业文档中 Reply To: 提高部分的解决方案 – 答案就在作业文档中

#3433 Score: 1
戴皓天
Participant
9 pts

是的,是代码实现的问题,我分析下我的错误吧,我把我从错误到正确分为三个阶段,姑且分别叫做A、B、C阶段吧

A阶段:
这是第一次实现的MSAA,没有维护每一个子采样点的深度,子采样点只用来产生颜色,深度检测的话是以像素为单位的,而不是对子采样点做深度检测。因此在先渲染前三角形再渲染后三角形的前提下,前三角形的边缘是黑色和绿色(也就是前三角形颜色)的平均,这个结果是正确的,但是紧接着渲染后三角形的时候,因为我是以像素为单位进行深度检测的,所以哪怕检测对象是前三角形的边缘,它的深度也是大于后三角形的任何像素的,所以渲染后三角形的时候,在两个三角形相交的地方,也就是前三角形的边缘处,经过深度检测,产生的结果就是后三角形在相交处不渲染,也就是只留下了前三角形的边缘颜色(绿色和黑色的平均),所以会产生“黑边”
具体看图,A点是前三角形的边缘,是黑色和绿色的混合,B点是相交处,经过测量可见它们的RGB值是一样的,也就是说后三角形本来应该在相交处和前三角形边缘进行颜色叠加的,但它根本就不渲染,直接忽略了,留下的就是带黑色的前三角形边缘,根本原因就是之前提到的深度检测的问题

B阶段:
进行改进,扩大了深度缓存到四倍,但是深度写入有问题,具体不好说,但总的来说从结果上就是当这个像素的深度大于缓存里对应的深度的时候,四个子采样点的深度都被同时写入这个像素的深度。这里很明显错了,因为既然深度检测是以子采样点为单位的,那么深度写入也要以子采样点为单位,不然扩大深度缓存就没有任何意义

C阶段:
把深度写入进行改进,得到正确结果

This post has received 1 vote up.
Attachments:
You must be logged in to view attached files.