Home › Forums › GAMES在线课程(现代计算机图形学入门)讨论区 › 作业七的结果没有示例中的亮度高 This topic has 5 replies, 4 voices, and was last updated 4 years, 7 months ago by clarence. Viewing 4 reply threads Author Posts 2020年4月19日 at 下午10:46 #5896 Score: -1 clarenceParticipant Karma: -2 pt 效果图和代码如下,感觉是间接光照不够,但对照了论坛上其他老哥代码和作业给到的伪代码,似乎没发现有什么问题。 PS:有没有用std::future实现多线程的老哥啊,感觉效果不太理想T.T。784,32SPP用了差不多两小时,具体就是每次调用Scene::castRay开一条线程 This post has received 1 vote down. Attachments:You must be logged in to view attached files. 2020年4月20日 at 上午12:09 #5899 Score: 0 L-SunParticipant future.get会阻塞当前的线程,而且你图中castRay的每次递归都会重新创建一个线程,创建线程会有时间开销。 你应该在spp循环里进行多线程调用castRay来更新framebuffer,而且线程应该要复用,不然每次创建一个线程都会有时间开销。你可以查查C++11怎么实现一个简单的线程池。正确实现的话784*784 32spp大概耗时1分钟多一点(i58400 6线程 Release编译)。 2020年4月20日 at 上午1:01 #5902 Score: 1 nightwatchParticipant Karma: 3 pts 你可以把图片切成几个小块,然后分给不同的线程,渲染完了以后合并到framebuffer里面去。我的i7 4820H, 512×512 128spp,开O3以后应该在40秒左右渲染完 亮度不够可能是因为光线弹射到了物体的表面里面(浮点误差,然后这条光线就没了,所以你在检测光线与物体相交的时候要注意避免和物体自相交。 This post has received 1 vote up. 2020年4月20日 at 上午9:31 #5907 Score: 0 6君Participant Karma: 1 pt 为什么深度+1? 2020年4月20日 at 下午5:34 #5920 Score: 0 clarenceParticipant Karma: -2 pt 我的思路是只有eyeray与光源相交才返回光源的亮度来解决光源黑的问题,不一定对 2020年4月20日 at 下午5:32 #5919 Score: 0 clarenceParticipant Karma: -2 pt 感谢上面两位同学的提点,现在运行时间快多了! Author Posts Viewing 4 reply threads You must be logged in to reply to this topic. Log In Username: Password: Keep me signed in Log In