2020年3月31日
摘要: 同心映射的算法原理如下图,具体阐述参考书籍: 由于同心映射是针对于samples这个数组的映射,所以只需要修改samples这个数组的数据就行了。 需要修改的Sampler类: #pragma once #ifndef __SAMPLER_HEADER__ #define __SAMPLER_HEA 阅读全文
posted @ 2020-03-31 11:12 dalgleish 阅读(275) 评论(0) 推荐(0) 编辑
摘要: 原理参照书籍 类声明: #pragma once #ifndef __HAMMERSLEY_HEADER__ #define __HAMMERSLEY_HEADER__ #include "sampler.h" class Hammersley :public Sampler { public: H 阅读全文
posted @ 2020-03-31 09:33 dalgleish 阅读(463) 评论(0) 推荐(0) 编辑
摘要: 类声明: #pragma once #ifndef __NROOKS_HEADER__ #define __NROOKS_HEADER__ #include "sampler.h" class NRooks :public Sampler { public: NRooks(); ~NRooks(); 阅读全文
posted @ 2020-03-31 08:47 dalgleish 阅读(230) 评论(0) 推荐(0) 编辑
摘要: 多重抖动在书上说的是水平和竖直方面随机交换。 类声明: #pragma once #ifndef __MULTIJITTERED_HEADER__ #define __MULTIJITTERED_HEADER__ #include "sampler.h" class MultiJittered :p 阅读全文
posted @ 2020-03-31 07:52 dalgleish 阅读(243) 评论(0) 推荐(0) 编辑
摘要: 抖动采样算法测试,小图形看不出什么明显区别,还是上代码和测试图吧。 类声明: #pragma once #ifndef __JITTERED_HEADER__ #define __JITTERED_HEADER__ #include "sampler.h" class Jittered:public 阅读全文
posted @ 2020-03-31 05:59 dalgleish 阅读(382) 评论(0) 推荐(0) 编辑
摘要: 此是随机采样算法,效果感觉一般般。 类声明: #pragma once #ifndef __PURERANDOM_HEADER__ #define __PURERANDOM_HEADER__ #include "sampler.h" class PureRandom :public Sampler 阅读全文
posted @ 2020-03-31 05:45 dalgleish 阅读(177) 评论(0) 推荐(0) 编辑
摘要: 这个算法是均匀采样算法,继承于Sampler类。 类声明: #pragma once #ifndef __REGULAR_HEADER__ #define __REGULAR_HEADER__ #include "sampler.h" class Regular :public Sampler { 阅读全文
posted @ 2020-03-31 05:23 dalgleish 阅读(207) 评论(0) 推荐(0) 编辑
摘要: 此是所有采样的基类,这样定义的好处是,我们可以分别测试每一个采样算法。 类定义: #pragma once #ifndef __SAMPLER_HEADER__ #define __SAMPLER_HEADER__ #include "../utilities/geometry.h" class S 阅读全文
posted @ 2020-03-31 04:57 dalgleish 阅读(459) 评论(0) 推荐(0) 编辑
摘要: World类其他都一样的,就修改build函数就行了,以后测试所有代码,都是基于两个或多个球体的,不再重复阐述。 void World::build() { vp.set_hres(200); vp.set_vres(100); tracer_ptr = new MultiSphere(this); 阅读全文
posted @ 2020-03-31 04:23 dalgleish 阅读(162) 评论(0) 推荐(0) 编辑
摘要: 好了,终于到了可以看到图片的环节了。之前的类,你一定要实现好了。所有关于World类的报错,现在我们一个一个解决来了。 先看看World类的声明: #pragma once #ifndef __WORLD_HEADER__ #define __WORLD_HEADER__ #include "geo 阅读全文
posted @ 2020-03-31 04:19 dalgleish 阅读(181) 评论(0) 推荐(0) 编辑
摘要: 再等等,把这个定义完了,就到了我们展示代码环节了。 这个类是多个球体的碰撞检测的,其实就是单个球体的改装版本,基本一摸一样的。 类定义: #pragma once #ifndef __MULTISPHERE_HEADER__ #define __MULTISPHERE_HEADER__ #inclu 阅读全文
posted @ 2020-03-31 04:07 dalgleish 阅读(182) 评论(0) 推荐(0) 编辑
摘要: 针对于单个球体的碰撞,其实和多个球体一样的,只是我修改了书上的代码,定义了这么多类,终于到头了。马上就要展示奇迹的时候了。 类定义: #pragma once #ifndef __SINGLESPHERE_HEADER__ #define __SINGLESPHERE_HEADER__ #inclu 阅读全文
posted @ 2020-03-31 04:05 dalgleish 阅读(163) 评论(0) 推荐(0) 编辑
摘要: 这个类主要是用于检测光线是否穿过球体。是核心,所有的碰撞都继承于这个类,书上也阐述了很多。详细就看书。 类定义: #pragma once #ifndef __TRACER_HEADER__ #define __TRACER_HEADER__ #include "../../Types.h" cla 阅读全文
posted @ 2020-03-31 04:03 dalgleish 阅读(341) 评论(0) 推荐(0) 编辑
摘要: 这个类是球体,也就是一会要显示的球体了。这个类继承于Geometrics类,并实现了自己的碰撞检测,碰撞原理,书上也说的很清楚了啊,大家多看。然后对照代码就明白了。 类定义: #pragma once #ifndef __SPHERE_HEADER__ #define __SPHERE_HEADER 阅读全文
posted @ 2020-03-31 03:59 dalgleish 阅读(366) 评论(0) 推荐(0) 编辑
摘要: 首先我的结构图是这样的,当然你自己喜欢怎么改都行。这个不影响,只要包含到正确的头文件就行。 geometrics是几何类的基础,所有几何的碰撞都是从这个类继承下来的。书中也说的很清楚了,大家可以阅读对应章节。 类声明: #pragma once #ifndef __GEOMETRICS_HEADER 阅读全文
posted @ 2020-03-31 03:57 dalgleish 阅读(256) 评论(0) 推荐(0) 编辑
摘要: 这个类主要是记录了所有跟视图窗口有关的数据,用于显示。 类声明: #pragma once #ifndef __VIEWPLANE_HEADER__ #define __VIEWPLANE_HEADER__ #include "../../Types.h" class Sampler; class 阅读全文
posted @ 2020-03-31 03:52 dalgleish 阅读(232) 评论(0) 推荐(0) 编辑
摘要: 这个类主要是用于记录碰撞数据的类,书中已经说的很清楚了。这个类之后会慢慢扩展,会在本随笔中扩展,先定义简单的,方便编译看看效果。 类声明(World是之后主程序中的类,最后测试时再实现): #ifndef __SHADEREC_HEADER__ #define __SHADEREC_HEADER__ 阅读全文
posted @ 2020-03-31 03:46 dalgleish 阅读(160) 评论(0) 推荐(0) 编辑
摘要: 定义光线,书中已经有原理。 类声明: #ifndef __RAY_HEADER__ #define __RAY_HEADER__ #include "geometry.h" class Ray { public: Ray(); ~Ray(); Ray(const Point3& ori , cons 阅读全文
posted @ 2020-03-31 03:39 dalgleish 阅读(194) 评论(0) 推荐(0) 编辑
摘要: 这个类主要是颜色操作,操作详细原理如下图: 类声明: class RGBColor { public: RGBColor(); ~RGBColor(); RGBColor(ldouble a); RGBColor(ldouble red, ldouble green, ldouble blue); 阅读全文
posted @ 2020-03-31 03:35 dalgleish 阅读(1146) 评论(0) 推荐(0) 编辑
摘要: 法线的相关操作都在图中,实现部分还是大家自己练习,照着图写代码就行了。 类声明: class Normal3 { public: Normal3(); ~Normal3(); Normal3(ldouble a); Normal3(ldouble a, ldouble b, ldouble c); 阅读全文
posted @ 2020-03-31 03:33 dalgleish 阅读(228) 评论(0) 推荐(0) 编辑