Forum Replies Created
-
AuthorPosts
-
你说的是作业3吗?作业3里面t.v是
Vector4f v[3]
是四维的若你让v=t.toVector4()
这里v[i].W()确实是1
所以这里应该用t.v[i].w(),这个才是该i点在view space下的z值。
具体这里为什么要有这样一个公式,你可以参考这个文章中的推导,这里空太小了我写不下:
https://zhuanlan.zhihu.com/p/45757899This post has received 3 votes up and 1 vote down.其实在本次实验中对attribute的插值被简化了(老师在课上也提到了,透视投影会影响插值,但实验中不要求这么复杂了),应该使用view space的坐标进行插值。
所以view_pos本来的作用是参与所有attribute的插值的,现在只是在计算interpolated_shadingcoords时需要了。(2) rasterizer.cpp 中 v = t.toVector4()
助教,关于这一条,我测试了一下
auto v = t.toVector4()
v[i].w() 恒为1,并不是所需的 view space 的深度值
这里是不是得用t.v[i].w()才可?假想你下巴搭在木桌上看桌子,想象自己眼前有很多均等大小的像素格子,是下方(近处)的像素格子包含的桌面面积大还是上方(远处)像素格子包含的桌面面积大?
This post has received 1 vote down.这里应该不是。代码里的就是实际的n,f值,可以设置为负数(参考作业二中助教补充的修正为右手坐标系的一系列操作)。
我觉得老师只是说可以用面积比的形式理解重心坐标,真正计算alpha, beta, 和gamma还是用公式吧?
This post has received 2 votes up.Color的C要大写。小驼峰命名法。
感谢同学补充,不过你所说的恰巧是我一直纠结的点。
我个人认为老师在PPT和作业中提到的「super-sampling 处理 Anti-aliasing」不是MSAA,而是SSAA。
你的资料也显示了,MSAA有着与老师在PPT中提到的算法流程有着些许不同。
所以本次作业我按照老师PPT中的算法流程和作业中的要求实现的是SSAA,需要4xdepth buffer和4xcolor buffer,且每个像素做4次着色操作(getcolor())。
如果要实现的是MSAA的话,我觉得那就得另开一贴再议了。
MSAA确实如同学所说,只需要做一次着色操作,但是我对您所说的不需要为子样本提供单独的颜色缓存和深度缓存这一点存疑,这与我之前的认知相悖。您可以继续展开说一下是如何实现不把背景色(比如说红色)引入两个三角形的相交边缘的吗?
This post has received 1 vote up.其实按照老师第八节课中(35:14处)的说法,除了要为每个子样本维护一个depth buffer外,也要维护一个color buffer,这样就不会有黑线。背景色换为红色后,也不会有红线。
不为子样本维护color buffer的话,无论如何都会把前一个渲染的三角形的边缘颜色引入。
这里只是因为场景非常简单,只有两个三角形,没有把问题凸显出来,且如果幸运的话,渲染顺序还会隐藏这个问题。
- This reply was modified 4 years, 8 months ago by Angus.
如果我没推错的话,假设你前三个采样点都采样到了颜色,但如果第四个采样点没有通过insideTriangle(),就不会触发setColor()方法,这是不是不太对呢?
我这句话的意思是,因为在这次实验中只有两个三角形,且背景色为黑色(0 ,0, 0),所以在对两个三角形边缘进行颜色混合时,混入首先渲染的三角形边缘的(0 ,0, 0)并不会对结果造成影响。可以试试如果背景色为红色(1, 0, 0),边缘会不会混入背景的红色,来验证一下自己算法的正确性。
感谢总结。还想问一下同学你的颜色设定方法,以及最后的边缘是(蓝+绿)混合还是(蓝+绿+黑)混合?
四维向量的表示齐次坐标(x,y,z,w)。你可以再听下老师关于其次坐标的讲解。
如果你只需要一个4倍大的buffer,即如果你只需要维护样本的color buffer就可以实现的话,那当我上面的话全都没说吧😥。
我还是继续相信闫老师第八节课里说的话👌。你使用这个四倍大小的像素颜色值的samplelist后,还需要一个四倍大小的子样本深度buffer吗?
回复见楼下。
Supersampling Antialiasing本身就是要为每一个子样本维护一个 color buffer和 depth buffer,并且每个子采样点都会做深度测试。
具体可以参考文刀秋二前辈的知乎回答:
https://www.zhihu.com/search?type=content&q=SSAA以及闫老师在课程8的35:14处也说了这么一句话:
「大家已经做了这次作业,就应该已经知道,我们会维护每一个fragment或者说sample,对应的深度和颜色,最后再把它拼成一个图,就不会拼出三角形的黑边。」
This post has received 1 vote up.- This reply was modified 4 years, 8 months ago by Angus.
This post has received 1 vote down.没代码的话我还真不好猜😄
你可以试试分别把四个样本的sample_frame_buff当作最终值,用setcolor()赋给像素,看看单个样本是否出了问题👌This post has received 1 vote up.不知道你的outcolor是怎么写的。不过你既然也维护了一个四倍大小的sample_frame_buf和sample_depth_buf的话,我可以跟你说说我的思路,不保证对,但我最后的效果是没有问题的,然后你对照一下看看你的问题出在哪。
在方法内,我首先对四个sample分别进行采样,然后记录在sample_frame_buf和sample_depth_buf内。
如果有多于一个sample采集到有效样本的话(至少有一个sample在三角形内)
就更新这个像素的
frame_buf = (sample_frame_buf(index)+sample_frame_buf(index+1)+sample_frame_buf(index+2)+sample_frame_buf(index+3)) / 4
This post has received 1 vote up.增加一个sample_depth_buf和一个sample_frame_buf试一下?都是四倍大
This post has received 1 vote up.在Triangle的头文件中
This post has received 1 vote up.插个嘴,请问下左手系和右手系的投影矩阵具体区别在哪一步?
也就是说经过model&view transformation后的位于z负半轴三角形,在施加projection transformation后,其实是做了不符合预期的(视锥体外)变换,但恰好还落在[+-x,+-y]内,且虽然在相机“后面”,但由于没有对视锥体的近远平面进行裁切,仍然看得到三角形?
+1
我也好奇哪一部分代码涉及了z轴的反转对比老师课上用的课件和课下放出的课件,我觉得老师会根据进度动态调整每节课的课件内容后再放出,如果提前放出容易造成混乱,例如「本节课要用到上节课的ppt」。
我一般是课下等课件pdf放出后,对照b站视频再次1.5倍速听课+在pdf上记笔记,也有新收获。This post has received 1 vote up.画一个全黑的深度值很高的大三角形(背景)是不是就好了
-
AuthorPosts