基于C++实现三维造型与渲染
♻️ 资源大小32.4MB➡️资源下载https://download.csdn.net/download/s1t16/87453204三维造型与渲染一、算法选型光线追踪(Ray Tracing) 光子映射(Photon Mapping)代码片段class RayTracer { unsigned max_dep; //最大追踪深度 unsigned light_quality; //软阴影质量点光源采样次数/面光源单位面积采样次数 double ambient; //环境光系数 Photonmap *photonmap; //光子图由PhotonTracer得到 Color trcDiff(HitInfo* info, Scene* scene, double ambient); //追踪漫反射光 Color trcRfle(HitInfo* info, Scene* scene, int dep, double decay); //追踪反射光 Color trcRfra(HitInfo* info, Scene* scene, int dep, double decay); //追踪折射光 Color Trace(const Ray ray, Scene* scene, int dep, double decay); //追踪光线ray public: RayTracer(); ~RayTracer(); void setMaxDepth(unsigned dep) { max_dep dep; } void setLightQuality(unsigned quality) { light_quality quality; } void setAmbient(double _ambient) { ambient _ambient; } Film* Run(Scene *scene, Sampler *sampler); //主循环 };class Photontracer { Scene* scene; Photonmap* photonmap; void PhotonTracing( Photon , int dep ); //追踪光子 bool PhotonDiffusion( HitInfo* , Photon , int dep , double* prob ); //光子漫反射 bool PhotonReflection( HitInfo* , Photon , int dep , double* prob );//光子反射 bool PhotonRefraction( HitInfo* , Photon , int dep , double* prob );//光子折射 public: void SetScene( Scene* input ) { scene input; } Photonmap* GetPhotonmap() { return photonmap; } void Run(); };效果展示二、附加功能1. 鱼眼镜头效果与广角镜头效果相机位于原点360 度拍摄具体来说将 camera 类与 sampler 类分离开通过 sampler 的派生类实现不同的镜头效果。Vector3 FishEyeSampler::point(int i, int j, int ss_i, int ss_j) const override { double u, v; if(n_SS 1) { u w * (2 * j ((double)(2 * ss_j 1) / w_SS)) / w_pix - w; v -h * (2 * i ((double)(2 * ss_i 1) / h_SS)) / h_pix h; } else { u ((double)(2 * j 1) / w_pix - 1.0) * w; v (1.0 - (double)(2 * i - 1) / h_pix) * h; } return Vector3( u, v, sqrt(1 - u * u - v * v) ); } Vector3 WideAngleSampler::point(int i, int j, int ss_i, int ss_j) const override { double u, v; if(n_SS 1) { u w * (2 * j ((double)(2 * ss_j 1) / w_SS)) / w_pix - w; v -h * (2 * i ((double)(2 * ss_i 1) / h_SS)) / h_pix h; } else { u ((double)(2 * j 1) / w_pix - 1.0) * w; v (1.0 - (double)(2 * i - 1) / h_pix) * h; } double phi sqrt(u * u v * v); return Vector3( cos(v) * sin(u), sin(v), cos(v) * cos(u) ); }2. 超采样抗锯齿(SSAA)sampler 类同时支持 SSAA效率有所牺牲代码见上3. 软阴影AreaLight 类分块采样PointLight 类通过抖动实现软阴影效果。下图为具有 4 个面光源的场景注意软阴影效果上述所有展示图中均有软阴影本场景的效果更为明显。代码片段light.hColor AreaLight::GetIrd(HitInfo * info, Scene * scene, unsigned quality) { int qualt_x_aera quality * area; if(qualt_x_aera 1) qualt_x_aera 1; Color result Color::black(); for(int i -2; i 2; i) for(int j -2; j 2; j) for(int k qualt_x_aera; k 0; --k) { Vector3 S((rand(i, i 1)) / 2, (rand(j, j 1)) / 2, 0.0); result raw_sum(result, CaQIrd(M * S, info, scene)); } result result / (qualt_x_aera * 16); return result; } Color PointLight::GetIrd(HitInfo* info, Scene* scene, unsigned quality) { Color result Color::black(); quality 4; for(int i quality; i 0; --i) { Vector3 S O Vector3::rand_unity() * jiggle; //抖动软阴影 result raw_sum(result, CaQIrd(S, info, scene)); } result result / (quality); return result; }4. 纹理贴图上述展示图中的棋盘格为图片纹理可更换为别的纹理图片。下图将纹理更换为木纹代码片段class Texture { public: int w_pix, h_pix; std::vectorColor map; Color at(double u, double v) { u * h_pix, v * w_pix; int i (int)u, j (int)v; u - i, v - j; if(w_pix * i j w_pix 1 w_pix * h_pix) return 0.25 * (map[w_pix * i j] * (1-u) * (1-v) map[w_pix * i j 1] * (1-u) * v map[w_pix * i j w_pix] * u * (1-v) map[w_pix * i j w_pix 1] * u * v); else return 0.25 * map[w_pix * i j]; } };5. 参数曲面实现了 Bezier 曲线回转体的求交但迭代时容易出现收敛到错解的情况导致噪点出现故未在最终展示图中添加。下图为一个单独的参数曲面材质具有一定透明度、镜面反射率可以看到仍有一些噪点存在。迭代过程如下////牛顿法迭代 《计算机图形学基础教程(第2版)》P107 int newton_cnt 0; do { dC_dt d_, dS_du dS_dt(u, v), dS_dv dS_dtheta(u, v); f (e_ t0 * d_ - S(u, v)); double D mix(dC_dt, dS_du, dS_dv); if(fabs(D) EPS) { t0 rand(-0.02, 0.02), u rand(-0.02, 0.02), v rand(-0.02, 0.02); --newton_cnt; dt 1; continue; } dt -mix(dS_du, dS_dv, f) / D; du -mix(dC_dt, dS_dv, f) / D; dv mix(dC_dt, dS_du, f) / D; t0 dt * newton_leap, u du * newton_leap, v dv * newton_leap; if(u EPS || u - 1.0 -EPS) u rand(0, 1), newton_cnt - 1; } while(f.length() 0.001 newton_cnt 10); if(f.length() 0.002 t0 EPS) break; //ok } if(f.length() 0.002 || t0 EPS) return false;附编译环境Visual Studio 2017 OpenCV-3.4.1-vc14_vc15编译选项Release x64

相关新闻

OPC中国:一个人可以靠AI做公司吗?AI时代个人创业的新商业模式是什么

OPC中国:一个人可以靠AI做公司吗?AI时代个人创业的新商业模式是什么

副标题:从"一个人"到"一个团队",AI正在重新定义个人创业的边界开篇:一个人、一台电脑、几个AI助手,真的可以创业吗?2025年,一个90后创业者,没有办公室,没有几十…

2026/10/17 5:01:10 阅读更多 →
深入解析EPI接口寄存器:提升嵌入式系统外设访问性能的关键

深入解析EPI接口寄存器:提升嵌入式系统外设访问性能的关键

1. 项目概述与核心价值在嵌入式系统开发,尤其是基于TI C2000、Tiva C等系列微控制器的项目中,与外部存储器或高速外设通信是一个常见且关键的需求。无论是连接一块大容量的SDRAM作为数据缓冲区,还是驱动一个高速的FPGA协处理器,亦…

2026/10/18 4:02:48 阅读更多 →
真实的现状 ·业务序列图-202606更新《软件方法》第4章

真实的现状 ·业务序列图-202606更新《软件方法》第4章

DDD领域驱动设计批评文集 做强化自测题获得“软件方法建模师”称号 《软件方法》各章合集 4.2 建模步骤A-4 建模待改进流程现状 4.2.1 建模步骤A-4-1 定位要建模的待改进组织流程 4.2.1.1 思路 目标组织有很多流程,建模人员需要根据愿景定位当前最值得建模的流…

2026/10/17 5:01:33 阅读更多 →

最新新闻

AI音乐检测核心参数与原理实战解析

AI音乐检测核心参数与原理实战解析

最近在给一个音频内容平台做审核技术升级,面对一堆AI生成的音乐,传统音频指纹完全没辙,只能从技术底层拆解AI音乐检测各个参数的作用和意义以及检测原理。这篇文章就是我从零开始搭检测系统的实战笔记,想给同样在做音频审核、音乐…

2026/10/18 16:05:21 阅读更多 →
VS Code+Python便携环境:U盘即开发工作站

VS Code+Python便携环境:U盘即开发工作站

1. 为什么需要一个真正“开箱即用”的VS Code Python便携环境?最近在某高校实验室带学生做嵌入式Python小项目,遇到一个高频痛点:学生自带笔记本配置五花八门——有的装了Anaconda,有的只装了系统自带Python,有的连pi…

2026/10/18 16:05:21 阅读更多 →
openSMILE-3.0-win-x64音乐特征提取实战指南

openSMILE-3.0-win-x64音乐特征提取实战指南

简介:openSMILE-3.0-win-x64安装包是面向音频信号处理、语音情感识别与音乐信息检索研究者的专业特征提取工具,专为Windows平台优化,开箱即用,免编译配置。资源共509个文件,涵盖128个说明文档(txt/html&…

2026/10/18 16:05:21 阅读更多 →
TCP传视频不丢帧:4字节帧封装协议实战

TCP传视频不丢帧:4字节帧封装协议实战

简介:本资源是一套基于TCP协议的跨语言视频/图像网络传输实践方案,面向计算机、人工智能、通信工程等专业的本科生及毕设开发者,解决多端异构环境下实时媒体数据可靠传输的核心问题。压缩包共5个文件,含2个Python脚本(…

2026/10/18 16:05:21 阅读更多 →
AI 时代的代码“自动驾驶”:用 TaoToken 统一 Key 打通本地脚本到 GitHub 的自动进阶

AI 时代的代码“自动驾驶”:用 TaoToken 统一 Key 打通本地脚本到 GitHub 的自动进阶

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/18 16:05:21 阅读更多 →
【开源】Windows PC上的AI自动化测试与业务处理神器 — WinClaw(Claude Code进化版)实战:把 settings 改到 TaoToken

【开源】Windows PC上的AI自动化测试与业务处理神器 — WinClaw(Claude Code进化版)实战:把 settings 改到 TaoToken

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/18 16:04:20 阅读更多 →

日新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/18 0:00:55 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/18 0:00:55 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/18 0:00:55 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/18 0:00:55 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/18 0:00:55 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/18 0:00:55 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/18 0:55:02 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/17 17:22:31 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/18 12:16:16 阅读更多 →