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

本文主要是介绍计算机图形学光线追踪大作业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为框架实现的光线追踪算法合集

这篇关于计算机图形学光线追踪大作业C++基于Optix为框架实现的光线追踪算法合集,含直射光阴影效果、漫反射阴影效果、镜面反射效果等示例的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/548449

相关文章

Flutter实现文字镂空效果的详细步骤

《Flutter实现文字镂空效果的详细步骤》:本文主要介绍如何使用Flutter实现文字镂空效果,包括创建基础应用结构、实现自定义绘制器、构建UI界面以及实现颜色选择按钮等步骤,并详细解析了混合模... 目录引言实现原理开始实现步骤1:创建基础应用结构步骤2:创建主屏幕步骤3:实现自定义绘制器步骤4:构建U

SpringBoot中四种AOP实战应用场景及代码实现

《SpringBoot中四种AOP实战应用场景及代码实现》面向切面编程(AOP)是Spring框架的核心功能之一,它通过预编译和运行期动态代理实现程序功能的统一维护,在SpringBoot应用中,AO... 目录引言场景一:日志记录与性能监控业务需求实现方案使用示例扩展:MDC实现请求跟踪场景二:权限控制与

Android实现定时任务的几种方式汇总(附源码)

《Android实现定时任务的几种方式汇总(附源码)》在Android应用中,定时任务(ScheduledTask)的需求几乎无处不在:从定时刷新数据、定时备份、定时推送通知,到夜间静默下载、循环执行... 目录一、项目介绍1. 背景与意义二、相关基础知识与系统约束三、方案一:Handler.postDel

使用Python实现IP地址和端口状态检测与监控

《使用Python实现IP地址和端口状态检测与监控》在网络运维和服务器管理中,IP地址和端口的可用性监控是保障业务连续性的基础需求,本文将带你用Python从零打造一个高可用IP监控系统,感兴趣的小伙... 目录概述:为什么需要IP监控系统使用步骤说明1. 环境准备2. 系统部署3. 核心功能配置系统效果展

Python实现微信自动锁定工具

《Python实现微信自动锁定工具》在数字化办公时代,微信已成为职场沟通的重要工具,但临时离开时忘记锁屏可能导致敏感信息泄露,下面我们就来看看如何使用Python打造一个微信自动锁定工具吧... 目录引言:当微信隐私遇到自动化守护效果展示核心功能全景图技术亮点深度解析1. 无操作检测引擎2. 微信路径智能获

使用Java将各种数据写入Excel表格的操作示例

《使用Java将各种数据写入Excel表格的操作示例》在数据处理与管理领域,Excel凭借其强大的功能和广泛的应用,成为了数据存储与展示的重要工具,在Java开发过程中,常常需要将不同类型的数据,本文... 目录前言安装免费Java库1. 写入文本、或数值到 Excel单元格2. 写入数组到 Excel表格

C#如何调用C++库

《C#如何调用C++库》:本文主要介绍C#如何调用C++库方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录方法一:使用P/Invoke1. 导出C++函数2. 定义P/Invoke签名3. 调用C++函数方法二:使用C++/CLI作为桥接1. 创建C++/CL

Python中pywin32 常用窗口操作的实现

《Python中pywin32常用窗口操作的实现》本文主要介绍了Python中pywin32常用窗口操作的实现,pywin32主要的作用是供Python开发者快速调用WindowsAPI的一个... 目录获取窗口句柄获取最前端窗口句柄获取指定坐标处的窗口根据窗口的完整标题匹配获取句柄根据窗口的类别匹配获取句

在 Spring Boot 中实现异常处理最佳实践

《在SpringBoot中实现异常处理最佳实践》本文介绍如何在SpringBoot中实现异常处理,涵盖核心概念、实现方法、与先前查询的集成、性能分析、常见问题和最佳实践,感兴趣的朋友一起看看吧... 目录一、Spring Boot 异常处理的背景与核心概念1.1 为什么需要异常处理?1.2 Spring B

Python中的Walrus运算符分析示例详解

《Python中的Walrus运算符分析示例详解》Python中的Walrus运算符(:=)是Python3.8引入的一个新特性,允许在表达式中同时赋值和返回值,它的核心作用是减少重复计算,提升代码简... 目录1. 在循环中避免重复计算2. 在条件判断中同时赋值变量3. 在列表推导式或字典推导式中简化逻辑