基于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/7/26 17:53:31 阅读更多 →
深入解析EPI接口寄存器:提升嵌入式系统外设访问性能的关键

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

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

2026/7/26 2:25:22 阅读更多 →
真实的现状 ·业务序列图-202606更新《软件方法》第4章

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

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

2026/7/27 3:03:37 阅读更多 →

最新新闻

轨道交通PIS系统工控主板选型指南(宽温高可靠工业级嵌入式硬件解决方案)

轨道交通PIS系统工控主板选型指南(宽温高可靠工业级嵌入式硬件解决方案)

随着城市轨道交通网络化运营持续推进,乘客信息系统(Passenger Information System, PIS)已成为地铁、轻轨等城轨车辆的标配系统,承担乘车信息播报、运营公告发布、商业媒体播放等核心功能。车载工况具有持续性振动、供电品质波动大、环境温变范围宽、电磁…

2026/7/29 0:02:24 阅读更多 →
KMS智能激活工具:一站式解决Windows和Office激活难题

KMS智能激活工具:一站式解决Windows和Office激活难题

KMS智能激活工具:一站式解决Windows和Office激活难题 【免费下载链接】KMS_VL_ALL_AIO Smart Activation Script 项目地址: https://gitcode.com/gh_mirrors/km/KMS_VL_ALL_AIO 还在为系统弹出激活提示而烦恼吗?KMS智能激活工具能够帮你彻底告别W…

2026/7/29 0:02:24 阅读更多 →
免费开源RPA工具OpenRPA:企业级自动化流程的终极解决方案

免费开源RPA工具OpenRPA:企业级自动化流程的终极解决方案

免费开源RPA工具OpenRPA:企业级自动化流程的终极解决方案 【免费下载链接】openrpa Free Open Source Enterprise Grade RPA 项目地址: https://gitcode.com/gh_mirrors/op/openrpa 你是否厌倦了每天重复枯燥的数据录入和报表整理工作?是否希望有…

2026/7/29 0:02:24 阅读更多 →
自律同行,突破无界!NANK南卡正式官宣曾舜晞成为品牌代言人

自律同行,突破无界!NANK南卡正式官宣曾舜晞成为品牌代言人

近日,国际专注开放式技术研发的声学品牌Nank南卡,正式官宣实力艺人曾舜晞担任品牌代言人。消息一经发出便轰动全网。为什么耳机品牌不选择流量明星、老牌歌手?而且是选择曾舜晞?让我们一起来探索一下!比起短期的流量&a…

2026/7/29 0:01:23 阅读更多 →
28. Agent 执行到一半想暂停?用 interrupt 给它设个“关卡“!

28. Agent 执行到一半想暂停?用 interrupt 给它设个“关卡“!

28. Agent 执行到一半想暂停?用 interrupt 给它设个“关卡“! 在构建复杂的 Agent 系统时,我们经常会遇到这样的场景:Agent 正在执行一个多步骤的任务,比如“下单购买商品”,但执行到一半时,我们…

2026/7/29 0:01:23 阅读更多 →
COMSOL仿真六角晶格BIC合并行为全流程解析

COMSOL仿真六角晶格BIC合并行为全流程解析

1. 项目概述:六角晶格BIC合并行为的COMSOL仿真全流程 在光子晶体和超材料研究中,边界连续态(Boundary-Continuum States, BIC)因其独特的非辐射特性和高品质因子备受关注。本项目通过COMSOL Multiphysics平台,完整复现…

2026/7/29 0:00:23 阅读更多 →

日新闻

【RT-DETR多模态创新改进】CVPR 2025 | 独家特征融合创新改进篇 | 引入RLAB残差线性注意力模块,有效融合并强调多尺度特征,多种改进点,适合红外与可见光融合目标检测任务,有效涨点

【RT-DETR多模态创新改进】CVPR 2025 | 独家特征融合创新改进篇 | 引入RLAB残差线性注意力模块,有效融合并强调多尺度特征,多种改进点,适合红外与可见光融合目标检测任务,有效涨点

一、本文介绍 🔥本文在RT-DETR多模态融合目标检测中引入RLAB残差线性注意力模块,可在不同模态特征交互阶段进行多次残差细化,使可见光、红外等特征在尺度、语义和空间位置上更好对齐;随后将细化特征与解码器输出拼接并生成Q、K、V,通过线性注意力自适应强化关键通道、目…

2026/7/29 0:00:23 阅读更多 →
AI编程系列02:合并知识功能,给 AI 问数和 RAG 场景打基础

AI编程系列02:合并知识功能,给 AI 问数和 RAG 场景打基础

AI编程系列02:合并知识功能,给 AI 问数和 RAG 场景打基础 在上一期「AI编程系列」中,我们学习了如何构建一个基础的 AI 问答系统,通过简单的输入输出让模型回应问题。但现实世界中的 AI 应用往往需要处理更复杂的场景:…

2026/7/29 0:00:23 阅读更多 →
AI智能体开发实战:从工具调用到企业级部署

AI智能体开发实战:从工具调用到企业级部署

1. 从被动问答到主动执行:AI Agent的范式转变过去两年,大语言模型最显著的应用形态是聊天机器人——用户提问,AI回答。但真正的生产力革命发生在2023年下半年:当AI学会主动调用工具完成任务时,生产力工具的历史被彻底改…

2026/7/29 0:00:23 阅读更多 →

周新闻

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 数据集6000张 完整源码已标注数据集训练好的模型环境配置教程程序运行说明文档,可以直接使用!系统支持图片、视频、摄像头等多种方式检测裂缝,功能强大实用。 1数据集6000张 8各类别

2026/7/28 12:04:22 阅读更多 →
深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

pubg数据集 精选原图1.42万数据 1.49万标签 无任何重复、算法增强或冗余图像! pubg绝地求生目标检测数据集 1分类:e_body,14905个标签,txt格式 共计14244张图,99%为640*640尺寸图像 适合yolo目标检测、AI训练关键词&am…

2026/7/28 8:29:16 阅读更多 →
Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex检测数据集数据集详情检测类别: allies enemy tag图片总量:7247张训练集:5139张验证集:1425张测试集:683张标注状态:全部已标注,即拿即用数据格式:支持YOLO格式及其他格式&#…

2026/7/28 5:03:42 阅读更多 →

月新闻