
图形几何之美
文章平均质量分 85
哈市雪花
图形几何、数据处理、并行计算相关研究和研发,公众号:哈市雪花,欢迎交流
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
添加捕捉吸附标识(使用QT+OpenGL开发三维CAD)
文章摘要:本文介绍了在QT+OpenGL开发三维CAD软件中实现鼠标捕捉吸附标识的技术方案。该功能通过setupSnap私有函数配置标识数据,扩展drawViewElement函数进行绘制,无需新增接口即可实现圆形边框的吸附标识效果。该方案优化了用户操作体验,使鼠标能自动吸附目标点,提高了设计精度和效率。文中展示了实现代码和效果图,并提及该功能是三维CAD开发系列课程的一部分。原创 2025-07-30 13:53:07 · 590 阅读 · 0 评论 -
支持编辑!让三维CAD内涵逐渐饱满,一起开发三维CAD
三维CAD软件的编辑功能开发取得新进展,实现了多种图形的交互式编辑能力。该功能支持线段、多段线、圆弧(两种绘制方式)、圆形、矩形等几何图形的端点编辑,并在编辑过程中提供实时预览效果。系统还引入了事务机制,支持撤销和重做操作,大大提升了设计过程的容错性和用户体验。开发者分享了编辑功能的操作视频,并讨论了基于当前成果的进一步开发方向。该软件已具备基本的三维绘图能力,可应用于设计图、逻辑图等场景,未来将通过功能扩展挖掘更多应用价值。原创 2025-07-26 12:15:42 · 745 阅读 · 0 评论 -
实现复制和预览:(使用OpenGL+QT开发三维CAD)
本文介绍了在三维CAD软件中实现复制功能的方法。通过OpenGL+QT框架,系统支持对线和构件的复制操作,包含完整的预览效果和命令提示机制。复制功能通过鼠标左键确定基点和目标点,利用ViewerSetting处理临时数据,并在渲染循环中绘制预览。文章还提到对DrawingComponentHolder的优化,改用指针存储元素以减少性能损耗。文末推荐了相关开发课程,并提供了开源代码供参考。原创 2025-07-21 16:52:05 · 1011 阅读 · 0 评论 -
撤销和重做!支持数据驱动的事务机制啦(使用OpenGL+QT开发三维CAD)
本文介绍了在GLViewer三维CAD软件中实现的数据驱动事务机制,支持撤销和重做功能。该机制以数据库为唯一可靠数据源,采用数据驱动更新理念,确保设计与显示同步更新。系统能完整记录操作动作,支持撤销和重做,提高设计容错性。文章阐述了事务机制的设计理念、服务对象(包括绘制、显示、文件操作等5类功能)及流程逻辑,并展示了部分接口实现。该机制已成功应用于多种操作类型的撤销重做,实现了可靠的工作流。原创 2025-07-18 13:10:58 · 1142 阅读 · 0 评论 -
通过交互绘制图片(使用OpenGL+QT开发三维CAD)
摘要:本文介绍了在三维CAD软件中交互式绘制图片的实现方法,基于OpenGL+QT框架。核心步骤包括:1)将图片资源添加到项目;2)通过QFileDialog选择图片并设置绘制上下文;3)复用drawLine命令的交互逻辑获取定位数据;4)在每个渲染循环中调用DrawImage函数完成绘制。关键技术点在于利用纹理贴图技术,并通过TryToSetup函数建立图片定位尺寸与渲染数据的桥梁。该方法实现了在三维场景中动态确定图片位置、大小和方向的功能,为CAD软件添加了图片绘制能力。原创 2025-07-18 13:00:01 · 869 阅读 · 0 评论 -
构件选中效果:通过自定义帧缓冲实现(使用OpenGL+QT开发三维CAD)
文章摘要:本文介绍了三维CAD开发中构件选中效果的实现方法。通过OpenGL自定义帧缓冲技术实现高效GPU Picking功能,详细讲解了选择帧缓冲的创建、绑定和查询机制。同时优化了着色器代码,改进了光照效果。还提出利用模板缓冲实现外轮廓亮显的选中效果。文章包含核心代码片段和效果展示,并提供了配套视频课程链接,帮助开发者从零掌握三维CAD开发的关键技术。原创 2025-07-14 12:03:26 · 767 阅读 · 0 评论 -
添加旋转中心标识(使用OpenGL+QT开发三维CAD)
本文详细介绍了如何在使用OpenGL+QT开发的三维CAD软件中添加旋转中心标识。主要内容包括:1) 通过类似ViewCube的绘制方法构建旋转中心标识;2) 实现世界坐标与屏幕坐标转换函数;3) 配置标识数据并设置纹理;4) 在渲染循环中调用绘制函数,通过偏移处理将标识显示在正确位置。该方法保持了高效渲染机制,并具有良好的可维护性和扩展性。最终效果是在旋转场景时能直观显示旋转中心位置,提升用户体验。文章还推荐了相关的视频课程,帮助开发者更深入学习三维CAD软件开发技术。原创 2025-07-11 21:43:06 · 896 阅读 · 0 评论 -
相机:以鼠标点为中心缩放(使用OpenGL+QT开发三维CAD)
摘要:本文介绍了三维CAD软件中实现以鼠标点为中心缩放的技术原理。通过动态调整相机位置和投影矩阵,保持用户鼠标聚焦点位置不变,达到视觉中心点聚焦效果。关键实现步骤包括:获取当前鼠标点对应的场景坐标,计算缩放后该像素的新场景坐标,并通过移动相机位置补偿坐标差值。这种方法在电影镜头和游戏设计中广泛应用,能有效提升用户交互体验。文章配套视频课程已上线,提供更详细的代码实现和原理讲解。原创 2025-07-10 20:49:16 · 1052 阅读 · 0 评论 -
视图立方体:ViewCube的绘制(使用OpenGL+QT开发三维CAD)
本文介绍了如何在3D场景中添加并实现ViewCube视图立方体功能。主要内容包括:1)创建处理纹理的着色器程序,包括顶点着色器和片段着色器;2)准备ViewCube纹理资源并将其添加到项目中;3)通过几何体生成和UV映射创建ViewCube模型;4)在渲染管线中实现ViewCube的固定位置显示,使其随视角变化同步旋转;5)添加鼠标交互功能,通过射线检测实现点击ViewCube切换视图的效果。该功能通过纹理贴图、坐标变换和交互检测等技术,为用户提供了直观的3D空间方位感知和快速视图切换能力。原创 2025-07-09 11:08:52 · 608 阅读 · 0 评论 -
开发三维CAD:实现框选和反选功能
本文介绍了三维CAD软件中框选和反选功能的两种实现方式。方式一通过预构建初始框数据并实时变换模型矩阵,减少了数据搭建但增加了计算量;方式二则实时计算框的位置和尺寸,提高了效率和准确性但接口更复杂。作者在GLViewer中采用方式二,并详细讲解了框选状态的逻辑流程,包括透视平截头体的空间判断和BSP树的应用。文章还提供了实现效果演示视频和相关课程链接,帮助开发者深入理解三维交互功能的设计与优化。原创 2025-07-05 17:38:27 · 619 阅读 · 0 评论 -
相机:Camera原理讲解(使用OpenGL+QT开发三维CAD)
本文讲解了三维场景中相机(Camera)的实现原理,重点介绍了如何使用OpenGL和QT开发三维CAD软件时的相机操作技术。文章从观察矩阵(viewMatrix)的构建出发,详细阐述了三种基本相机操作:通过调整FOV实现缩放效果、控制相机位置实现移动效果,以及利用欧拉角(Pitch/Yaw)实现旋转效果。特别强调了绕指定点旋转的实现方法,包括坐标转换和向量计算。最后介绍了光标绘制作为旋转中心的视觉提示,并提供了相关代码示例。文章指出这些技术通过操纵虚拟相机参数来产生场景变换的视觉效果,为三维交互提供了基础支原创 2025-07-04 13:26:40 · 844 阅读 · 0 评论 -
MSAA抗锯齿技术的不足和优化(PPAA)
《三维CAD开发课程》上线OpenGL/QT/C++系列教程。MSAA通过子采样提升精度,但存在边缘像素采样不足问题。课程提出结合后处理的迭代优化方案:利用模板测试和浅色边线二次绘制,实现边缘模糊效果,逼近视觉线性。该方案已在GLViewer中实现,提供参数调节功能。课程包含详细代码和视频讲解(B站/优快云),涵盖图形学核心内容,适合工业软件开发学习者。往期内容涉及几何内核、布尔运算等CAD开发关键技术。原创 2025-07-01 14:30:37 · 824 阅读 · 0 评论 -
OpenGL模板缓冲:实现亮显外轮廓效果
摘要: OpenGL的模板缓冲机制可实现三维组件的外轮廓亮显效果,用于突出显示选中对象。通过控制模板测试(GL_STENCIL_TEST)、设置模板函数(glStencilFunc)和操作(glStencilOp),先绘制选中组件并标记模板值为1,再放大绘制并将模板值不等于1的区域渲染为轮廓色。关键步骤包括:禁用深度测试标记模板、启用轮廓绘制、使用特殊片段着色器输出轮廓颜色。该方法广泛应用于三维软件的选择提示功能,课程《从零开发三维CAD软件》详细讲解了该技术的实现细节。原创 2025-06-25 17:55:37 · 637 阅读 · 0 评论 -
从零开发一款三维CAD软件:3.关于OpenGL
《从零开发三维CAD软件》教程正式发布,包含免费文档教程和付费视频课程。教程基于C++/QT/OpenGL技术栈,详细讲解三维软件开发全流程。重点介绍了OpenGL渲染管线原理,包括顶点着色器、几何着色器、片段着色器等核心概念,以及VAO/VBO/EBO等数据传递机制。教程采用现代OpenGL核心模式开发,摒弃了传统固定渲染管线,强调灵活性和性能优化。配套资源包含完整代码、开发工具使用指南和环境配置说明,帮助开发者系统掌握三维图形编程技术。原创 2025-06-23 16:44:23 · 853 阅读 · 0 评论 -
从零开发一款三维CAD软件:2.Hello Widget
本文介绍了一套三维CAD软件开发教程,包含文档和视频两种形式。教程从环境搭建开始,详细讲解了使用Qt和OpenGL创建GLViewer项目的过程,包括CMake配置、Widget类创建、OpenGL窗口设置以及关键虚函数的重写方法。文中特别指出项目中头文件包含可能出现的报错问题,并提供了在CMakeLists中指定搜索路径的解决方案。教程资源部分免费开放,部分付费内容可在优快云和B站获取,旨在帮助开发者系统掌握三维CAD软件开发技术。原创 2025-06-23 16:37:25 · 375 阅读 · 0 评论 -
从零开发一款三维CAD软件:1.QT+OpenGL开发环境搭建
本文介绍了基于C++/QT/OpenGL的三维CAD软件开发教程资源,包含免费文档教程和付费视频课程。教程详细讲解了开发环境搭建的7个必备组件:Visual Studio 2022、CMake、QT(提供国内镜像)、mingw-w64、ninja、vcpkg和Git,并给出了官方下载链接和关键环境变量配置说明。该课程通过文档+代码+视频的多维教学方式,帮助开发者掌握三维软件开发技能,所有文档和代码均免费开放。原创 2025-06-23 16:31:59 · 443 阅读 · 0 评论 -
拥抱工业软件潮流:从零开发一款三维CAD软件
本文介绍了基于QT、OpenGL和CGLib开发的轻量级三维CAD软件GLViewer,分为上下两部分课程。课程免费提供文档教程和代码,付费可观看配套视频教程。上篇涵盖环境搭建、渲染管线、UI界面等基础内容,下篇将深入讲解高级功能。该软件支持二维/三维数据展示、交互式绘图、参数化命令系统、文件读写、几何计算(轮廓提取、布尔运算等)及图层管理。需要C++基础,建议具备OpenGL和QT知识。课程代码开源,CGLib算法库需根据文档下载。原创 2025-06-23 16:24:20 · 779 阅读 · 0 评论 -
平面与平面相交算法杂谈
空间平面方程:空间两平面如果不平行,那么一定相交于一条空间直线,空间平面求交有多种方法,本文进行相关讨论。原创 2025-02-13 19:21:55 · 1240 阅读 · 0 评论 -
关于精度话题的杂谈
浮点值的存储、运算都可能会带来精度损失,了解精度损失背后的机制原因方便我们更好的了解什么情况下会发生精度损失、什么情况下精度损失较大,以及思考怎么避免或减少精度损失。原创 2025-02-09 17:50:18 · 810 阅读 · 0 评论 -
点(线)集最小包围外轮廓效果赏析
作者基于递归迭代求解实现点集的最小外轮廓计算,在CGLib库中实现,已集成于CGViewer,可联系作者试用,欢迎提出宝贵意见。下图为CGViewer中绘制、计算和显示效果,原创 2025-02-06 21:35:30 · 533 阅读 · 0 评论 -
两种精度较高的三点定圆算法
化繁为简,追求数学公式简洁之美往往能保持较高得计算精度。上述算法实现已集成进博主开发得CGLib库中,效果请参考微信公众号,欢迎关注交流。瞅瞅迷你CAD可以长什么样?开发一款迷你CAD专注于图形几何、数据处理、并行计算技术,欢迎交流。原创 2025-01-24 20:00:00 · 766 阅读 · 0 评论 -
图形几何之美系列:线段集合中提取轮廓
以前用过相关的库,忘记名字了,记得是构造了TopoPolygonTree,可以获取最大外轮廓,以及构成该最大外轮廓的其他轮廓,而内部轮廓是以树的形式表示,每个树节点是一个轮廓,树节点的深度(node.deep % 2 == 0?outer : inner)代表其是外轮廓还是内轮廓。重新研究实现,进行代码的测试和问题修改,简单记录如下。原创 2024-12-18 18:19:19 · 1018 阅读 · 0 评论 -
网格剖分算法 & 铺装填充算法效果
原图--》提取轮廓线--》计算最小外包轮廓--》网格剖分--》铺装填充。奇奇怪怪的图形几何算法,欢迎交流。原创 2024-12-17 17:52:29 · 435 阅读 · 0 评论 -
图形几何之美系列:铺装算法效果赏析
调整tile的尺寸和铺装范围,像更加精美的艺术图案,可以作为logo或图标,赋予了艺术和数学之美~图案变得更具艺术感~电视机?一切皆可铺装,像纹理填充一样。嘿嘿,不咋炫酷的轮廓,也变得更加艺术,色彩之美跃然于眼眸~狗子像穿了一件精心织就而成的纹理衣饰,变得抽象起来~轮廓铺装:地板铺装、墙砖铺砖、吊顶铺装、图案填充。可以用铺装算法,使得设计和艺术变得更有创造力。你知道怎么设置地砖排布吗?有一块布料,怎么填充好看的纹理?原创 2024-12-14 21:43:52 · 271 阅读 · 0 评论 -
项目使用bullet库编译时遇到Error LNK2001的解决方案
bullet库作为物理引擎提供很强大的功能,其目标是游戏场景的物理分析,包括碰撞、动力等方面,具有广泛的应用。参考上述步骤执行,目的是编译bullet库、编译项目时该宏的定义保持一致,因为btScalar会被bullet导出接口的变量使用,如btVector3、btVector4等,避免项目对该变量的理解和bullet编译时赋予的意义不一致。原创 2024-12-02 19:31:21 · 758 阅读 · 0 评论 -
图像处理 之 凸包和最小外围轮廓生成
最小包围轮廓之美一起来欣赏图形之美~原创 2024-11-18 23:13:08 · 521 阅读 · 0 评论 -
图形几何之美系列:二维凸包艺术赏析
凸包话题包括二维凸包、三维凸包以及高维凸包。对于平面点集,探究如何构造可以覆盖给定点集最小的凸多边形;对于三维空间点集,探究如何构造可以覆盖点集的最小凸实体;凸包的计算和应用还可以扩展到高维空间,用于解决更复杂的几何问题。作者实现的完整实现了二三维凸包算法,相关技术文章和参考作者优快云博文,本文仅对二维凸包效果进展展示和赏析,和大家一起领略图形几何之美~提示:作者优快云博文1. [凸包计算]求解点集合的凸包轮廓2. 几何算法系列-三维凸包。原创 2024-11-16 21:17:55 · 801 阅读 · 0 评论 -
图形几何之美系列:法向量计算之轮廓有向面积辅助法
有多种方法可计算轮廓的法向量,如根据轮廓类型进行法向量的计算、轮廓有向面积辅助法、Newell向量法等。如上文多边形轮廓面积计算中的内容所述,轮廓的法向量和面积密切相关,我们常说的法向量为单位法向量,而模长等于面积的法向量是多边形轮廓多维度的几何和物理属性,更能表达轮廓的几何特征。图:轮廓法向量需要注意的是由于浮点数存储和运算的精度损失,可能造成求轮廓法向的精度损失,如角点由于精度损失并非精确的在一个平面上(而是在容差范围内属于一个平面)、角点距离很近导致可能进一步影响法向计算的精度等。原创 2024-11-15 21:45:00 · 1063 阅读 · 0 评论 -
图形几何之美系列:面积计算之梯形投影求和
一种常用的是微积分思路的分段求和办法是将组成轮廓的每条线段与X轴或Y轴进行有向投影,轮廓边线与X轴或Y轴的投影之和即为轮廓的有向面积。原创 2024-11-12 23:07:14 · 1062 阅读 · 0 评论 -
图形几何之美系列:仿射变换矩阵之Y-Up和Z-Up
所有的3D工具都包含一个具有X、Y和Z轴的三维环境。在这些工具中,X轴方向是相同的,即在前视图是从左到右的水平线。然而, 不同的 3D 工具可能对Y轴和Z轴的朝向有不同的解释。一些3D工具是Y-Up的, 即Y轴是竖直方向的;而其他的3D工具是Z-Up的, 即Z轴是竖直方向的。原创 2024-11-11 21:34:31 · 534 阅读 · 0 评论 -
图形几何之美系列:仿射变换矩阵之先转后偏
如果一次仿射变换中存在多种类型的姿态变换,需要先进行矩阵左上角的3X3部分(缩放、旋转、镜像、非均匀变换)的构造处理,最后再叠加偏移。这是我们从一些书籍或老司机口中得知的重要经验,大白话就是“先转后偏”,那么为什么要这样呢?先偏后转不行吗?还是先转后偏有其不可忽略的独门绝技?如果先偏移,则需要基于偏移值的坐标点进行矩阵左上角3X3部分的构造,这将变得复杂的多,这对于大多数人来说不可接受,毕竟我们很多时候要做的是化繁为简,同时提高精度。下面我们对比下先转后偏和先偏后转的特点和区别。原创 2024-11-11 21:29:00 · 1330 阅读 · 0 评论 -
图形几何之美系列:仿射变换矩阵(二)
在几何计算、图形渲染、动画、游戏开发等领域,常需要进行元素的平移、旋转、缩放等操作,一种广泛应用且简便的方法是使用仿射变换进行处理。相关的概念还有欧拉角、四元数等,四元数在图形学中主要用于解决旋转问题,特别是在三维空间中绕任意轴的旋转,且四元数与仿射变换可以相互转换。。本篇我们继续进行探索,包括等内容。原创 2024-11-10 17:03:15 · 1214 阅读 · 0 评论 -
图形几何之美系列:仿射变换矩阵
仿射变换是一种结合了线性变换和平移的变换,不仅包括旋转、缩放等线性变换,还包括平移操作。变换前是直线的,变换后依然是直线;直线比例保持不变。仿射变换可以用形如下图的4x4矩阵表示,即仿射变换矩阵。图:4x4矩阵注意如果没有特殊说明,本文所述仿射变换矩阵皆为矩阵乘列向量/点方式的,即把向量和点作为4x1矩阵参与运算,如下图所示。原创 2024-11-09 14:03:20 · 1533 阅读 · 0 评论 -
图形几何之美系列:三维实体结构表达
实体结构的表达由多种方式,如分解表示、构造表示**CSG**(Constructive Solid Geometry)、边界表示**BRep**(Boundary Representation)、网格表示等。常见的分解表示法有四叉树、八叉树、BSP树等方式。CSG方式出现较早,后来出现了BRep普及比较快,现在大部分领先的几何内核(ACIS、PS、OCC等)采用BRep方式,有关两者的优缺点和适用场景比较的讨论已有很多,本文不再赘述。原创 2024-11-07 20:30:00 · 1091 阅读 · 0 评论