i

概要

  • (geometryPath)
  • (geometryPath,upAxisOfGeometry)
  • (geometryPath,upAxisOfGeometry,insertMode)

参数

  1. geometryPath – string
    要插入的几何资产的名称。有关内置资产列表的信息,请参阅资产搜索以获取有关搜索位置和 内置资产和纹理的信息。
  2. upAxisOfGeometry – 关键字
    • yUp – 几何的上轴是y。默认。
    • zUp – 几何的向上轴是z。为了适应城市引擎中使用的坐标系,几何体围绕x轴旋转-90度。
  3. insertMode – 关键字
    • alignSizeAndPosition – 几何体适合范围。默认。
    • keepSizeAndPosition – 保持几何体的大小和位置,并且不与范围对齐。这与设置零范围尺寸 s(0,0,0)相同
    • keepSizeAlignPosition – 保持几何体的大小。几何体位于范围的xz中心,其边界框位于y = 0。

描述

的操作从文件中读取的几何形状的资产(3D模型,多边形网格),并将其插入到当前形状的范围。对资产进行转换,使其边界框与范围一致。

如果范围的大小sx,sysz(即宽度,高度或深度)中的一个或多个为零,则范围将修改如下:

  • 如果范围的所有三种尺寸都为零,则这种类似点的范围用作要插入的资产的原点。因此,范围的大小向量设置为资产边界框的大小,即scope.sx = asset.sx,scope.sy = asset.syscope.sz = asset.sz。同样,范围使用资产的值进行转换,即scope.tx + = asset.txscope.ty + = asset.tyscope.tz + = asset.tz。因此,插入的资产未被修改,其原始尺寸被完全保留。
  • 如果两个尺寸为零,则相对于非零尺寸修改这样的线状范围。例如,如果只有高度(scope.sy)非零,则计算以下缩放值:scalexz = scope.sy/asset.sy。然后是尺寸修改:scope.sx = scalexz * asset.sxscope.sz = scalexz * asset.sz。因此,使用scope.tx + = scalexz * asset.txscope.tz + = scalexz * asset.tz,对两个相应的轴修改范围的位置因此,插入的资产被统一缩放,即资产的比例被完全保留。
  • 如果其中一个尺寸为零,则相对于两个非零尺寸的平均值修改示波器的尺寸。例如,如果depth(scope.sz)为零,则执行以下计算:scope.sz =(scope.sx/asset.sx+scope.sy/asset.sy)* 0.5 * asset.sz。请注意,范围的位置不会被修改。
  • 如果当前形状具有修剪平面(在组件拆分中生成),则使用修剪平面切割模型。

支持的资产格式

目前,支持Wavefront OBJ和COLLADA DAE格式作为资产格式。

OBJ读取器导入材料描述文件(.mtl),它还理解负指数(从当前位置向后引用)。它将静默地删除不支持的几何/材质标签,还将删除不一致网格的法线或纹理坐标。

COLLADA阅读器导入无限的场景图,并读取转换节点。额外的标签被忽略,它还将删除不一致网格的法线和纹理坐标。

备注:

  • 两种格式都支持每网格和每面材质分配。
  • 网格一致性要求:网格的所有面必须具有相同的顶点,纹理坐标和顶点法线。如果一个面不使用纹理坐标,而其他面做,则从该网格中删除所有纹理坐标。其他网格不会被修改。
  • 模型导出相关性:这是多次使用和CGA模型生成期间不被修改的几何性质或材料明智可导出为实例资产(见网状粒度粒度设置)。

有关

例子

窗口插入

以下规则产生细分质量模型。

Lot-->
   extrude(47)
   comp(f) { side : Facade  
           | top  :  X }	
	
Facade-->
   split(y) { { ~1 : X 
              | ~8 : Floor }* 
            | ~1   : X }
			   
Floor-->
   split(x) { { ~1 : X 
              | ~5 : Window }* 
            | ~1   : X }
细分质量模型

在窗口规则中插入窗口模型的效果显示在图像中。

Window-->
   i("window.obj")
用窗口模型细分质量
 

插入和零范围尺寸

要插入的资产显示在检查员中。资产的坐标包含(12.3,4.3,7.2)的翻译。

检查员资产

将资产插入具有零大小范围的形状会将范围的大小设置为资产的维度,并转换范围以保留资产的位置。请注意,相对于形状的轴(左侧的小轴)的平移与检查器中资源相对于原点(上图)的平移相同。

Head-->
   s(0,0,0)	
   i("beethoven.obj")
范围为零的资产

如果范围大小在一个维度中不为零,则相对于非零维度设置另外两个维度。这对于零维度的范围转换也是有效的。在左边的图片中,显示了原始范围(沿x轴是一维的)。

Head-->
   s(9,0,0)	
   i("beethoven.obj")
具有非零范围维度的资产

如果其中一个范围大小为零,则相对于两个非零大小的平均值修改范围的大小。请注意,范围的位置不会被修改。

Head-->
   s(9,9,0)	
   i("beethoven.obj")
具有两个非零范围维度的资产
 

修剪平面和插入

左侧显示的圆柱模型插入立方体的四个侧面。

Lot-->
   primitiveCube()
   s(10,40,10)
   t(-5, 0, -5)
   comp(f) { side: Side }
	
Side-->
   t(0,0,-5)
   s('1,'1,10)			 
   i("cylinder.vert.obj")
气缸模型插入立方体

使用由组件分割产生的修剪平面切割插入的圆柱体。在左侧的图片中,突出显示了一个侧面形状(即切割圆柱体)及其修剪平面的几何形状。在右侧,是从顶视图(顶部)开始的相同场景,以及上部区域(底部)的特写。

Lot-->
   primitiveCube()
   s(10,40,10)
   t(-5, 0, -5)
   comp(f) { side: Side }
	
Side-->
   t(0,0,-5)
   s('1,'1,10)			 
   i("cylinder.vert.obj")
气缸用修剪平面切割

请注意在插入操作更改生成的几何图形之前如何禁用修剪平面。

Lot-->
   primitiveCube()
   s(10,40,10)
   t(-5, 0, -5)
   comp(f) { side : Side }
	
Side-->
   t(0,0,-5)
   s('1,'1,10)			 
   set(trim.vertical, false)
   i(cylinder.vert.obj)
带有禁用装饰平面的气缸

Was this article helpful?

Leave A Comment?

You must be logged in to post a comment.