- 博客(239)
- 资源 (29)
- 收藏
- 关注
原创 OpenGL OIT 之 Depth Peeling 实现(下篇):Shader 与关键代码实现
组成关键逻辑剥离 Shader— 用上一层的深度裁剪当前层混合 Shader极简——颜色传递,混合由完成最终合成— 累积颜色混合背景乒乓机制交替使用两个深度纹理提前终止查询 →→ break深度清除初始化0.0(最近),每层1.0(最远)
2026-06-04 16:56:41
189
原创 OpenGL OIT 之 Depth Peeling 实现(上篇):原理与架构
在上一篇中,我们介绍了通过逐像素链表在 GPU 内部收集并排序所有透明片段的方法。Depth Peeling(深度剥离)是另一种经典的 OIT 方案,它不依赖 SSBO 和原子操作,而是通过多次渲染 Pass 逐层剥离来实现透明排序。Depth Peeling 的最大优势是兼容性极好——它只需要标准的深度测试和 FBO,不需要任何 OpenGL 4.3+ 的高级特性(SSBO、Image Texture、Atomic Counter)。但代价是渲染 Pass 数与场景深度复杂度成正比。逐层剥离。
2026-06-04 16:56:01
182
原创 OpenGL OIT 之 Stochastic Transparency 实现(下篇):Shader 与关键代码实现
组成说明标准 MVP 变换,无特殊逻辑唯一核心:alpha → 随机样本掩码 →随机数经典 ShaderToy 随机frameID区分不同对象的随机种子,循环GL 状态渲染目标直接渲染到默认帧缓冲,无 FBOPass 数量1 个 PassStochastic Transparency 的代码量是三种 OIT 方案中最少的——核心 Shader 只有 26 行。它用概率论替代了精确排序,用 MSAA 硬件替代了手动混合,是"less is more"的典范。
2026-06-04 16:52:21
144
原创 OpenGL OIT 之 Stochastic Transparency 实现(上篇):原理与架构
在前两篇中,我们分别介绍了(通过 GPU 端链表收集排序)和(通过多次 Pass 逐层剥离)。这两种方案都是确定性的——每个像素的最终颜色是精确计算的。用随机化替代排序。它不精确,但实现极其简单,只需要一个 Pass 和一个 Shader。用概率替代排序,用 MSAA 替代精确混合。:逐样本控制片段覆盖,用 alpha 值作为概率MSAA 硬件:自动将样本平均为最终颜色,无需手动混合单 Pass 渲染:所有对象在一个 Pass 中绘制,深度测试处理遮挡随机种子。
2026-06-04 16:51:41
171
原创 OpenGL OIT 之 Linked List 实现(下篇):Shader 与渲染 Pass 代码实现
│ 共享opaqueFBO写入不透明物体的颜色和深度写入透明物体的颜色,但共享不透明物体的深度纹理这样 Pass 2 中透明物体的深度测试会比较不透明物体的深度,被遮挡的透明片段被正确丢弃同时确保透明物体不会污染共享的深度缓冲文件核心功能头插法将透明片段插入逐像素链表,使用分配节点 ID,原子更新头指针遍历链表 → 去重 → 插入排序 → Back-to-Front over 混合标准 Blinn-Phong 光照计算不透明物体。
2026-06-04 16:43:34
171
原创 OpenGL OIT 之 Linked List 实现(上篇):原理、流程与缓冲区设计
在 OpenGL 渲染中,透明物体一直是一个棘手的问题。传统的 alpha 混合要求物体从远到近排序绘制,但实际场景中物体之间可能有穿插、包含关系,无法简单地按距离排序。更糟糕的是,随着视角旋转,物体的远近关系会动态变化,每帧都要重新排序——这在 CPU 侧代价高昂且容易出错。OIT(Order-Independent Transparency,与顺序无关的透明度)就是为了解决这个问题而生的。基于逐像素链表的 OIT(Linked List OIT)。
2026-06-04 16:42:48
361
原创 OpenGL MSAA + 随机 Sample Mask 实现无序半透明渲染
传统半透明需要按深度排序再 Alpha 混合。本文说明一种无需排序——在 MSAA 的每个子采样上按纹理 Alpha「掷骰子」,用决定写入哪些子采样,再配合子采样级深度测试,最后由硬件Resolve平均得到屏幕像素。下文聚焦原理、关键着色器实现,以及本项目中里五行 OpenGL 状态在何时、何阶段起作用。问题答案原理是什么?Alpha = 子采样保留概率;mask + 深度 + Resolve关键代码在哪?quad.frag中循环五行 GL 状态何时设?init()一次,作用于之后每帧整条管线。
2026-06-02 14:56:13
333
原创 OpenGL 深度剥离 OIT关键技术、关键流程详解及实现
全流程、discard与深度测试分工、、Blend 阶段 GL 状态、fboPeel_颜色/深度角色、在管线中的位置、、层数上限等。
2026-05-25 17:34:03
396
原创 OpenGL中 为什么RBO 不能被着色器采样?
RBO 缺少纹理所需的采样状态(过滤、包裹、mipmap),且无法绑定到纹理单元,所以着色器无从知道「怎么去读这块内存」。它是为。
2026-05-19 16:46:08
220
原创 CMake / Make / Ninja / MSVC / GCC / Clang / MSBuild —— 完整体系化理解
CMake 是指挥者,Make/Ninja 是执行者,MSVC/GCC/Clang 是工具。CMake 生成构建系统,Ninja 执行构建,MSVC 编译代码。VSCode 下最佳组合:CMake + Ninja + MSVC。
2026-05-18 15:57:38
418
原创 VSCode + CMake + C++:配置文件体系完整说明
CMakePresets.json ←——— 定义如何配置/构建(Ninja + Debug/Release)↓tasks.json ——→ VSCode 调用 CMakePresets 构建↓launch.json ——→ 调试 CMake 构建出的 exe↓settings.json ——→ 控制 VSCode 的 CMake 行为。
2026-05-18 15:04:05
403
原创 OpenGL Geometry Shader
Geometry Shader(几何着色器)是OpenGL渲染管线中的一个可选着色器阶段,它位于顶点着色器(Vertex Shader)和片段着色器(Fragment Shader)之间。接收和处理图元:从顶点着色器接收点、线、三角形等图元动态生成几何:根据需要生成新的顶点,扩展几何复杂度变换图元类型:将一种图元类型转换为另一种实现特效:法线可视化、爆炸效果、粒子系统等。
2026-05-14 11:26:34
392
原创 OpenGL 离屏多重采样抗锯齿 (Off-screen MSAA)
在 3D 图形渲染中,你可能见过这样的问题:模型边缘出现明显的锯齿状条纹,俗称"狗牙"或"锯齿"。这不仅影响视觉质量,在高质量游戏或应用中尤为明显。抗锯齿技术就是用来解决这个问题的。本文将详细介绍 OpenGL 中各种抗锯齿技术的原理和实现方法。FXAA(Fast Approximate Anti-Aliasing)是由 NVIDIA 的 Timothy Lottes 开发的后处理技术,不是硬件级别的抗锯齿。│ 抗锯齿技术要点总结 ││ ││ 📌 锯齿原因:光栅化时像素只有"全有/全无" ││ │。
2026-05-12 17:56:47
341
原创 OpenGL 实例化渲染:构建小行星带 (Asteroid Field)
在游戏开发和实时渲染中,我们经常需要渲染大量相同的物体——比如一片森林中的树木、地面上散落的石子、天空中飘落的雪花、或者战斗场景中成千上万的粒子。这些场景如果用传统的绘制方式,每次绘制都调用一次或,性能会急剧下降。本文将详细讲解 OpenGL 中的Instancing(实例化渲染)技术,它能让我们用一次绘制调用渲染成千上万个物体。-0.05f, 0.05f, 1.0f, 0.0f, 0.0f, // 顶点0: 左上, 红色。
2026-05-12 16:25:40
579
原创 OpenGL 从内建变量到UBO
/ 定义 Uniform 块结构 # version 330 core layout(std140) uniform MatrixBlock {mat4 view;mat4 model;mat4 model;// 绑定到索引 0类别要点内置变量顶点用,片元用接口块用组织输入输出UBO实现高效 Uniform 管理这就是 LearnOpenGL Advanced GLSL 章节的核心内容。
2026-05-12 11:45:22
304
原创 OpenGL 数据管理
如果只是偶尔修改部分顶点:使用。如果要频繁大量更新(如每一帧):优先考虑配合非同步标志(Unsynchronized)。如果你追求极限性能(现代渲染架构):应转向结合持久映射(Persistent Mapping)和三倍缓冲(Triple Buffering)技术,这能让你在更新数据的同时不阻塞 GPU 的渲染流水线。
2026-05-12 10:48:03
309
原创 OpenGL Framebuffer及其附件使用详解
自定义帧缓冲区允许我们创建离屏渲染目标,将渲染结果存储到纹理或渲染缓冲对象中,而不是直接显示到屏幕。// 1. 创建帧缓冲对象// 2. 创建颜色附件纹理// 3. 创建深度和模板 RBO// 4. 检查 FBO 完整性// 5. 解绑帧缓冲附件对象(纹理或 RBO)附加到帧缓冲区(FBO)上。// 纹理附加到 FBO 的颜色挂载点// RBO 附加到 FBO 的深度/模板挂载点离屏渲染能力:将渲染结果存储到纹理中后期处理支持:在着色器中进行像素级操作。
2026-05-09 16:33:51
427
原创 OpenGL中Face culling 面剔除的具体实现
我们需要一个简单的向量结构体和点乘/叉乘运算。// 向量相减// 3D 叉乘 (用于计算法向量)return {// 点乘// 2D 叉乘 (用于屏幕空间判定,实际上是计算有符号面积)// 返回值相当于 z 轴分量顶点处理:顶点着色器运行完毕,顶点变换到裁剪空间。透视除法:执行除以www操作,得到归一化设备坐标 (NDC)。视口变换:将 NDC 映射到屏幕窗口坐标xy(x, y)xy。面剔除计算Sx2−x1y3−y1−y2−y1x。
2026-05-08 10:12:45
394
原创 OpenGL中Spotlight的聚光、衰减、柔和效果实现
/ 漫反射贴图// 镜面反射贴图// 光泽度(影响镜面高光大小)// 光源位置// 光照方向(聚光灯朝向)// 内锥角度(cos值)// 外锥角度(cos值)// 环境光颜色// 漫反射颜色// 镜面反射颜色// 衰减常数项// 衰减一次项// 衰减二次项用途说明控制高光锐度shininess越大,高光斑越小越锐利模拟真实材质金属、塑料等材质有不同锐度的高光输入:顶点位置、法线、纹理坐标、光源参数↓│ 1. 计算环境光 ambient │。
2026-05-06 10:55:43
214
原创 OpenGL 透视投影中 w 分量的获取及使用
在 OpenGL 中,w 分量是通过投影矩阵(Projection Matrix)变换得到的顶点着色器:计算自动变换:GPU 自动应用投影矩阵,设置齐次 w 分量透视除法:GPU 自动执行xyz / w,完成透视投影步骤说明1. 相似三角形xpn⋅xe−zexp−zen⋅xe,投影点与−ze-z_e−ze成反比2. 矩阵第4行设置00−1000−10,使得wc−zew_c = -z_ewc−ze。
2026-05-04 16:49:07
414
原创 OpenGL 为什么法线矩阵定义为“模型矩阵左上角 3x3 部分的逆矩阵的转置
问题原因为什么用逆矩阵?抵消模型变换,恢复正确的方向关系为什么用转置?法线是行向量,需要(M⁻¹)ᵀ来正确变换为什么取 3x3?法线是方向向量,不需要平移分量这就是法线矩阵的数学本质 —— 它确保法线在任何非均匀变换下都能保持与表面的正交关系。
2026-05-03 09:46:33
290
原创 OpenGL_VAO(Vertex Array Object)的主要作用
VAO提供了一种高效的方式来管理和使用顶点数据,使得OpenGL的渲染过程更加灵活和高效。通过将顶点属性的状态与具体的顶点数据分离,VAO让开发者可以更方便地管理渲染状态。
2026-04-30 14:56:47
67
原创 如何处理 Retina 显示屏下视口尺寸与窗口尺寸不一致的问题?
始终使用获取实际渲染尺寸使用处理尺寸变化这样代码可以自动适配 Retina 和普通显示器,无需针对特定平台编写特殊逻辑。
2026-04-30 09:19:06
230
原创 三维点云处理环境相关-ubuntu安装numpy、open3d
但发现文件不在了(常见原因:下载/解包不完整、缓存损坏、权限/临时目录问题、或包源异常)。(而且你提到“open3d open/一开就用/直接装好”这种意思),我建议走。不是 venv 里的那个解释器,就还会找不到 numpy。下面给你一套“一次装好 + 验证”的命令(从创建环境到测试)。“我已经装了 numpy”很可能是你把 numpy 装在。里了,但你现在运行用的是当前目录下这个。然后再执行你原本的安装命令(例如装。假设你的项目在当前目录(你也可以先。的输出发我,我就能准确判断该用。
2026-04-29 15:57:04
335
原创 vtkOpenGLRenderer 详细解析
│ vtkOpenGLRenderer 完整渲染流程 ││ ││ │ ││ ├─① 计算 IBL 纹理 ││ │ ├─ PBR LUT 表 ││ │ ├─ 预过滤环境 ││ │ └─ 球谐函数 或 辐照度 ││ │ ││ ├─② 选择渲染路径 ││ │ └─ 标准流程 ││ │ │ └─ 生成 GLSL uniform 声明 ││ │ │ └─ 更新着色器参数 ││ │ │ ││ │ ├─ 选择模式?│ │ ├─ 阴影模式?│ │ ├─ 标准模式 │。
2026-04-26 10:39:42
385
原创 vtkOpenGLCamera源码详解
/ 法线变换矩阵WCVC: 世界坐标 → 视图坐标(即模型视图矩阵)VCDC: 视图坐标 → 设备坐标(即投影矩阵)WCDC: 世界坐标 → 设备坐标(两者的组合): 用于正确变换法线向量(模型视图矩阵左上角 3×3 的逆转置)
2026-04-23 18:22:40
193
原创 vtkOpenGLProperty 详细解析
│ vtkOpenGLProperty 核心职责 ││ ││ ① 生命周期管理 ││ ├─ Render():准备渲染环境 ││ ├─ PostRender():清理状态 ││ └─ ReleaseGraphicsResources():释放资源 ││ ││ ② 面剔除(Culling) ││ ├─ 根据 BackfaceCulling 设置启用/禁用 ││ ├─ 设置剔除方向(前/后) ││ └─ PostRender 恢复,防止副作用 ││ ││ ③ 纹理管理 │。
2026-04-23 16:56:40
390
原创 ScopedValue 泛型模板类和 ScopedglDepthMask的 RAII 实现
│ RAII(资源获取即初始化) ││ ││ 获取资源(保存状态) in Constructor ││ ↓ ││ 使用资源(执行临时修改) in User Code ││ ↓ ││ 释放资源(恢复状态) in Destructor ││ ││ ✅ 异常安全(即使抛异常也恢复) ││ ✅ 自动化(不需要手动 restore) ││ ✅ 作用域绑定(清晰的生命周期) ││ │特性说明泛型基类统一管理所有状态特化类等继承并特化成员函数指针动态指向不同的恢复方法,实现灵活的 RAII。
2026-04-23 15:45:10
188
原创 vtkOpenGLActor详解
代码来源: vtkOpenGLActor.cxx其他相关文章:基于深度剥离的OIT• 这是一个连接 VTK 抽象渲染模型 和 OpenGL 硬件渲染 的关键桥接类。• 主要负责:管理自身的变换矩阵、法线矩阵、渲染状态,并驱动底层 OpenGL 绘制流程。## 📐 类的继承关系和角色🔧 数据成员详解1️⃣ MCWCMatrix - 模型坐标到世界坐标矩阵作用流程:为什么需要转置?这是因为:关键概念:为什么不能直接用 MCWCMatrix 变换法向量?图示:3️⃣ NormalTra
2026-04-23 15:35:15
366
原创 vtkTransform、vtkMatrix4x4、vtkTransformPolyDataFilter、vtkActor::SetUserTransform()区分
在 VTK(Visualization Toolkit)中,、 和 (或 的等效组合)都涉及几何变换,但作用层级、时机、目的和适用场景截然不同。下面从本质目的、执行阶段、数据流影响、线程安全性、性能与使用约束五个维度为你清晰对比: 和 是 VTK 中两个密切相关但职责完全分离的核心类,理解它们的区别是掌握 VTK 变换机制的关键。以下是精准、工程导向的对比(基于 VTK 9.x+ 源码逻辑与设计意图):
2026-04-21 09:35:05
373
转载 深入理解 vtkPolyDataNormals
是 VTK 渲染管线中的“美颜滤镜”。在医学图像开发中,正确配置Splitting和是获得高质量三维重建效果的关键。场景 A:器官重建(如心脏、肝脏)-> 关闭Splitting或增大,追求表面平滑连续。场景 B:骨科手术规划(如植入物、截骨导板)-> 开启Splitting,设置为 45 度左右,确保器械边缘清晰。
2026-04-20 17:39:54
40
转载 vtkPolyData 详解
vtkPolyData 是 VTK 中用于表示基于顶点的几何图形的基础数据结构。其继承关系如下:这种继承体系表明 vtkPolyData 具备了处理几何与拓扑数据的完整能力。从源码角度分析,其类定义位于中。
2026-04-20 17:27:02
31
转载 VTK管线中Modified() 和Update()的底层逻辑解析
在医学图像算法开发中,性能优化与数据一致性是核心诉求。VTK(Visualization Toolkit)是基于数据驱动(Data-Driven)的延迟计算(Lazy Evaluation)架构。理解Modified()Update()与Render()之间的协同关系,是避免重复计算、处理大数据量影像(如 4K CT 序列)的基础。动作作用耗时适用场景Modified()改变时间戳,声明对象已更新极低手动修改底层数据、自定义 Filter 开发Update()同步管线,强制生成结果数据。
2026-04-20 16:19:52
24
转载 vtkSmartPointer机制解析
不要混用智能指针:坚持使用VTK生态内的智能指针,避免双重所有权问题。理解引用计数时机:拷贝、赋值、析构操作都会影响引用计数。放心在构造函数中初始化:类成员变量的智能指针会正确管理生命周期,不会因为构造函数结束而意外释放对象。
2026-04-20 14:58:16
35
转载 VTK 与 OpenGL 渲染机制浅析
到此,我们可以完整地理解 VTK 的渲染过程。在 VTK 中,真正触发渲染的核心在于vtkMapper向上获取输入数据vtkMapper会从数据源(如)获取几何信息,并将其转换为 GPU 可识别的向下传递渲染设置vtkMapper会获取vtkActor和的属性(颜色、位置、相机参数等),并将这些信息转化为着色器可用的输入在上述过程中,我们可以直接自定义(例如三角形)。(立方体)(球体)(图片)这些类可以自动生成对应的,免去手动构建顶点和拓扑结构的步骤。
2026-04-20 14:29:15
64
原创 三维点云处理 1.4 PCA应用_法向量计算
法向量估计的数学定义为:输入:N维空间点集目标:寻找平面使各点投影到法向量n的数值之和最小平面中心点c为点集均值数据需中心化处理(xq = x - c)优化问题:最小化‖xq·n‖²。
2026-03-26 21:25:00
431
老毛桃winpe_U盘装系统图解.doc
2011-12-27
新浪微博备份SinaWeiboBackup.rar
2011-12-29
常见传输介质综合比较1.docx
2011-12-27
Your Uninstaller7.4.2011.12.rar
2011-11-19
红蜻蜓抓图精灵RdfSnap
2011-11-19
TuneUpUtilities
2011-11-19
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅