# ray-tracing
这是THU2021秋高等图形学大作业。
本作业使用随机渐进式光子映射(SPPM, Stochastic Progressive Photon Mapping)算法,支持如下效果:景深、抗锯齿、贴图、凹凸贴图、参数曲面求交、复杂网格模型以及算法加速。结果在results文件夹下,其中result1.bmp和result2.bmp除了一些参数的调整场景基本一样,result3.bmp使用了景深相机。在这个场景里,苹果是贴图和凹凸贴图,墙壁、桌子和书是贴图,旁边的阿尔托花瓶是参数曲面,苹果和兔子(一共7w三角面片)是复杂网格模型以及算法加速,玻璃球和兔子后面是焦散。SPPM自带了抗锯齿效果。result4.bmp是一个人物模型,它展现了程序读取复杂obj的能力。
使用到的资源有:stanford-bunny.obj, galaxy.ppm, desk/desk.obj, desk/desk.ppm, food_apple_01_8k.obj, book_final/book.obj, book_final/book.ppm, miku/append.obj, miku/append.mtl。
由于是Windows下用vscode cmake+mingw64 GCC8.1.0编译,所以有一些路径设置为绝对路径。如果要在linux下编译,可将main函数里的path设定为对应path。path指的是resource路径的上一级。
## 源码细节
代码在src文件夹和include文件夹下。
Object:`bspline.hpp, bspline.cpp, group.hpp, group.cpp, mesh.hpp, mesh.cpp, plane.hpp, sphere.hpp, triangle.hpp`。所有基本物体都继承于Object抽象类,它包含生成AABB包围盒、计算交点等函数。Mesh类实现了读入obj文件中的顶点坐标、纹理坐标、法线坐标的方法。场景中所有的Object用ObjectGroup类管理,它不继承任何类。它储存Object指针,和用AABB包围盒生成的KD树结构。KD树加速求交的代码在`group.cpp`。
Material:`material.hpp, material_read.hpp, material_read.cpp`。使用Phong模型,可以支持读.mtl文件中的Material。
Color:`color.hpp, texture.hpp` 。Color基类储存一个基本颜色,Texture类和TriangleTexture类继承它,用于实现纹理。
Ray:`ray.hpp` 。储存光线的原点和方向。
Light:`light.hpp`。使用点光源。
Camera:`camera.hpp`。里面有PerspectiveCamera是基本的针孔相机模型,DepthFieldCamera是景深相机,它接受透镜位置和物体位置和光圈大小生成光线。
参数曲面:`bspline.hpp, bspline.cpp, utils.hpp`。使用17个控制点的3次B样条曲线,由于场景里做的是一个玻璃花瓶(由两层曲面和上面一个圆环,下面两个底组成),所以只需要解3次方程即可。解3次方程的实现在`utils.hpp`。
SPPM:`sppmhit.cpp, scene.hpp, scene.cpp, main.cpp`。SPPM的算法由Scene和main函数本身实现。main函数里每个round里实现两个pass,一开始先设定捕捉光子的范围,对于第一个pass,它发射相机光线,调用Scene::trace,将命中点储存在real_sppmhits。然后它调用Scene::buildHashGrid建立hash grid。然后到第二个pass,它发射1e6个光子,光子每到一个漫反射面就调用Scene::updateHit更新命中点参数。每个round的最后使用real_sppmhits更新sppmhit,将颜色做平均。
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
【资源说明】 1、该资源内项目代码都是经过测试运行成功,功能正常的情况下才上传的,请放心下载使用。 2、适用人群:主要针对计算机相关专业(如计科、信息安全、数据科学与大数据技术、人工智能、通信、物联网、数学、电子信息等)的同学或企业员工下载使用,具有较高的学习借鉴价值。 3、不仅适合小白学习实战练习,也可作为大作业、课程设计、毕设项目、初期项目立项演示等,欢迎下载,互相学习,共同进步!
资源推荐
资源详情
资源评论
收起资源包目录
基于随机渐进式光子映射(SPPM)算法实现的光线追踪(完整源码+说明).zip (109个子文件)
result2.bmp 2.86MB
result1.bmp 2.86MB
a50 - 副本.bmp 2.86MB
result3.bmp 2.86MB
result4.bmp 2.86MB
eyeM2.bmp 33KB
main.cpp 22KB
Matrix4f.cpp 16KB
scene.cpp 11KB
Quat4f.cpp 10KB
image.cpp 9KB
bspline.cpp 8KB
Matrix3f.cpp 8KB
Vector4f.cpp 7KB
Vector3f.cpp 6KB
mesh.cpp 5KB
Matrix2f.cpp 4KB
Vector2f.cpp 4KB
material_read.cpp 2KB
group.cpp 2KB
libstdc++-6.dll 1.35MB
libquadmath-0.dll 327KB
libgomp-1.dll 153KB
libgcc_s_seh-1.dll 77KB
libwinpthread-1.dll 51KB
libatomic-1.dll 32KB
libssp-0.dll 17KB
PROJ.exe 6.51MB
food_apple_01_8k.fbx 338KB
Abetare 1970-1994.fbx 32KB
._Abetare 1970-1994.fbx 210B
.gitattributes 56B
Matrix4f.h 4KB
Quat4f.h 3KB
Vector3f.h 3KB
Matrix3f.h 3KB
Vector4f.h 2KB
Vector2f.h 2KB
Matrix2f.h 2KB
vecmath.h 210B
utils.hpp 8KB
bspline.hpp 4KB
triangle.hpp 4KB
camera.hpp 3KB
texture.hpp 3KB
object.hpp 3KB
material.hpp 2KB
group.hpp 2KB
scene.hpp 2KB
light.hpp 2KB
image.hpp 2KB
ray.hpp 2KB
mesh.hpp 2KB
sphere.hpp 2KB
hit.hpp 2KB
plane.hpp 1KB
sppmhit.hpp 1KB
material_read.hpp 934B
color.hpp 643B
config.hpp 359B
diff.jpeg 34.1MB
a.jpeg 8KB
b.jpeg 8KB
galaxy.jpg 1.41MB
Abetare.jpg 353KB
a.jpg 54KB
settings.json 2KB
c_cpp_properties.json 658B
cmake-kits.json 464B
图形学大作业报告.md 4KB
README.md 3KB
append.mtl 3KB
miku.mtl 3KB
hpbook.mtl 317B
stanford-bunny.obj 2.3MB
desk.obj 2.25MB
append.obj 2.02MB
food_apple_01_8k.obj 1.97MB
food_apple_01_8k.obj 1.97MB
miku.obj 1.31MB
book.obj 12KB
hpbook.obj 10KB
cube.obj 172B
图形学大作业报告.pdf 179KB
desk.ppm 48MB
galaxy.ppm 17.82MB
body00_MikuAp.ppm 12MB
book.ppm 3.9MB
body01_MikuAp.ppm 3MB
face_MikuAp.ppm 3MB
hair_MikuAp.ppm 3MB
a.ppm 768KB
body02_MikuAp.ppm 768KB
wing_MikuAp.ppm 768KB
apple2.ppm 134B
PROJ 279KB
body00_MikuAp.tga 12MB
face_MikuAp.tga 4MB
hair_MikuAp.tga 4MB
hpbook.tga 3.6MB
共 109 条
- 1
- 2
资源评论
龙年行大运
- 粉丝: 1163
- 资源: 3823
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- C语言-leetcode题解之28-implement-strstr.c
- C语言-leetcode题解之27-remove-element.c
- C语言-leetcode题解之26-remove-duplicates-from-sorted-array.c
- C语言-leetcode题解之24-swap-nodes-in-pairs.c
- C语言-leetcode题解之22-generate-parentheses.c
- C语言-leetcode题解之21-merge-two-sorted-lists.c
- java-leetcode题解之Online Stock Span.java
- java-leetcode题解之Online Majority Element In Subarray.java
- java-leetcode题解之Odd Even Jump.java
- 计算机毕业设计:python+爬虫+cnki网站爬
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功