计算机图形学光线追踪大作业C++基于Optix为框架实现的光线追踪算法合集,含直射光阴影效果、漫反射阴影效果、镜面反射效果等示例

MineRay

使用Optix为框架实现的光线追踪算法。

包含4个示例,直射光阴影效果、漫反射阴影效果、镜面反射效果、折射效果

环境需求

本项目在Windows 10中测试,以下环境为Windows中的环境

CUDA 10.1

OptiX 7 SDK

cmake

编译方式

使用cmake编译

  1. 打开MineRay/common/gdt/cmake/FindOptiX.cmake,在配置OptiX路径中确保其含有本机实际安装OptiX的路径
  2. CMake GUI设置"source directory"至当前目录
  3. 设置"build directory"至"当前目录/build"
  4. 点击"configure",设置平台为x64,Visual Studio 2017以上
  5. 点击"generate"生成
  6. 点击"open project"使用Visual Studio打开项目编译

操作方式

  • 右键按住并拖动旋转视角
  • 'w’向前移动,'s’向后移动,'a’向左移动,'d’向右移动
  • 'left shift’向上移动
  • 'left ctrl’向下移动

示例简介

0x00_direct 直射光

显示顶部光源对物体造成的阴影效果

在这里插入图片描述

0x01_soft 漫反射

设置每一个面为模糊材质,显示顶部光源对物体形成模糊的阴影效果

在这里插入图片描述

0x02_mirror 镜面反射

显示平面镜全反射和球面镜全反射的效果

在这里插入图片描述

0x03_refraction 折射

实现水面折射,玻璃球折射形成的凸透镜效果,以及带颜色的折射

在这里插入图片描述

文件说明

models文件夹:本示例中使用的模型

png文件夹:演示示例的图片

示例代码文件夹

对于每一个实例,都包含两个代码

  1. main.cpp: 该实例的主函数,使用Model读取模型,使用CameraWindow创建glfw窗口,使用OptixRenderer构建optix环境,最后启动程序;
  2. devicePrograms.cu: 包含OptiX流水线中的函数cuda代码,该代码由nvcc编译后被OptixRenderer读取后用于创建Optix环境

common

该文件夹包含各个实例共用的部分

3rdParty: 一些第三方库,如glfw, tinyobj等

gdt: 开源的库,包含几何方面的数学功能函数和结构体,配置OptiX的CMake文件等

MainWindow: 我们使用glfw实现的窗口

  1. MainWindow.h/MainWindow.cpp: MainWindow类,封装glfw的功能,实现窗口构建,键盘、鼠标消息读取,窗口主循环的实现
  2. CameraWindow.h/CameraWindow.cpp: CameraWindow类,继承自MainWindow. 在MainWindow基础上实现了键盘和鼠标控制相机变化的功能

OptixRenderer: 使用OptiX渲染的功能,方便main中将Optix渲染内容与glfw窗口对接

  1. CUDABuffer.h: 使用CUDA在GPU中缓存数据的功能
  2. LaunchParams.h: 启动参数结构体,需要从CPU传入OptiX的结构
  3. Model.h/Model.cpp: 模型读取类,使用tinyobj读取模型,存储在Model类
  4. optix7.h: OptiX相关头文件以及宏
  5. OptixRenderer.h/OptixRenderer.cpp: OptiX渲染类,将CPU与OptiX交接的功能类。包含初始化OptiX环境,构建流水线,传输参数等功能。

完整代码下载地址:基于Optix为框架实现的光线追踪算法合集

  • 26
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

yanglamei1962

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值