CN108734788A - 一种3d对象在虚拟场景中的节点化组织方法 - Google Patents
一种3d对象在虚拟场景中的节点化组织方法 Download PDFInfo
- Publication number
- CN108734788A CN108734788A CN201810475996.XA CN201810475996A CN108734788A CN 108734788 A CN108734788 A CN 108734788A CN 201810475996 A CN201810475996 A CN 201810475996A CN 108734788 A CN108734788 A CN 108734788A
- Authority
- CN
- China
- Prior art keywords
- node
- rotation
- scale
- coordinate system
- tree
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T19/00—Manipulating 3D models or images for computer graphics
Landscapes
- Engineering & Computer Science (AREA)
- Computer Graphics (AREA)
- Computer Hardware Design (AREA)
- General Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- Processing Or Creating Images (AREA)
Abstract
一种3D对象在虚拟场景中的节点化组织方法,针对3D对象在场景中进行节点化的过程中所涉及的节点对象的三个属性位置(position)、旋转(rotation)、缩放(scale)以及局部坐标系(Local)和世界坐标系(World)进行处理,局部坐标系表示节点对象相对于父节点对象的位置、旋转以及缩放,世界坐标系表示节点对象在3D空间中的实际位置、旋转以及缩放;所述3D对象在虚拟场景中的节点化组织方法包括对节点对象进行定义、对节点进行渲染处理对新生节点的处理、将一个节点树分支下的子节或者子节点树移动到另一个节点下的处理四个部分。
Description
技术领域
本发明涉及计算机图形技术领域,具体来说,3D对象在虚拟场景中节点化组织方法的技术实现。
背景技术
3D场景中组织虚拟节点的一种方式是扁平化的组织方式,即所有的节点处于平行位置,相互之间没有父子关系,修改一个节点的属性不会影响其他节点,由于这种组织方式计算量相对较少,也不用考虑其他节点的变化带来的一些额外的判断(通常是由节点的不均等缩放造成的矩阵计算问题),所以一般的模型展示引擎普遍采用这种组织方式,但是这种组织方式的缺点也同样明显,在大型复杂环境下,对象与对象之间存在明显的层级关系,如餐桌上的茶杯,这时如果要正确的让茶杯随着餐桌一同运动,则需要分别设置餐桌对象和茶杯对象的属性才能并且在设置茶杯的属性时还需要考虑餐桌的运动才能呈现出正确的效果,这样对于有复杂层级关系的大型应用来说是致命的,而且现有技术只在PC端3D引擎中实现,所以为了应对复杂的场景应用,需要设计一套能够处理复杂层级关系的场景组织方法,实现节点对象在节点树中变化后渲染形态一致的技术。
发明内容
为了达到上述目的,本发明提供一种3D对象在虚拟场景中的节点化组织方法,针对3D对象在场景中进行节点化的过程中所涉及的节点对象的三个属性位置(position)、旋转(rotation)、缩放(scale)以及局部坐标系(Local)和世界坐标系(World)进行处理,局部坐标系表示节点对象相对于父节点对象的位置、旋转以及缩放,世界坐标系表示节点对象在3D空间中的实际位置、旋转以及缩放;所述3D对象在虚拟场景中的节点化组织方法包括对节点对象进行定义、对节点进行渲染处理对新生节点的处理、将一个节点树分支下的子节或者子节点树移动到另一个节点下的处理四个部分;其中,对节点对象进行定义,包括如下几个步骤;
s11、用position、rotation以及scale分别表示节点对象在世界坐标系下的位置、旋转以及缩放;
s12、用localPosition、localRotation、localScale分别表示节点对象在局部坐标系下的位置、旋转以及缩放;
s13、节点对象通过_parent属性设置其父节点,通过_children数组索引其子节点,以建立节点数的双向链表,保证从任意一个节点可以遍历到整颗节点树;并且提供了iterateUp以及iterateDown调用分别用来从当前节点向上遍历到场景节点树的根节点,以及向下遍历该节点的所有子节点;
对节点进行渲染,是通过分别计算出节点的position、rotation、scale属性值来组成矩阵传给渲染引擎进行渲染实现的;其中,position、rotation、scale的计算均需要调用iterateUP遍历其所有父节点通过localPosition计算出最终的position、rotation和scale,切rotation的计算需要使用四元数;
对新生节点的处理,具体方法为将新生成的节点对象加入到已经存在的节点对象下作为其子节点,每一个节点对象均实现了一个名为addChild函数,addChild函数将新节点对象的position、rotation和scale与它的父节点的position、rotation和scale进行运算,其中position与scale运算只需要进行一个除法运算即可得到新节点的localPosition、localScale,对于rotation则需要使用四元数进行运算得到新节点的localRotation,然后再将新节点要挂载的节点作为其_parent属性,将新节点加入到挂载节点的_children当中,这样就建立了一颗新的节点树;
将一个节点树分支下的子节或者子节点树移动到另一个节点下的处理,具体方法为在移动节点时纪录下该节点的position,rotation和scale,然后在挂载节点时将数值赋值给相应的属性即可,其中,这个过程中要保持节点及其子节点的position,rotation和scale不变,具体是将position,rotation和scale均表达为ES6中的get和set属性,并在赋值时对position,rotation和scale进行处理同时保证localPosition、localRotation以及localScale的正确来实现节点及其子节点的position,rotation和scale不变。
本发明的3D对象在虚拟场景中的节点化组织方法能够满足复杂成绩关系的大型应用,并且保证了3D对象在虚拟场景中的节点的节点树下的每一个节点即使在移动过程中不做任何处理也能在使用时保证其正确性,不仅可以应用到PC端3D引擎,其他3D引擎中也能适用。
具体实施方式
为了更好的理解本发明,下面详细说明本发明。
场景节点化的过程中主要是需要处理节点对象的三个属性位置(position)、旋转(rotation)以及缩放(scale),并且涉及到两个坐标系局部坐标系(Local)以及世界坐标系(World),局部坐标系表示的是节点对象相对于父节点对象的位置、旋转以及缩放,世界坐标系表示的是节点对象在3D空间中的实际位置、旋转以及缩放。
在实际的对象定义中,我们用position、rotation以及scale表示节点对象在世界坐标系下的位置、旋转以及缩放,用localPosition、localRotation以及localScale表示节点对象在局部坐标系下的位置、旋转以及缩放,节点对象通过_parent属性设置其父节点通过_children数组索引其子节点这样就建立了整颗节点树的双向链表可以很轻易的从任意一个节点遍历到整颗节点树,并且提供了iterateUp以及iterateDown调用分别用来从当前节点向上遍历到场景节点树的根节点,以及向下遍历该节点的所有子节点。
一个节点在3D空间中渲染时并没有层级关系,需要我们提供节点在3D场景中真实的位置、旋转以及缩放,所以这个时候要提供给渲染引擎的是position、rotation以及scale属性的值,在扁平化的节点关系中,这三个属性可以直接使用但是在节点化的场景关系中,需要计算每一个节点的父节点的属性对节点本身的影响,如position的计算需要调用iterateUp遍历其所有父节点通过localPosition计算出最终的position,rotation和scale的计算同理,只是rotation的计算需要使用四元数来计算不能简单的加减,当分别计算出节点的position,rotation以及scale以后将这三个属性组成一个矩阵传给渲染引擎渲染。
接下是如何将节点加入到场景树中以及如何从某一个节点树分支移动节点到另一个节点下,并且保持节点的position,rotation和scale不变,首先是将新生成的节点对象加入到已经存在的节点对象下作为其子节点,每一个节点对象均实现了一个名为addChild的函数,这个函数的主要工作原理,是将新节点对象的position,rotation和scale与它的父节点的position,rotation和scale进行运算position与scale运算相对简单只需要进行一个除法运算即可得到新节点的localPosition、localScale,对于rotation则需要使用四元数进行运算得到新节点的localRotation,然后再将新节点要挂载的节点作为其_parent属性,将新节点加入到挂载节点的_children当中,这样就建立了一颗新的节点树,另外的难点在于将一颗节点树分支下的子节点或者子节点树移动到另一个节点下,这里采用的方法是在移动的节点时纪录下该节点的position,rotation和scale然后在挂载节点时将数值赋值给相应的属性即可,这个过程中保持节点及其子节点的position,rotation和scale不变的一个重要的技术手段是将position,rotation和scale均表达为ES6中的get和set属性,这样在赋值时我们可以对position,rotation和scale进行处理同时保证localPosition、localRotation以及localScale的正确,并且由于position,rotation和scale是在使用时计算生成的,这样保证了子节点树下的每一个节点即使在移动的过程中不做任何处理也能在使用时保证其正确性,这项保持节点在节点树中变动时其属性不变(在3D编辑器中视觉表现不变)的技术以前只在PC端3D引擎中使用。
本发明的3D对象在虚拟场景中的节点化组织方法能够满足复杂成绩关系的大型应用,并且保证了3D对象在虚拟场景中的节点的节点树下的每一个节点即使在移动过程中不做任何处理也能在使用时保证其正确性,不仅可以应用到PC端3D引擎,其他3D引擎中也能适用。
以上所述,仅为本发明较佳的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明披露的技术范围内,根据本发明的技术方案及其发明构思加以等同替换或改变,都应涵盖在本发明的保护范围之内。
Claims (1)
1.一种3D对象在虚拟场景中的节点化组织方法,针对3D对象在场景中进行节点化的过程中所涉及的节点对象的三个属性位置(position)、旋转(rotation)、缩放(scale)以及局部坐标系(Local)和世界坐标系(World)进行处理,其特征在于,局部坐标系表示节点对象相对于父节点对象的位置、旋转以及缩放,世界坐标系表示节点对象在3D空间中的实际位置、旋转以及缩放;所述3D对象在虚拟场景中的节点化组织方法包括对节点对象进行定义、对节点进行渲染处理对新生节点的处理、将一个节点树分支下的子节或者子节点树移动到另一个节点下的处理四个部分;
对节点对象进行定义,包括如下几个步骤;
s11、用position、rotation以及scale分别表示节点对象在世界坐标系下的位置、旋转以及缩放;
s12、用localPosition、localRotation、localScale分别表示节点对象在局部坐标系下的位置、旋转以及缩放;
s13、节点对象通过_parent属性设置其父节点,通过_children数组索引其子节点,以建立节点数的双向链表,保证从任意一个节点可以遍历到整颗节点树;并且提供了iterateUp以及iterateDown调用分别用来从当前节点向上遍历到场景节点树的根节点,以及向下遍历该节点的所有子节点;
对节点进行渲染,是通过分别计算出节点的position、rotation、scale属性值来组成矩阵传给渲染引擎进行渲染实现的;其中,position、rotation、scale的计算均需要调用iterateUP遍历其所有父节点通过localPosition计算出最终的position、rotation和scale,切rotation的计算需要使用四元数;
对新生节点的处理,具体方法为将新生成的节点对象加入到已经存在的节点对象下作为其子节点,每一个节点对象均实现了一个名为addChild函数,addChild函数将新节点对象的position、rotation和scale与它的父节点的position、rotation和scale进行运算,其中position与scale运算只需要进行一个除法运算即可得到新节点的localPosition、localScale,对于rotation则需要使用四元数进行运算得到新节点的localRotation,然后再将新节点要挂载的节点作为其_parent属性,将新节点加入到挂载节点的_children当中,这样就建立了一颗新的节点树;
将一个节点树分支下的子节或者子节点树移动到另一个节点下的处理,具体方法为在移动节点时纪录下该节点的position,rotation和scale,然后在挂载节点时将数值赋值给相应的属性即可,其中,这个过程中要保持节点及其子节点的position,rotation和scale不变,具体是将position,rotation和scale均表达为ES6中的get和set属性,并在赋值时对position,rotation和scale进行处理同时保证localPosition、localRotation以及localScale的正确来实现节点及其子节点的position,rotation和scale不变。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810475996.XA CN108734788A (zh) | 2018-05-17 | 2018-05-17 | 一种3d对象在虚拟场景中的节点化组织方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810475996.XA CN108734788A (zh) | 2018-05-17 | 2018-05-17 | 一种3d对象在虚拟场景中的节点化组织方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN108734788A true CN108734788A (zh) | 2018-11-02 |
Family
ID=63938647
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201810475996.XA Pending CN108734788A (zh) | 2018-05-17 | 2018-05-17 | 一种3d对象在虚拟场景中的节点化组织方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN108734788A (zh) |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109828818A (zh) * | 2019-01-29 | 2019-05-31 | 广联达科技股份有限公司 | 一种基于浏览器端显示引擎的图元样式变换方法 |
WO2021088511A1 (zh) * | 2019-11-07 | 2021-05-14 | 上海莉莉丝科技股份有限公司 | 描述三维虚拟空间中物体关系的方法、系统、设备和介质 |
CN113111303A (zh) * | 2021-03-30 | 2021-07-13 | 网易有道信息技术(北京)有限公司 | 矩阵乘法运算方法、装置、介质和计算设备 |
CN113262469A (zh) * | 2021-06-08 | 2021-08-17 | 网易(杭州)网络有限公司 | 一种资源模板的生成、游戏中场景元素的渲染方法及装置 |
Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1885348A (zh) * | 2005-06-21 | 2006-12-27 | 中国科学院计算技术研究所 | 一种基于骨骼的任意拓扑结构虚拟角色的驱动方法 |
US20070109298A1 (en) * | 2005-06-29 | 2007-05-17 | Baback Elmieh | Offline optimization pipeline for 3D content in embedded devices |
SE0502704L (sv) * | 2005-12-08 | 2007-06-09 | Agency 9 Ab | En metod för att rendera en scengraf utan rot med en användarkontrollerad renderingsordning |
CN101243473A (zh) * | 2005-06-29 | 2008-08-13 | 高通股份有限公司 | 用于嵌入式装置中的3d内容的离线优化管线 |
CN101923462A (zh) * | 2009-06-10 | 2010-12-22 | 成都如临其境创意科技有限公司 | 一种基于FlashVR的三维微型场景网络发布引擎 |
CN107180235A (zh) * | 2017-06-01 | 2017-09-19 | 陕西科技大学 | 基于Kinect的人体动作识别算法 |
US20180004393A1 (en) * | 2016-07-01 | 2018-01-04 | Autodesk, Inc. | Three dimensional visual programming interface for a network of devices |
-
2018
- 2018-05-17 CN CN201810475996.XA patent/CN108734788A/zh active Pending
Patent Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1885348A (zh) * | 2005-06-21 | 2006-12-27 | 中国科学院计算技术研究所 | 一种基于骨骼的任意拓扑结构虚拟角色的驱动方法 |
US20070109298A1 (en) * | 2005-06-29 | 2007-05-17 | Baback Elmieh | Offline optimization pipeline for 3D content in embedded devices |
CN101243473A (zh) * | 2005-06-29 | 2008-08-13 | 高通股份有限公司 | 用于嵌入式装置中的3d内容的离线优化管线 |
SE0502704L (sv) * | 2005-12-08 | 2007-06-09 | Agency 9 Ab | En metod för att rendera en scengraf utan rot med en användarkontrollerad renderingsordning |
CN101923462A (zh) * | 2009-06-10 | 2010-12-22 | 成都如临其境创意科技有限公司 | 一种基于FlashVR的三维微型场景网络发布引擎 |
US20180004393A1 (en) * | 2016-07-01 | 2018-01-04 | Autodesk, Inc. | Three dimensional visual programming interface for a network of devices |
CN107180235A (zh) * | 2017-06-01 | 2017-09-19 | 陕西科技大学 | 基于Kinect的人体动作识别算法 |
Non-Patent Citations (3)
Title |
---|
JUNG KEUN LEE等: "A Fast Quaternion-Based Orientation Optimizer via Virtual Rotation for Human Motion Tracking", 《IEEE》 * |
汪晗等: "基于四元数插值的虚拟人运动建模及实现", 《武汉工程大学学报》 * |
陈姝等: "基于关键视频帧跟踪数据的三维虚拟人动画", 《系统仿真学报》 * |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109828818A (zh) * | 2019-01-29 | 2019-05-31 | 广联达科技股份有限公司 | 一种基于浏览器端显示引擎的图元样式变换方法 |
WO2021088511A1 (zh) * | 2019-11-07 | 2021-05-14 | 上海莉莉丝科技股份有限公司 | 描述三维虚拟空间中物体关系的方法、系统、设备和介质 |
CN113111303A (zh) * | 2021-03-30 | 2021-07-13 | 网易有道信息技术(北京)有限公司 | 矩阵乘法运算方法、装置、介质和计算设备 |
CN113111303B (zh) * | 2021-03-30 | 2022-04-05 | 网易有道信息技术(北京)有限公司 | 数据读取方法、装置、介质和计算设备 |
CN113262469A (zh) * | 2021-06-08 | 2021-08-17 | 网易(杭州)网络有限公司 | 一种资源模板的生成、游戏中场景元素的渲染方法及装置 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN108734788A (zh) | 一种3d对象在虚拟场景中的节点化组织方法 | |
CN111462313B (zh) | 绒毛效果的实现方法、装置和终端 | |
TW202008328A (zh) | 地圖區域合併的資料處理方法及裝置 | |
CN107861682A (zh) | 虚拟对象的移动控制方法和装置 | |
CN105718643A (zh) | 一种基于最优化视角的船舶生产设计审图器实现方法 | |
CN104050699B (zh) | 通用三维场景数据的应用实例 | |
CN109118593A (zh) | 一种创建三维模型可编辑组态的系统和方法 | |
CN108230433A (zh) | 3d地图散点数据展示方法及系统、信息数据处理终端 | |
CN108255964B (zh) | 一种工艺流程路线的展示方法 | |
CN108133454A (zh) | 空间几何模型图像切换方法、装置、系统及交互设备 | |
CN110363837A (zh) | 游戏中纹理图像的处理方法及装置、电子设备、存储介质 | |
CN105867930A (zh) | 一种函数调用关系的显示方法、装置及终端 | |
CN109857964A (zh) | 一种页面操作的热力图绘制方法、装置、存储介质及处理器 | |
CN105989623A (zh) | 基于手持移动设备的增强现实应用的实现方法 | |
US20180025547A1 (en) | 2d graphical coding to create a 3d image | |
Limberger et al. | Interactive software maps for web-based source code analysis | |
CN104680578A (zh) | 基于bim的轴线标示方法和系统 | |
Guo et al. | Transfer function map | |
Noll | Computer animation and the fourth dimension | |
CN105913473A (zh) | 一种卷页特效的实现方法及系统 | |
CN106157366A (zh) | 基于bim的超大场景在移动端的渲染优化方法及系统 | |
CN112506347A (zh) | 面向加工过程监控的混合现实交互方法 | |
Burch et al. | Procedural city modeling for AR applications | |
JP2023508516A (ja) | 動画生成方法、装置、電子デバイス及びコンピュータ読取可能記憶媒体 | |
CN105069838A (zh) | 一种服装展示方法及装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
WD01 | Invention patent application deemed withdrawn after publication |
Application publication date: 20181102 |
|
WD01 | Invention patent application deemed withdrawn after publication |