1.CAD内核:几何建模引擎分类
2.UE5 ModelingMode & GeometryScript源码学习(一)
3.opencascade环境配置教程|vs2019
4.WPF 漂亮长方体、何绘绘图正文体简单实现方法 Path实现长方体 正方体方案 WPF快速实现长方体、图源正方体的码何方法源代码
5.unity urp源码学习一(渲染流程)
CAD内核:几何建模引擎分类
几何建模引擎是3D建模系统的核心,用于精确表示产品三维形状并管理模型。源码用内核的何绘绘图价值在于为应用程序提供功能,CAD系统通过图形用户界面向用户提供内核功能的图源小型软件系统源码访问。世界上有几十个知名的码何数学内核,包括来自EDS的源码用Parasolid、Spatial Corp的何绘绘图ACIS、Matra Datavision的图源Open CASCADE,以及Thinkdesign、码何VX Overdrive、源码用KOMPAS-3D和CrownCAD等。何绘绘图
使用相同的图源内核,产品的码何功能和限制相似,主要区别在于用户界面。几何建模引擎分为三种类型:许可、专有和源代码形式提供。
许可内核由公司开发和维护,授权给其他CAD系统的用户。例如,Parasolid和ACIS内核广泛用于CAD,其中Parasolid是Unigraphics的核心,ACIS由Dassault Systemes开发。这两个内核在实体建模、混合建模和广义网格建模方面提供技术。
专有内核由CAD开发人员开发和维护,svm的源码专门用于其应用程序,提供更深入的集成。例如,Thinkdesign和VX Overdrive内核分别作为Think3和Varimetrix产品的基础。
源代码形式的内核允许用户拥有内核的源代码,便于定制。Open CASCADE和SMLib是著名的开源内核,前者免费,后者需要付费。
使用购买的核心成本包括在产品价格中,购买格式的导入导出模块需要额外费用。自定义内核成本较低,管理更灵活。购买核心并不意味着绝对可靠性,错误可以通过修改内核得到纠正。
CAD开发人员选择内核时需考虑成本、功能和集成深度。许可内核提供了广泛的兼容性和功能,但成本较高。专有内核集成度高,适用于特定需求,成本较低。源代码内核允许定制,但维护成本较高。选择哪种内核取决于CAD系统的特定需求和预算。工业公司购买CAD时,electron源码解析内核能力、打磨程度和成本都应考虑。多数情况下,企业会购买几个高级CAD工作站和数十个较便宜的许可证来满足不同设计需求。在某些情况下,所有工作场所都配备高级CAD可能在俄罗斯不可行。
UE5 ModelingMode & GeometryScript源码学习(一)
前言
ModelingMode是虚幻引擎5.0后的新增功能,用于直接在引擎中进行3D建模,无需外接工具,实现快速原型设计和特定需求的模型创建。GeometryScript是用于通过编程方式创建和操控3D几何体的系统,支持蓝图或Python脚本,提供灵活控制能力。
本文主要围绕ModelingMode与GeometryScript源码学习展开,涵盖DMC简介、查找感兴趣功能源码、动态网格到静态网格的代码介绍。
起因
在虚幻4中,通过RuntimeMeshComponent或ProceduralMeshComponent组件实现简单模型的程序化生成。动态网格组件(DynamicMeshComponent)在UE5中提供了额外功能,如三角面级别处理、转换为StaticMesh/Volume、烘焙贴图和编辑UV等。
将动态网格对象转换为静态网格对象时,发现官方文档对DMC与PMC对比信息不直接涉及此转换。通过搜索发现,源码怎么显示DynamicMesh对象转换为StaticMesh对象的代码位于Source/Runtime/MeshConversion目录下的UE::Modeling::CreateMeshObject函数中。
在UE::Modeling::CreateMeshObject函数内,使用UEditorModelingObjectsCreationAPI对象进行动态网格到静态网格的转换,通过HasMoveVariants()函数接受右值引用参数。UEditorModelingObjectsCreationAPI::CreateMeshObject函数进一步处理转换参数,UE::Modeling::CreateStaticMeshAsset函数负责创建完整的静态网格资产。
总结转换流程,DynamicMesh对象首先收集世界、变换、资产名称和材质信息,通过FCreateMeshObjectParams对象传递给UE::Modeling::CreateMeshObject函数,该函数调用UE::Modeling::CreateStaticMeshAsset函数创建静态网格资产。
转换为静态网格后,程序创建了一个静态网格Actor和组件。此过程涉及静态网格属性设置,最终返回FCreateMeshObjectResult对象表示转换成功。
转换静态网格为Volume、动态网格同样在相关函数中实现。
在Modeling Mode中添加基础形状涉及UInteractiveToolManager::DeactivateToolInternal函数,当接受基础形状时,调用UAddPrimitiveTool::GenerateAsset函数,根据面板选择的输出类型创建模型。
最后,UAddPrimitiveTool::Setup函数创建PreviewMesh对象,UAddPrimitiveTool::UpdatePreviewMesh()函数中通过UAddPrimitiveTool::GenerateMesh生成网格数据填充FDynamicMesh3对象,进而更新到PreviewMesh中。16200导航源码
文章总结了Modeling Mode与GeometryScript源码的学习路径,从动态网格到静态网格的转换、基础形状添加到输出类型对应函数,提供了一条完整的流程概述。
opencascade环境配置教程|vs
配置环境
对OpenCASCADE的配置教程,旨在帮助用户快速上手,解决配置过程中的常见问题。本文将详细覆盖获取源代码、编译、链接操作,以及处理环境配置时可能遇到的常见问题。欢迎提出疑问,共同探讨。
### 什么是OpenCASCADE?
OpenCASCADE是一个专为几何计算设计的C++库,提供Python和C++两种使用方式。它广泛应用于CAD领域,支持建模、计算以及文件输入输出,常见格式为.BRep。与CGAL相比,虽然都是几何计算库,但应用领域不同,OpenCASCADE在CAD行业中的知名度更高。
### OpenCASCADE类的继承关系
OpenCASCADE的头文件结构复杂,主要分为三类:GP、Geom、TopoDS。GP类包含基本单位,如point和vector;Geom类提供几何构型;TopoDS类用于复杂几何构型。GP类通过GC方法与Geom类交互,Geom类与TopoDS类通过BRepBuilderAPI实现转换。TopoShape类是形状的基类,其子类包括vertex、Edge、Wire、mesh、Solid等。
### 下载源代码
从官方网站下载OpenCASCADE源代码,推荐选择源码版本,并确保下载第三方库时选择x位。具体操作指南可参考相关文档。
### Visual Studio环境配置
配置Visual Studio环境,解决编译和链接问题。编译将源代码转换为obj文件,而链接则将多个obj文件与库文件合并生成可执行文件。lib文件包含目标代码,dll文件包含函数实现,pdb文件用于调试。
#### 编译和链接
编译阶段处理源代码语法、引用头文件的错误;链接阶段关注库文件的设置,确保正确路径和版本匹配。
#### lib、dll、pdb文件关系
lib文件包含静态库代码,链接时直接并入;dll文件为动态库,包含函数实现;pdb文件用于调试时显示源代码信息。
#### 编译错误和链接错误
编译错误主要在语法、头文件引用上;链接错误涉及库文件缺失、版本不匹配等问题。解决方法包括配置依赖库路径、添加lib和dll文件路径。
### 链接错误解决步骤
配置依赖库路径、添加准确的lib库文件、在调试器工作环境添加dll和pdb文件路径。使用Far Manager工具查找未识别的符号,通过十六进制函数名手动在Visual Studio中添加库名。
### 个人简介
本文作者为深圳在读研究生,研究方向为BIM/CIM,旨在分享配置OpenCASCADE的学习过程及问题记录。
### 参考链接
提供详细的操作指南和文档链接,以便用户深入学习和实践。
WPF 漂亮长方体、正文体简单实现方法 Path实现长方体 正方体方案 WPF快速实现长方体、正方体的方法源代码
在WPF中实现类似长方体视觉效果的图形,这段XAML代码采用了声明式绘制方法,利用Path、PathGeometry和PathFigure等元素,以一种清晰直观的方式精确描述了长方体每个面的位置和形状。无需复杂的绘图逻辑,通过Path元素的组合,实现了长方体视觉效果的高效实现。
通过Panel.ZIndex属性定义的层次结构与ZIndex控制,使得图形能够展现立体感和前后遮挡效果。设置负值的边框线条显示在表面之下,模拟了长方体的边缘效果,增强立体感。在颜色填充与样式定义上,通过Fill属性和Stroke属性,可以方便地定义各部分的颜色与轮廓线,实现复杂渐变、纹理等填充效果,以及不同宽度和颜色的线条,大幅增强了图形的表现力。
为了提高复用性和模块化设计,长方体可以被封装为一个用户控件或数据模板,将这些Path元素整合为一个可复用的组件,提升代码的组织性和维护性。动态调整与数据绑定特性使得所有几何路径点的坐标值能够作为动态属性进行绑定,根据运行时的数据变化自动调整长方体的大小和位置,实现动画效果或响应式布局。
由于使用的是标准WPF控件和属性,这段代码在Visual Studio或其他支持WPF的设计器中,能够直接预览和编辑长方体图形,大大提升了UI设计效率。WPF的强大矢量图形绘制功能及声明式编程模型,确保了代码的简洁性和视觉效果的高质量,同时提供了良好的扩展性。
unity urp源码学习一(渲染流程)
sprt的一些基础:
绘制出物体的关键代码涉及设置shader标签(例如"LightMode" = "CustomLit"),以确保管线能够获取正确的shader并绘制物体。排序设置(sortingSettings)管理渲染顺序,如不透明物体从前至后排序,透明物体从后至前,以减少过绘制。逐物体数据的启用、动态合批和gpuinstance支持,以及主光源索引等配置均在此进行调整。
过滤规则(filteringSettings)允许选择性绘制cullingResults中的几何体,依据RenderQueue和LayerMask等条件进行过滤。
提交渲染命令是关键步骤,无论使用context还是commandbuffer,调用完毕后必须执行提交操作。例如,context.DrawRenderers()用于绘制场景中的网格体,本质上是执行commandbuffer以渲染网格体。
sprt管线的基本流程涉及context的命令贯穿整个渲染流程。例如,首次调用渲染不透明物体,随后可能调用渲染半透明物体、天空盒、特定层渲染等。流程大致如下:
多相机情况也通过单个context实现渲染。
urp渲染流程概览:
渲染流程始于遍历相机,如果是游戏相机,则调用RenderCameraStack函数。此函数区分base相机和Overlay相机:base相机遍历渲染自身及其挂载的Overlay相机,并将Overlay内容覆盖到base相机上;Overlay相机仅返回,不进行渲染操作。
RenderCameraStack函数接受CameraData参数,其中包含各种pass信息。添加pass到m_ActiveRenderPassQueue队列是关键步骤,各种pass类实例由此添加至队列。
以DrawObjectsPass为例,其渲染流程在UniversialRenderer.cs中实现。首先在Setup函数中将pass添加到队列,执行时,执行队列内的pass,并按顺序提交渲染操作。