- 博客(1680)
- 问答 (1)
- 收藏
- 关注

原创 挑战数学文明的基石:进位才是压制人类发展的“二象金箔”
但我们是否想过,每一次“进位”,在看似拓展了数字表示范围的同时,也带来了一次认知上的复杂化和维度的损失?下一次,当你看到计算机屏幕上的代码,或是演算纸上的一串数字时,不妨这样思考:我们所运用的,究竟是宇宙的终极真理,还是仅仅是“进位文明”这个伟大囚笼中,一套自洽而完美的生存法则?“进位”这张“二象金箔”,在赋予我们强大计算能力的同时,也可能将我们的思维模式固化在了“层级”和“序列”的维度上。它是一把精巧的钥匙,打开了现代科学的大门,但或许,它同时也是一把坚固的锁,锁住了通往另一种未知文明范式的门。
2025-06-19 14:19:39
582
35

原创 对边界表示法的核心理解: 拓扑对象赋予了几何对象边界和范围
包前缀全称角色与职责类比示例gp_几何图元:最基础的数学元素,用于计算和定义。砖块、水泥、坐标尺gp_Pnt(点),gp_Vec(向量),gp_Dir(方向),gp_Trsf(变换)Geom_Geometry纯粹几何:定义理想化的、无限的几何形状(曲线、曲面)的数学方程。设计蓝图Geom_LineGeom_PlaneTopoDS_拓扑结构:描述几何体各部分如何连接,并赋予其边界。具体的建筑部件(顶点),(边),(面),(实体)BRep_边界表示工具:提供访问和查询TopoDS_对象及其关联。
2025-06-17 10:20:04
1810
23

原创 没有绝对完美的架构:架构因迭代而涅槃
一个在当前看来近乎完美的架构,随着时间的推移,外部技术的演进(新的语言、框架、中间件的出现)、业务需求的变更(市场扩张、用户行为变化)、以及系统内部复杂度的自然累积(代码的熵增),都可能使其逐渐变得臃肿、低效,甚至成为发展的桎梏。市场的反馈、运维的数据、开发团队的体验,都成为驱动架构演进的“选择压力”,促使其向更优的方向“突变”和“选择”。“涅槃”一词,本意指超越生死轮回的境界,在软件架构的语境下,它隐喻着架构通过不断的自我扬弃和重构,从旧的束缚中解脱,达到一种更高层次的适应性和生命力。
2025-05-08 19:30:41
376
12

原创 Qt故事会: 初识惊叹跨平台魔力 , 深入惨遭跨平台挑战
这就像是给了你一套能在各种道路上行驶的汽车零件(Qt),但如果组装汽车的人(原始开发者)按照越野车的标准加了很多只适用于崎岖山路的特殊装备(Windows 特有代码),那么当你想把这辆车开到平坦的公路上(移植到 Linux)时,就需要拆掉或改造那些特殊装备,这当然会很费劲。Qt 框架本身尽力提供了跨平台的基础,但如果最初的开发者没有严格遵守跨平台编码规范,大量使用了平台绑定的特性,那么后续的移植工作自然会非常痛苦,远非简单的“重新编译”就能解决。Qt 确实是一个强大的跨平台框架,它极大地简化了多平台开发。
2025-05-05 17:24:00
549
15

原创 QML对象更新机制与缓存问题的讨论
QML 很适合“首屏直观开发”,但一旦进入“动态组件管理阶段”,你必须自己设计组件的生命周期与状态控制机制,否则缓存机制会让你掉进“状态不同步”的坑里。用缓存要有意识;给组件设计 reset;不信赖生命周期钩子;优先重置,不轻言销毁;靠测试发现复用问题。
2025-05-01 20:42:52
990
12

原创 Qt界面流畅性的系统讨论: 多维度渲染性能优化
实际开发中应结合性能分析工具精准定位瓶颈,优先解决影响最大的问题(如算法复杂度从 O(n²) 优化到 O(n)),再逐步实施其他优化策略。四个维度提供系统化解决方案,涵盖从代码优化到硬件加速的完整技术链。,导致界面无法及时刷新(通常需保持 60 FPS)。合并多个绘制调用为单个调用(减少OpenGL状态切换)。强制固定刷新频率(如30 FPS)。仅保留最新数据,避免内存无限增长。降低数据密度,减少传输和计算量。合并高频刷新请求,避免冗余渲染。仅重绘界面中发生变化的区域。使用GPU硬件加速图形绘制。
2025-02-20 09:27:43
1381
37

原创 山外青山楼外楼 : 详解 Qt信号与槽的100种用法 (眼界篇)
在 Qt 信号与槽的应用中,基于其核心机制和可扩展性,理论上有无限种组合和变种。具体来说,常见的信号与槽用法和场景应用大约可以总结出以下 100 多种主要方式,分为几个大类:在自定义类中定义信号和槽,可以让你的类具备灵活的通信能力。2. Lambda 表达式作为槽在现代 C++(C++11及以上)中,可以使用 Lambda 表达式代替传统槽函数。这对于一次性处理或简化代码非常有用。3. 函数指针的使用Qt 5 引入了基于函数指针的信号与槽连接方式,比字符串形式更加安全和高效。4. 信号与槽的
2024-11-30 19:47:31
1721
38

原创 基于epoll ET模式 的 非阻塞IO服务器模型
你的这段代码整体设计非常扎实,目标明确——使用 `epoll` 的 **边缘触发 (ET) 模式** 实现一个高并发 TCP 服务器,模拟**接收小缓冲区**和**大数据压力**下的传输情景,细节处理得也比较完善,尤其是在非阻塞 I/O、缓冲处理和连接管理上都非常到位。即使你设了 `recv_buf[1]`,也可以把 `recv()` 调整为尽可能多地接收数据,比如设为 `recv_buf[512]`,然后 `memcpy` 进去,这样你仍然保有模拟小缓冲区的结构,但性能好很多。
2024-04-03 21:07:53
1060
18
原创 什么是深度缓存与模板缓存?
在将片段颜色写入颜色缓存之前,会先检查当前片段的深度值是否比深度缓存中已存储的对应像素的深度值更小(即离相机更近)。例如,一个24位的深度缓存和一个8位的模板缓存共同组成一个32位的深度-模板缓存。模板缓存同样是一块与屏幕像素一一对应的内存区域,但它存储的不是深度或颜色信息,而是一个整数值(通常是8位,0-255)。深度缓存是一块与屏幕像素一一对应的内存区域,它专门用于存储每个像素的深度值(即该像素位置对应的物体到摄像机的距离)。于是,用新片段的深度值更新深度缓存,并用新片段的颜色更新颜色缓存。
2025-08-27 12:19:10
429
4
原创 在 occt cad开发中 如何区分 观察工具 与 造型工具 呢?
用途主要模块特点造型BRep*Geom*gp*处理数学/几何,CPU密集,结果持久观察AIS*V3d*Graphic3d*处理显示/交互,GPU加速,可随时改变。
2025-08-27 10:31:52
316
1
原创 详解 Graphic3d_ClipPlane
是一个功能完备且设计精良的类,它不仅仅是一个数学上的平面,更是一个集几何定义、状态控制、视觉属性和性能优化于一体的图形对象。掌握它的使用方法,特别是剖切面(Capping)和平面链(Chaining)的特性,是开发高质量OCCT交互式应用的关键一步。换句话说,它是一种纯粹的、无损的视觉特效,而不是一个几何造型操作。特性(裁剪平面)布尔运算 (目的可视化、观察内部结构几何造型、创建新形状作用层面视觉层 (GPU渲染)数据层 (模型拓扑与几何)对模型数据的影响无影响,原始模型不变。
2025-08-27 10:27:00
1141
1
原创 修复 C4267: “参数”: 从“size_t”转换到“int”,可能丢失数据 的常用手段
因为裁剪平面数量很小,不存在溢出风险,代码简洁明了。
2025-08-27 10:07:40
398
1
原创 什么是时序数据库 ?
时序数据库是一种为了高效存储、处理和检索时序数据而特殊设计和优化的数据库。时序数据,顾名思义,就是按时间顺序记录的一系列数据点。每个数据点都和一个时间戳关联。时序数据库是为处理带时间戳的海量数据而生的一种专用数据库。它通过列式存储、高效压缩、时间分区等核心技术,解决了传统数据库在写入性能、存储成本和查询效率上的瓶颈,是监控、物联网、金融科技等领域的核心基础设施。简单来说,当你的数据是随着时间不断产生的,并且你需要高效地写入和查询它们时,时序数据库就是你最好的选择。
2025-08-26 16:31:42
288
5
原创 详细解析 glClearBufferfv 函数
glClearBufferfv 是 OpenGL 3.0 引入的核心函数,用于清除指定颜色缓冲区的特定绘制缓冲区为指定的颜色值。· 是否启用了颜色写入:glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE)· 对于颜色缓冲区:4个浮点数数组 [R, G, B, A],范围通常为 [0.0, 1.0]· GL_DEPTH:深度缓冲区(但应该使用 glClearBufferfi)· 对于多渲染目标(MRT):指定要清除的颜色附件索引(0, 1, 2…
2025-08-25 20:49:33
524
5
原创 c++ 被 static const 同时修饰的数组 有什么特性?
如果需要跨编译单元共享同一实例,考虑使用 extern const 并在一个 .cpp 文件中定义。· 在头文件中使用 static const 数组时,每个包含该头文件的编译单元都会获得自己的副本。· 内部链接(在命名空间作用域):只能在当前编译单元(.cpp 文件)内访问。这种组合特别适合用于那些在编译时已知且不需要修改的常量数据集合。· 无链接(在局部作用域):只能在声明的作用域内访问。· 静态存储期:数组在程序的整个生命周期内都存在。· 内存效率:只在数据段存储一份副本。· 数组元素不可修改。
2025-08-25 20:41:44
256
1
原创 Bun 是否能替代 Nodejs ?
Bun 自称是一个 “All-in-one JavaScript runtime”。这意味着它不仅仅想做 Node.js 所做的事(运行 JS/TS 代码),还想把前端和后端开发中常用的一大堆工具链(Toolchain)全部内置,并且做得极快。极高的性能:这是 Bun 最引人注目的卖点。它使用Zig这种低级系统编程语言编写,并采用了 Apple 的引擎,而非 Node.js 和 Chrome 使用的V8引擎。这使得 Bun 在启动速度、I/O 操作、包安装等方面都比 Node.js 快得多。
2025-08-24 21:51:39
295
5
原创 深度解析 OCCT OpenGl_ClippingIterator:裁剪平面的统一遍历器
内部将裁剪平面分为两组:全局平面 () 和局部平面 (如果外部代码(如渲染器)需要依次处理所有这些平面,它就必须先遍历一个列表,再遍历另一个列表,这会使代码变得复杂。通过封装这一复杂性,将两个列表“展平”成一个连续的虚拟序列。使用者只需要创建一个迭代器实例,然后使用标准的More()Next()Value()模式进行循环,就可以无缝地访问所有平面。可以把它理解成一个适配器或外观(Facade),它为复杂的内部存储结构提供了一个简洁的遍历接口。是一个优雅的辅助类 (Helper Class)
2025-08-24 21:35:21
360
3
原创 深度解析 OCCT OpenGl_Clipping 类:三维渲染中的裁剪与剖切状态管理
类的核心职责是管理一组裁剪平面的状态。在 3D 图形中,裁剪平面就像一把无限大的刀,可以切掉场景的一部分,只显示剩下的部分。全局平面与局部平面:区分应用于整个视图的平面和仅应用于特定物体的平面。启用与禁用状态:跟踪哪些平面是激活的,哪些是暂时或永久禁用的。剖切逻辑 (Capping):这是该类最复杂也最重要的功能之一。当一个实体被裁剪平面切割时,OCCT 需要在切口处生成一个新的面(称为 “Cap” 或剖切面)。类提供了专门的逻辑来辅助这个剖切算法,例如在特定阶段临时屏蔽或只启用某个特定的裁剪平面。
2025-08-24 21:32:29
408
原创 什么是 c++ POD类型(Plain Old Data)?
POD,全称(平凡旧数据类型),是 C++ 类型系统中的一个分类。顾名思义,POD 类型是一种“平凡的”、“老的”、像 C 语言里的结构体一样简单的数据类型。平凡(Trivial)和标准布局(Standard Layout)。一个类型要成为 POD,它必须同时满足这两个条件。特性平凡(Trivial)标准布局(Standard Layout)POD(两者兼备)核心意义可被底层内存操作(如memcpy)安全复制内存布局与C兼容同时满足两者关键要求使用编译器生成的默认特殊成员函数,无虚函数。
2025-08-23 19:31:19
859
1
原创 详解 glEnableVertexAttribArray
函数角色比喻定义数据规范接水管,规定水流启用数据流打开水龙头开关开始用水开始用水画画/冲洗。
2025-08-23 19:24:21
804
原创 Qt 什么样的按钮会有 toggled信号?
拥有toggled信号的按钮:所有可选中(checkable)的按钮,包括设置了的 QPushButton 和 QToolButton,以及天生的 QRadioButton 和 QCheckBox。何时使用toggled:当你关心按钮的选中状态(checked state)是否改变时,应该连接这个信号。这是最可靠的方式。何时使用clicked:当你只关心用户是否执行了点击操作,而不太关心状态如何变化时,使用这个信号。在实际开发中,如果您的逻辑依赖于按钮的“开”或“关”状态,使用toggled。
2025-08-22 13:46:05
545
33
原创 为什么片元着色器的扩展名是frag?
在图形渲染管线中,“frag”(或 “fragment”)被称为片元着色器,主要是因为它处理的单位是"片元"(Fragment)。这种命名方式强调了图形管线中"片元"这一中间状态的重要性,比"像素着色器"的表述更准确反映其实际工作阶段。顶点着色器处理几何数据,而片元着色器专门处理光栅化后的片元数据。// 这个片元可能最终不会显示在屏幕上。// 取决于后续的深度测试、混合等操作。// 片元着色器处理片元。
2025-08-22 12:07:30
388
1
原创 什么是OpenGL中的着色器变量?
在 OpenGL 中,是在着色器程序(使用 GLSL 语言编写)中使用的特殊变量,它们是实现 CPU 上的应用程序与 GPU 上的着色器之间,以及不同着色器阶段之间进行数据通信的关键机制。简单来说,它们是数据进出着色器这个小程序”的通道。着色器变量主要通过存储限定符(Storage Qualifiers)来定义其作用和数据流向。在现代 OpenGL (3.3+ Core Profile) 中,主要的限定符是inout和uniform。
2025-08-21 19:38:56
840
2
原创 详解OpenGL传递着色器
从本质上讲,着色器(Shader)是在GPU上运行的小程序,用于控制图形渲染管线的特定环节。传递着色器是这些程序中最简单的一种。顶点着色器 (Vertex Shader)的任务是计算顶点的位置。传递顶点着色器通常只是将输入的顶点位置直接输出,或进行一个极简的转换。片元/片段着色器 (Fragment Shader)的任务是计算最终屏幕上每个像素的颜色。传递片元着色器通常只是将输入的颜色或纹理值直接作为输出颜色。总而言之,传递着色器虽然代码极简,但它体现了渲染管线中“数据流动”的核心思想。
2025-08-21 12:18:13
979
1
原创 什么是片元着色器?
片元着色器(Fragment Shader),又称为像素着色器(Pixel Shader),是图形渲染管线中一个至关重要的高度可编程阶段。它在顶点着色器之后运行,其核心任务是计算并输出屏幕上每个“片元(Fragment)”的最终颜色。简单来说,如果说顶点着色器的工作是确定一个图形应该在屏幕的哪个位置,那么片元着色器的工作就是决定构成这个图形的每一个像素应该是什么颜色。片元着色器是现代实时图形渲染技术的核心,它为开发者提供了对最终图像像素级别颜色的强大控制能力。
2025-08-20 20:47:32
613
原创 什么是OpenGL顶点着色器?
OpenGL顶点着色器(Vertex Shader)是图形渲染管线中的第一个可编程阶段,它是一段在图形处理单元(GPU)上运行的小程序。它的核心任务是处理每个传入的顶点数据,为后续的渲染阶段做准备。通俗地讲,当您想在屏幕上绘制一个三维物体(例如一个三角形)时,您首先需要定义这个物体的顶点(角点)在三维空间中的位置。顶点着色器就是接收这些顶点坐标并对其进行处理的程序。对于场景中的每一个顶点,顶点着色器都会执行一次。总而言之,OpenGL顶点着色器是现代图形编程中一个至关重要的环节。
2025-08-20 20:41:13
581
1
原创 详解 OCCT OpenGl_Caps
对象,并修改其中的参数。视图在创建 OpenGL 上下文(Context)和进行渲染时,会读取这些参数,从而启用或禁用特定的图形功能、调整性能选项、或开启调试模式。这些标志主要用于测试和调试目的,在生产环境中通常应保持默认值(关闭),因为更改它们可能会严重影响性能。好的,我们来详细解析一下 Open CASCADE Technology (OCCT) 中的。简单来说,在初始化一个 OCCT 的 3D 视图(Viewer)之前,你可以创建一个。)管理的引用计数对象,符合 OCCT 的内存管理模型。
2025-08-19 20:24:18
957
原创 详解 OCCT OpenGl_Caps 构造函数
defined这个构造函数来自于这个开源的 3D 建模和 CAD 软件库。类封装了用于配置 OCCT 的 OpenGL 渲染引擎的各种参数和功能开关。这些设置决定了渲染的质量、性能、兼容性和调试行为。
2025-08-19 19:29:18
1256
1
原创 盘点 整体叶轮系统 三大部件
轮毂/轮盘是涡轮机械中位于叶轮中心的主体旋转部件,是叶片根部的安装和连接基础。围带是连接叶片顶部的环形结构,形成叶轮外缘的密封和约束系统。
2025-08-18 09:57:00
443
原创 从折角到完美光影:深入理解几何连续性G0、G1、G2
G2连续是更高一级的平滑标准。它在满足G1相切连续的基础上,进一步要求两条曲线或曲面在连接点处的曲率也是相同的。曲率可以理解为曲线弯曲的剧烈程度,曲率相同意味着在连接点两侧,曲线“弯曲的速度”是一致的。虽然在很多情况下,肉眼难以直接分辨G1和G2的细微差别,但更高等级的连续性对于产品最终呈现的品质感、光影美学和性能表现有着决定性的影响。G1连续在G0的基础上,要求两条曲线或曲面在连接点处不仅位置重合,而且切线方向必须一致。G0是最低级别的连续性,它只要求两条曲线或两个曲面的端点或边界完全重合。
2025-08-18 09:40:19
842
39
原创 glGenbuffers,glBindBuffer,glDeleteBuffers之间的联系
生成→绑定使用→删除释放它们共同实现了GPU内存的有效管理和使用遵循OpenGL的状态机设计模式,通过绑定来切换操作目标。
2025-08-17 20:11:09
355
1
原创 OCCT 什么是封盖平面?
3D 裁剪与封盖的概念裁剪平面 (Clipping Plane): 这把"刀",它定义了哪些部分要被切掉封盖平面 (Capping Plane): 切开后暴露的"切面",需要用一个平面来"封住"这个切口// 苹果被切开,出现空洞// 用平面封住切口解决实际问题: 为3D裁剪操作提供视觉完整性性能优化: 通过缓存和懒惰更新减少不必要的计算灵活性: 支持材质、纹理和着色器的继承和自定义数学严谨: 使用严格的线性代数算法确保几何正确性工程成熟: 遵循OCCT的设计模式和最佳实践。
2025-08-16 17:41:35
886
1
原创 详解经典的 模型-视图-投影 (Model-View-Projection, MVP) 变换流水线
注意矩阵乘法的顺序是从右到左(局部 -> 世界)(世界 -> 视图)(视图 -> 裁剪)这三个矩阵(M, V, P)通常在CPU端计算好,然后通过uniform变量传递给GPU上的着色器。GPU会对模型的每一个顶点执行这个乘法,从而高效地完成整个3D到2D的变换过程。
2025-08-16 17:24:34
1049
原创 详解 OCCT OpenGl_VertexBufferCompat 类
这是一个用于兼容旧版OpenGL(不支持VBO)的缓冲区兼容层模板类。
2025-08-15 19:26:12
501
3
原创 详解 OCCT OpenGl_Buffer 类
这是一个来自OpenCascade Technology (OCCT) 的类,用于封装OpenGL缓冲区对象(VBO/Buffer Object)。
2025-08-15 18:57:18
307
1
原创 OCCT OpenGl_BackgroundArray
继承自渐变背景(Gradient)纹理背景(Texture)立方体贴图背景(CubeMap)
2025-08-14 19:39:37
270
5
VScode间接性黑屏?
2021-02-27
TA创建的收藏夹 TA关注的收藏夹
TA关注的人