8.12.3.35 IfcSurfaceTexture(表面纹理)
抽象 该定义可能不会被直接实例化。
8.12.3.35.1 语义定义(Semantic definition)
IfcSurfaceTexture 提供基于二维图像的纹理贴图。它可以通过 URL 引用外部图像文件(IfcImageTexture)、将图像文件作为二进制大对象包含在数据集中(IfcBlobTexture),或显式包含像素数组(IfcPixelTexture)来实现。
以下定义来自 ISO/IEC 19775-1 X3D 架构和基础组件(X3D 规范):
- 纹理:用于纹理贴图的图像,当应用于几何体时创建视觉外观效果。
- 纹理贴图:纹理加上将纹理映射到几何体所需的一般参数。
- 纹理由包含描述纹理的颜色值数组的二维图像定义。纹理值的解释取决于纹理中的组件数量和图像格式的具体细节。通常,纹理可以使用以下形式之一描述:
- 强度纹理(单组件)
- 强度加 Alpha 不透明度纹理(双组件)
- 完整 RGB 纹理(三组件)
- 完整 RGB 加 Alpha 不透明度纹理(四组件)
8.12.3.35.1.1 Texture coordinate systems
图 8.12.3.35.1.2.A 展示了纹理坐标系。

以下关于纹理坐标的定义来自 ISO/IEC 19775-1 X3D 架构和基础组件(X3D 规范):
- 纹理贴图在二维坐标系 (s, t) 中定义,该坐标系在两个方向上的范围均为 [0.0, 1.0]。图像的底边对应于纹理贴图的 S 轴,图像的左边对应于纹理贴图的 T 轴。图像的左下角像素对应于 s=0, t=0,图像的右上角像素对应于 s=1, t=1。纹理贴图可视为二维颜色函数,给定 (s, t) 坐标,返回颜色值 colour(s, t)。
- RepeatS 和 RepeatT 布尔标志控制纹理贴图在应用于几何表面时,是在 [0.0, 1.0] 纹理坐标范围外重复,还是被限制在 [0.0, 1.0] 范围内。TextureTransform 在纹理应用于几何表面之前对其应用二维非均匀变换。
- 这些参数支持更改形状上纹理的大小、方向和位置。请注意,这些操作在几何体表面上观察时是反向的。例如,(2 2) 的 scale 值将缩放纹理坐标,并产生将纹理大小缩小 2 倍的净效果(纹理坐标变大两倍,从而导致纹理重复)。(0.5 0.0) 的平移将纹理坐标沿 S 轴平移 +0.5 个单位,并产生将纹理沿几何体表面 S 轴平移 -0.5 的净效果。纹理坐标旋转 π/2 会导致纹理在几何体上旋转 -π/2。
- center 字段指定纹理坐标空间中的平移偏移,rotation 和 scale 字段围绕该偏移应用。scale 字段指定纹理坐标在 center 点周围 S 和 T 方向上的缩放因子。scale 值应在 (−∞,∞) 范围内。rotation 字段指定在应用缩放后纹理坐标围绕 center 点的旋转弧度。正旋转值使纹理坐标围绕中心逆时针旋转,从而使纹理本身的外观顺时针旋转。translation 字段指定纹理坐标的平移。
以下约定适用:
- center = TextureTransform.LocalOrigin;
- rotation = TextureTransform.Axis1
- scale S = TextureTransform.Scale
- scale T = TextureTransform.Scale2
纹理到表面或实体的映射按以下优先级确定:
- 如果几何体是定义了纹理映射的特殊 IFC 类型,例如 IfcSphere、IfcBlock 或 IfcExtrudedAreaSolid,则该定义是默认纹理映射。
- 如果 IfcTextureCoordinate 纹理坐标被分配给表面纹理,则使用这些纹理坐标。
- 如果几何体没有纹理映射定义且没有纹理坐标,则纹理 s 坐标来自局部顶点 X 坐标,t 坐标来自局部顶点 Y 坐标。沿每个轴,当几何体从边界框最小值到最大值时,s 和 t 纹理坐标从 0 到 1。
8.12.3.35.1.2 Texture modes
纹理可能属于某种模式,该模式决定了纹理如何影响 IfcSurfaceStyleRendering 中的反射方法,如表 8.12.3.35.1.2.A 所述。每种纹理模式类型(DIFFUSE、SPECULAR 等)只能提供一个纹理。
| 模式 | PHONG | PHYSICAL | FLAT |
|---|---|---|---|
| AMBIENT | 是 | 否 | 否 |
| NORMAL | 是 | 是 | 否 |
| EMISSIVE | 是 | 是 | 是 |
| METALLICROUGHNESS | 否 | 是 | 否 |
| OCCLUSION | 是 | 是 | 否 |
| SHININESS | 是 | 否 | 否 |
| SPECULAR | 是 | 否 | 否 |
| DIFFUSE | 是 | 是 | 否 |
8.12.3.35.2 实体继承(Entity inheritance)
-
- IfcSurfaceTexture
- IfcColourRgbList
- IfcColourSpecification
- IfcCurveStyleFont
- IfcCurveStyleFontAndScaling
- IfcCurveStyleFontPattern
- IfcIndexedColourMap
- IfcPreDefinedItem
- IfcSurfaceStyleLighting
- IfcSurfaceStyleRefraction
- IfcSurfaceStyleShading
- IfcSurfaceStyleWithTextures
- IfcTextStyleForDefinedFont
- IfcTextStyleTextModel
- IfcTextureCoordinate
- IfcTextureVertex
- IfcTextureVertexList
8.12.3.35.3 特性(Attributes)
| # | 特性(Attributes) | 类型 | 描述 |
|---|---|---|---|
| IfcSurfaceTexture (7) | |||
| 1 | RepeatS | IfcBoolean |
RepeatS 字段指定纹理在 S 方向上的包裹方式。如果 RepeatS 为 TRUE(默认值),纹理贴图在 S 方向的 [0.0, 1.0] 纹理坐标范围外重复,以填充形状。如果 RepeatS 为 FALSE,纹理坐标在 S 方向上被限制在 [0.0, 1.0] 范围内。 |
| 2 | RepeatT | IfcBoolean |
RepeatT 字段指定纹理在 T 方向上的包裹方式。如果 RepeatT 为 TRUE(默认值),纹理贴图在 T 方向的 [0.0, 1.0] 纹理坐标范围外重复,以填充形状。如果 RepeatT 为 FALSE,纹理坐标在 T 方向上被限制在 [0.0, 1.0] 范围内。 |
| 3 | Mode | OPTIONAL IfcIdentifier |
Mode 应保存此纹理对应的贴图类型,从以下列表中选择:AMBIENT、NORMAL、EMISSIVE、METALLICROUGHNESS、OCCLUSION、SHININESS、SPECULAR、DIFFUSE。 如果省略 Mode,则假定为 DIFFUSE。 |
| 4 | TextureTransform | OPTIONAL IfcCartesianTransformationOperator2D |
TextureTransform 定义应用于纹理坐标的二维变换。它影响纹理坐标应用于几何表示项表面的方式。二维变换支持更改形状上纹理的大小、方向和位置。IfcCartesianTransformationOperator 中不允许使用镜像。 |
| 5 | Parameter | OPTIONAL LIST [1:?] OF IfcIdentifier | |
| IsMappedBy | SET [0:?] OF IfcTextureCoordinate FOR Maps |
纹理坐标,由相应的纹理顶点列表提供给基于顶点的几何项,或由纹理坐标生成器提供,将表面纹理应用于几何项的表面。 |
|
| UsedInStyles | SET [0:?] OF IfcSurfaceStyleWithTextures FOR Textures |
无可用描述 |
|
8.12.3.35.4 形式化表示(Formal representation)
ENTITY IfcSurfaceTexture
ABSTRACT SUPERTYPE OF (ONEOF
(IfcBlobTexture
,IfcImageTexture
,IfcPixelTexture))
SUBTYPE OF (IfcPresentationItem);
RepeatS : IfcBoolean;
RepeatT : IfcBoolean;
Mode : OPTIONAL IfcIdentifier;
TextureTransform : OPTIONAL IfcCartesianTransformationOperator2D;
Parameter : OPTIONAL LIST [1:?] OF IfcIdentifier;
INVERSE
IsMappedBy : SET [0:?] OF IfcTextureCoordinate FOR Maps;
UsedInStyles : SET [0:?] OF IfcSurfaceStyleWithTextures FOR Textures;
END_ENTITY;