Home › Forums › GAMES在线课程(现代计算机图形学入门)讨论区 › 【作业二提高】维护了两个buffer无法出现正确的图
Tagged: 作业二
- This topic has 15 replies, 7 voices, and was last updated 4 years, 2 months ago by dafei.
-
AuthorPosts
-
-
depth_buffer和sample_frame_buffer大小都为(4*w*h),sample_frame_buffer初始化为0.思路是在遍历2*2的点时不断更新两个buffer,如果深度小于当前buffer存的值,更新depth_buffer和sample_frame_buffer。每次遍历都加入颜色信息到pixel_color中。然后每结束一个像素点的四次遍历后就开始绘图。结果是整个三角形都变成黄色了。希望大佬们看看哪里出了问题
Attachments:
You must be logged in to view attached files. -
如果我没推错的话,假设你前三个采样点都采样到了颜色,但如果第四个采样点没有通过insideTriangle(),就不会触发setColor()方法,这是不是不太对呢?
-
pixel_color初始化的问题?
pixel_color是不是应该在每个for(int i=0;i<4;i++) { .... }
循环外面初始化一下?
-
对比了一下非附加题生成的图片。发现没有优化,依旧不知道问题出在了哪里
-
光看你这段代码好像没什么问题。。
-
这是修改过的代码,还是毫无优化,快哭了
This post has received 1 vote up.Attachments:
You must be logged in to view attached files.-
我强答一波。。。你把 pixel_color 更新的那行从深度的判断条件里移出来,因为获得的值直接就是 1/4 了,所以按上图的代码的话整体像素值会变小
-
楼上说的是对的,pixel_color 更新的那行从深度的判断条件里移出来。
原因是,即使当前亚像素的深度是比之前的图形深度“深”,同样也需要对当前像素的最终颜色做出贡献,加上之前的颜色。
-
-
-
-
对第一个i==3保证在最后一个sample点之后才set_pixel,放出去的话程序效率会提高。谢谢提醒。
第二个地方我没截屏截到,sample_frame_buf是我自己后来定义的一个数组,大小是4*w*h,这里没有修改用于画图的frame_buffer。这个数组用于保存当前的每个采样点的颜色信息。 -
看了你的问题,我终于解决了自己碰到的困难,我之前一直没有注意到get_index(x,y)函数来获取depth_buffer的索引,一直是自己计算,结果发生了奇怪的错误。希望有我这样问题的人也能如此解决。
-
dafeiParticipant
检查一下 insideTriangle 这个函数是不是传参数的时候用了 int 导致小数部分被抹除
-
-
AuthorPosts
- You must be logged in to reply to this topic.