The Design of Model (part 1)

Ansys workbench几何建模- DesignModeler (2) DesignModeler建模:多体部件体 1 多体部件体的优势 多个零部件在多体部件体中能够共享拓扑,这个功能是DM的亮点,也是却别于其他CAD软件的特点之一。 2 多个零部件之间划分网格的比较 以两个接触的零部件为例 (1)单独划分 每个实体独立地划分网格,在接触面处的节点位置既不同也不共享 (2)布尔合并 通过布尔操作将两个零部件合成一个,划分网格,结果两个实体完全作为一个实体划分网格的... 阅读详情

The Design of Model (part 1)

仅供个人学习使用,请勿转载,勿用于任何商业用途。

 

 

 

           过去一段时间都做引擎设计,小有成果,过几天陆续整理出来,今天先发个引子吧. ^_^

           第一步当然是定义模型数据,有了模型,才方便做后续开发。通俗一点说,就是要创建model类。也许你会说XNA或者说DirectX已经有内置的model,为什么还需要自己写呢?如果你稍有经验,就会发现XNA内置的model功能是非常有限的,而且是密封类,无法进行扩展。几乎所有的商业引擎都有自定义的model类(可惜的是很少看到有文章介绍如何建立一个易用的Model类)。XNA和DirectX内置的model只是为了方便写一些小游戏而已。这并不是ms在偷懒,不愿意写一个更好的model,正如我们马上将看到,在编写这样一个类时,有太多选择,很难写出一个通用的模板。因此,下面设计的方案,不一定是最好,也不一定是最适合你的(当然,希望也不是最坏的),只是希望对你设计自己的Model有所启发。:)

         为了方便讨论,先介绍一些基本概念和术语。Model,指由一系列几何体组成的逻辑单元,比如一个人,一辆车。我们使用的大部分模型都将来自Maya或者3ds Max这样的建模软件,在模型师建模时,并不是一次就创建出一个完整的模型,而是把整个模型分成独立的小单元,分别建立,最后拼装到一起。比如把人物分作躯干,四肢,头部,手脚几部分来建立。这种组成模型的最小单元称为mesh part。初看起来这样的细分是没有必要的,但如果你希望每个部分能独立运动,比如车轮必须独立于车身旋转,那么就必须进行这样的细分,此外,对于不同材质的物体,也必须分开,比如车胎和内部的金属圈,就必须分为不同的mesh part。当建模软件导出模型数据时,每个mesh part都以自身的局部坐标来保存顶点的,比如,躯干以躯干中心为原点,定位所有点的坐标,手臂同样以手臂中心为原点,定位顶点坐标。这也就是很多人加载模型之后,发现模型都叠到一起的原因。所以,除了mesh part以外,还必须使用骨骼bone来表述模型的结构和mesh part之间的位置关系。简单的说,骨骼保存了相对于其父节点的位移或者旋转。显然,单一的骨骼并没有多少用,常见的是使用骨骼树,描述mesh part之间的结构关系。以人体为例,躯干为树的根节点,四个分支分别代表四肢,上臂有一个子节点,连接着前臂,前臂又连接着手掌,手指。显然,要获得手掌的坐标,就必须从躯干开始,依次加上上臂和前臂的坐标偏移。当然,对于某些特别简单的模型,比如一个盒子,一个mesh part就能代表一个model,自然也就不需要骨骼了。

          在建立你的模型时,至少有以下问题是需要考虑的:
1. 以什么方式保存模型数据,顶点数组,vertex buffer还是vertex buffer + index buffer,绘图用DrawIndexPrimitive,还是DrawPrimitive
2. 以什么方式组织数据,triangle list, triangle strip还是???
3. 组成同一model的mesh part分别拥有各自的vertex buffer,还是把所有mesh part数据打包为一个大的vertex buffer,通过索引区别每个mesh part?
4 同一模型的不同实例,共享顶点数据还是分开?
5. 是否支持LOD,如果支持,以什么方式获得LOD数据,运行时计算还是预处理?如何实现LOD过渡,如何保存LOD数据:把同一model的不同LOD作为独立的model,还是封装为一个?又如何控制LOD?
6. 模型将支持什么样的动画:骨骼动画,关键帧动画,morphing?动画在CPU还是GPU计算?
7. 模型是否需要骨骼,是否可以形变。
8. 如何处理材质信息。
9. 如何处理包围盒。
10. 是否支持instancing,支持哪种类型的instancing?
..............................

           当你真正动手编写一个引擎时,还有更多问题需要考虑,比如未来如何集成到scene graph里,如何裁剪,如何渲染等等,如果忽略了这些重要的元素,那么将来做后续开发时必然会出现很多问题。当然,并不是说你从现在开始就要周全的考虑好scene management,renderer等系统的设计,而是对将来高级系统如何使用低级类有大概了解,这也正是OOP里的依赖倒置原则。前段的所有问题都是实现细节,而这里,考虑的则是抽象。
          这里是一个理想的渲染器例子: 

foreach renderableObject in scene
    if(renderableObject is visible)
          Renderer.AddObjectToRenderQueue(renderableObject)

Renderer.SortAllOpaqueObjectByDistance();
Renderer.SortAllOpaqueObjectByMaterial();
Renderer.SortAllTransparentObjectByDistance();
Render.SortAllAllTransparentObjectByMaterial();

foreach material in Render.materalQueue
     material.Begin();
     foreach opaqueRenderableObject in Render.renderQueue
             renderableObject.Draw();
    material.End();

foreach material in Render.materalQueue
      material.Begin();
      foreach transparentRenderableObject in Render.renderQueue
               renderableObject.Draw();
       material.End();


       这几乎是最简单的渲染流程了,为了方便讨论,我省略了大部分细节。首先,我们从裁剪系统得到需要渲染的物体。接下来,为了尽量利用early-z cull的好处,把实心物体按照从前到后的顺序排序,为了尽量减少渲染状态改变,再把物体安材质排序。对于透明物体来说,为了获得正确的渲染效果,则需要按从后到前的顺序排序。

       这段代码虽然简单,也显示了一些核心的概念,首先,所有可渲染的物体都必须有一个同一的接口Draw,其次,应该把材质封装成独立的material对象。
       
(to be continue..............)

呃....不行了,瞌睡,瞌睡,天快亮了,先睡去+_+ Zzzz......

 

CATIA从草图到渲染:用Part Design和GSD创建擀面小人 三维CAD建模是工业设计和机械制造的基础技能,而参数化实体建模与自由曲面设计更是其中的核心。在CATIA中,Part Design(零件设计)与Generative Shape Design(创成式曲面设计,即GSD)分别承担规则实体与复杂曲面的构建任务,两者结合可以高效完成从概念到成品的完整建模流程。草图约束、旋转体、拉伸体、扫掠、布尔运算和圆角等基础操作,是打通这两个工作台的关键技术节点,也是工程实践中高频使用的功能。通过一个“擀面小人”卡通造型的完整建模案例,可以直观理解如何将实体建模与曲面设计协同运 阅读详情

相关推荐

别再纠结SolidWorks了!用FreeCAD 0.19.4的Part Design工作台,从草图到3D零件保姆级教程

本文提供FreeCAD 0.19.4的Part Design工作台从草图到3D零件的保姆级教程,帮助习惯商业CAD的设计师快速掌握开源工具。详细解析参数化设计流程、约束系统使用技巧,以及与SolidWorks等软件的关键差异,助力高效完成零件建模任务。

weixin_30876945的博客 660

第03章 模型创建-初识Design Modeler (梁、壳、实体模型建模)

第03章 模型创建-初识Design Modeler (梁、壳、实体模型建模) 1梁模型(线加截面) 第一步:进入dm 第二步:在xy平面上画一条1m长的直线。 点击z轴正视于x-y平面。 绘制直线草图: 设定直线长度1m 点击lines from sketch 生成线体 lines for sketches 草图生成线体。 生成了线体: 定义钢条的截面 cross section: 可以发现线体的 截面是没有定义的, 在concept里面定义横截面,选择长方体为截面

asd1103810477的博客 2万+

FreeCAD切割操作指南:从Pocket到布尔运算的完整流程

参数化建模是3D设计领域的核心技术,通过定义几何特征之间的数学关系实现模型智能更新。在FreeCAD中,基于草图的特征建模和实体布尔运算是实现模型切割的两种核心原理。特征建模通过Pocket功能在现有实体上减去草图定义区域,保持完整的参数化关联;布尔运算则通过Cut功能对独立实体进行空间减法操作,适用于复杂形状切割。这两种技术为机械设计、产品原型开发提供了灵活的模型编辑能力,特别是在3D打印和装配设计场景中,精确的切割操作直接影响成品质量。本文以FreeCAD的Part Design和Part工作台为例,系

weixin_34138056的博客 411

The Design of Model (part 2)

The Design of Model (part 2)仅供个人学习使用,请勿转载,勿用于任何商业用途。    继续上次的讨论,所有渲染器支持的对象都必须支持接口Draw,那么Draw应该实现哪些职责呢?由于已经把材质作为单独的对象来管理,所以Draw只需要完成2个任务:设置几何数据,绘图。下面是一个可能的Draw方法实现:Draw(){    graphicsDevice.V

Clayman的专栏 3303

FreeCAD参数化建模实战:从草图到复杂机械零件的完整流程解析

参数化建模是现代CAD设计的核心技术,它通过建立特征间的参数关联实现设计的智能更新。FreeCAD作为开源参数化3D建模软件,采用基于历史记录的建模原理,允许用户随时修改早期设计参数,系统会自动更新所有相关特征。这种技术价值在于大幅提升设计迭代效率,避免重复劳动,特别适用于机械设计、产品开发等需要频繁修改的场景。在实际应用中,通过草图绘制、特征建模、布尔运算等基础操作的组合,可以构建出复杂的机械零件。FreeCAD的Part Design工作台提供完整的参数化建模工具链,结合布尔运算和扫掠操作,能够高效完成

weixin_34331102的博客 343

Cadence库管理:原理图与PCB封装关联实战指南

在电子设计自动化(EDA)领域,库管理是确保设计数据一致性的关键技术。通过分层架构管理原理图符号与PCB封装数据,Cadence工具链实现了从逻辑设计到物理实现的精准映射。掌握CDS.lib配置、OLB/BRD文件关联等核心机制,能有效解决"cannot perform the operation"等典型报错。本文以工程实践为导向,详解焊盘设计规范、3D模型关联等实战技巧,特别针对BGA封装和STEP模型输出等高频需求场景,提供包含TCL脚本批量处理在内的完整解决方案。良好的库管理可提升30%设计效率,是应

weixin_34356555的博客 345

Provider Model Design Pattern and Specification, Part 1

转自:http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnaspnet/html/asp02182004.aspRob HowardMicrosoft CorporationMarch 2, 2004Summary: Rob Howard returns to Nothin But ASP.NET to

monkeyliu19801029的专栏 1004

VSCode+Keil高效开发STM32:Keil Assistant插件配置全攻略

本文详细介绍了如何通过VSCode的Keil Assistant插件,将Keil MDK的编译调试能力与VSCode的现代编辑体验相结合,打造高效的STM32开发环境。文章涵盖了从环境配置、工程导入、智能提示设置到与STM32CubeMX协同工作的全流程攻略,旨在解决Keil编辑器效率低下的痛点,大幅提升嵌入式开发的编码与项目管理效率。

gold的博客 507

Provider Model Design Pattern Part 1

  Related BooksThis column has been quiet for some time—sorry about that. I have a really, really good excuse, though: Weve been busy working on the next version of the Microsoft® .NET Fram

海豚宝宝的专栏——专注于企业项目管理系统的开发 1141

图灵奖:计算机科学领域的诺贝尔奖

最后,图灵奖也是计算机科学领域发展的重要推动力之一,它促进了该领域的进步和繁荣。图灵奖作为计算机科学领域的诺贝尔奖,不仅是对获奖者卓越贡献的肯定,更是对整个计算机科学领域的推动和激励。在未来的发展中,我们期待看到更多的科学家和团队在图灵奖的激励下不断取得新的突破和创新成果为计算机科学的发展注入新的活力和动力。Vinton G. Cerf和Robert E. Kahn:2004年图灵奖得主,由于他们在互联网方面开创性的工作而获奖,这包括设计和实现了互联网的基础通讯协议TCP/IP,以及在网络方面的卓越领导。

wangnvshibeib的博客 2626

计算机视觉-全景图像拼接中的特征匹配与优化策略

本文深入探讨了计算机视觉中全景图像拼接的核心技术,重点解析了特征匹配后的关键优化策略。通过SIFT特征提取、RANSAC算法剔除误匹配,并结合APAP算法应对视差与鬼影问题,详细阐述了从基础对齐到无缝融合的完整流程,为开发者实现高质量全景拼接提供了实用指南。

weixin_29039773的博客 361

ABAP Objects Design Patterns – Model View Controller (MVC) Part 3

转载自 By Naimesh Patel In this post, we will see how we can implement the Views which will access the Controller and model which is encapsulated in the controller. This post is in continuation of

zhanghua9948的专栏 507

MMI分束器仿真优化:用Lumerical FDTD实现95%耦合效率的实战技巧

本文详细介绍了使用Lumerical FDTD软件对MMI分束器进行仿真优化的实战技巧。通过构建高保真模型、精确配置光源与边界条件,并重点优化波导结构与taper设计,系统性地将器件的耦合效率提升至95%以上。文章还分享了利用参数扫描、varFDTD加速等高级方法,帮助硅光芯片设计工程师高效实现高性能MMI分束器设计。

rainy的博客 772

ABAP Objects Design Patterns – Model View Controller (MVC) Part 2

转载自 By Naimesh Patel In this post, we will see how we can implement the MVC (Model-View-Controller) design pattern in ABAP using the Objects. If you have not read the previous discussion about

zhanghua9948的专栏 577

Python实战:5分钟搞定滑动平均窗口计算(附完整代码+逐行注释)

本文深入解析Python中滑动平均窗口计算的实现与优化,提供Numpy、Pandas等多种高效方案,并附完整代码和逐行注释。涵盖边界处理、性能优化及异常检测等实战技巧,帮助开发者快速掌握时间序列数据处理的核心技术。

weixin_30872157的博客 124

[deprecated]第四章:TTM分析: 4.2.1 存储分配ttm_bo_validate功能实现分析

ttm_bo_validate是TTM框架中负责验证和调整BufferObject物理内存分配的核心函数,主要用于显存管理。该函数通过placement参数判断BO是否需要迁移或重新分配资源,完成内存分配、迁移及缓存策略调整等操作。实现流程包括资源释放、兼容性检查、迁移保护、新资源分配、迁移实现等步骤,支持多跳迁移和临时缓冲区。典型应用于显存溢出迁移、缓存策略调整、驱动初始化等场景,确保BO始终处于预期状态。

图形/计算GPU的驱动与虚拟化技术分享园地 839

Part 7: Adaptive MPC Design with Simulink and Model Predictive Control Toolbox

In this video, we’ll use adaptive MPC to autonomously steer acar whose lateral vehicle dynamicsis changing with time due to the varying longitudinal velocity. In the previous video, we discussed the linear lateral vehicle dynamics and assumed that the ca..

weixin_43332626的博客 1093

嵌入式Zephyr RTOS面试题及参考答案

在Zephyr中,为自定义外设编写Devicetree绑定(Bindings)有助于内核理解设备树中自定义外设节点的含义和属性。首先,需要创建一个.yaml格式的绑定文件,通常存放在目录下对应的子目录中,文件名应能反映外设的类型和功能。绑定文件的开头要定义基本信息,包括字段,用于简要描述外设的功能和用途;compatible字段,它是一个字符串列表,用于匹配设备树中自定义外设节点的compatible属性,设备树节点和绑定文件通过这个字段关联起来。接下来,要定义外设节点的属性。使用properties。

大模型大数据攻城狮的专栏 986

ABAP Objects Design Patterns – Model View Controller (MVC) Part 1

转载自 By Naimesh Patel | October 13, 2008 | ABAP Objects, OO Design Patterns  Today we will discuss about the Design Pattern: Model-View-Controller, which is also very famous by its abbriviat

zhanghua9948的专栏 481

一步一步教你如何安装IP-Guard(客户端WINDOWS篇)

1、安装完服务器后,在服务器右下角有一个IP-GUARD图标:如图 2、点图标右键选注册: 3、注册成功后, 4、在开始菜单里选生成客户端安装包。 5、生成客户端安装包成功,安装名字可以任意,但是最好是英文名字。 6、将客户端安装程序复制到桌面。 7、退出所有杀毒软件、安全卫士、电脑管家等然后运行 8、安装完成后,立即重启计算机。IPguard客户端安装完成。 9、这样在控制里就可以看到已经安装客户端的计算机,在线显示蓝色,灰色表示计算机已经离线货关机 ...

IP-Guard专栏 5621

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

Part 6: How to Design an MPC Controller with Simulink and Model Predictive Control Toolbox

In this video, we’ll use the MPC Designer app to design an MPC controller that autonomously steers a car in a lane change maneuver scenario. Let’s start by looking at the parameters of this system. The car’s global position is represented with respect to t

weixin_43332626的博客 945

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

Model View Presenter (MVP) design pattern close look – Part 1 (Supervising Controller)

Usually, usage of design patterns is associated with code executing in the lower tiers, but design patterns can be very usefully used in solving problems of the UI world too.Two of my architecture blo...

weixin_30609287的博客 247

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

Decision Modeling and Optimization in Game Design, Part 1: Introduction

The following blog post, unless otherwise noted, was written by a member of Gamasutra’s community. The thoughts and opinions expressed are those of the writer and not Gamasutra or its parent company.

wanglang3081的专栏 1191

Qt Model/View 编程深度解析报告

本文介绍了Qt框架中的Model/View架构,该架构通过分离数据与视图解决了传统GUI开发中的数据冗余和同步问题。文章首先分析了传统基于项控件的局限性,指出其数据耦合导致的维护成本上升。随后阐述了Model/View对MVC模式的改进,合并视图和控制器角色并引入委托机制,形成了Model/View/Delegate范式。 核心内容围绕三大组件展开: 模型作为数据抽象层,通过QAbstractItemModel标准接口统一访问各类数据源,提供QAbstractListModel和QAbstractTable

greenspan的专栏 2177

Model View Presenter (MVP) design pattern close look – Part 2 – Passive View

What is Model View Presenter?MVP pattern is one of the major patterns used for extracting business logic outside of UI elements and by that, enabling unit testing the UI without the need for using spe...

weixin_30656145的博客 239

Asp.net Design Pattern study notes -- PART 3

Transaction Script which isuseful in small project that has few business logic not complex to handle .     Active Record   For very small system , when DB modal is exactly likebusiness

我的英文站点:https://iorilan.medium.com/ 1294
上一篇: 游戏程序员养成计划
下一篇: The Design of Model (part 2)
soilwork
博客等级 码龄23年 290粉丝 116原创
评论 8
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值