Warefront Object File (.obj)文档

【该文档英文原文地址为 http://www.martinreddy.net/gfx/3d/OBJ.spec

【此翻译版本禁止转载】

mailto:dev@sgis.site

【此文档仍在完善中】

Object Files (.obj)

.obj文件定义Wavefront可视化应用中对象的几何和其他属性。对象文件也可用于在可视化应用之间和其他应用程序间来回传输几何数据。

.obj文件可以是ASCII格式(.obj)或二进制格式(.mod)。本附录描述了目标文件的ASCII格式。这些文件
必须有扩展名.obj。

在此版本中,.obj文件格式支持两个多边形对象和自由形式的对象。多边形几何使用点,线和面自由形状几何使用曲线和曲面时定义对象。

关于本节

.obj附录适用于那些想要使用.obj格式将几何数据从其他软件应用程序转换为Wavefront产品的人。它还为想要有关Wavefront .obj文件格式的详细信息的可视化应用用户提供信息。

如果您是2.11版本用户并想了解3.0版本的特征以及它如何影响您现有的文件,您可能会特别感兴趣的是附录的结尾的“被取代的陈述”一节。“补丁和自由曲面”一节给出了2.11补丁在3.0中的外观示例。

本节的组织方式

本附录的大部分内容描述了.obj文件的不同部分和如何在文件中排列这些部分。最后的三个部分附录提供有关3.0版本的背景信息

.obj格式

.obj附录包括以下部分:

​ 文件结构 File structure

​ 一般声明 General statement

​ 顶点数据 Vertex data

​ 指定自由曲线/曲面 Specifying free-form curves/surfaces

​ 自由曲线/曲面属性 Free-form curve/surface attributes

​ 元素 Elements

​ 自由曲线/曲面体声明 Free-form curve/surface body statements

​ 自由曲面之间的连通性 Connectivity between free-form surfaces

​ 分组 Grouping

​ 显示/渲染属性 Display/render attributes

​ 评论 Comments

​ 自由曲线/曲面的数学 Mathematics for free-form curves/surfaces

​ 被取代的陈述 Superseded statements

​ 补丁和自由曲面 Patches and free-form surfaces


.obj文件格式的曲线和曲面扩展是与德国柏林的mental images GmbH&Co.KG合作开发,作为联合开发项目的一部分,自由曲面在Wavefront的可视化应用中被使用。

文件结构

以下类型的数据可以包含在.obj文件中。在这个列表中,在括号中的关键字遵循数据类型。

顶点数据 Vertex data

​ 几何顶点(v)geometric vertices

​ 纹理顶点(vt)texture vertices

​ 顶点法线(vn)vertex normals

​ 参数空间顶点(vp)parameter space vertices
​ 自由曲线/曲面属性 Free-form curve/surface attributes

​ 理性或非理性形式的曲线或曲面类型 rational or non-rational forms of curve or surface type:
​ basis matrix,Bezier,B-spline,Cardinal,Taylor (cstype)

​ 度(deg)degree

​ 基矩阵(bmat)basis matrix

​ 步长(step)step size

分子 Elements

​ 点(p)point

​ 线(l)line

​ 面(f)face

​ 曲线(cure)curve

​ 2D曲线(curv2)2D curve

​ 表面(surf)surface

自由曲线/曲面体声明 Free-form curve/surface body statements

​ 参数值(parm)parameter values

​ 外部trim 环(trim )outer trim ming loop

​ 内部trim 环(hole)inner trim ming loop

​ 特殊曲线(scrv)special curve

​ 特殊点(sp)special point

​ end语(end)end statement

自由曲面之间的连通性 Connectivity between free-form surfaces

​ 连接(con)connect

分组 Grouping

​ 组名(g)group name

​ 平滑组(s)smoothing group

​ 合并组(mg)merging group

​ 对象名称(o)object name

显示/渲染属性 Display/render attributes

​ 斜角插补(bevel)bevel interpolation

​ 颜色插值(c_interp)color interpolation

​ 溶解插值(d_interp)dissolve interpolation

​ 详细程度(lod)level of detail

​ 材料名称(usemtl)material name

​ 材料库(mtllib)material library

​ 阴影投射(shadow_obj)shadow casting

​ 光线追踪(trace_obj)ray tracing

​ 曲线近似技术(ctech)curve approximation technique

​ 表面近似技术(stech)surface approximation technique

顶点数据 Vertex data

顶点数据提供以下坐标:

​ 几何顶点 geometric vertices

​ 纹理顶点 texture vertices

​ 顶点法线 vertex normals

对于自由形式的对象,顶点数据还提供:

​ 参数空间顶点 parameter space vertices

顶点数据由四个顶点列表表示; 每种类型一个顶点坐标。右手坐标系用于指定坐标位置。

以下示例是包含.obj文件的.obj文件的一部分
四种类型的顶点信息。

v -5.000000 5.000000 0.000000
v -5.000000 -5.000000 0.000000
v 5.000000 -5.000000 0.000000
v 5.000000 5.000000 0.000000
vt -5.000000 5.000000 0.000000
vt -5.000000 -5.000000 0.000000
vt 5.000000 -5.000000 0.000000
vt 5.000000 5.000000 0.000000
vn 0.000000 0.000000 1.000000
vn 0.000000 0.000000 1.000000
vn 0.000000 0.000000 1.000000
vn 0.000000 0.000000 1.000000
vp 0.210000 3.590000
vp 0.000000 0.000000
vp 1.000000 0.000000
vp 0.500000 0.500000

当顶点加载到可视化应用中时,它们是顺序编号,从1开始。这些参考编号是用于元素语句。

句法

以复杂度的顺序列出以下语法。

v x y z w

多边形和自由形式的几何声明。

指定几何顶点及其xyz坐标。合理的曲线和曲面也需要第四个齐次坐标权重量。

xyz是顶点的x,y和z坐标。这些是定义顶点位置的浮点数三个维度。

w是有理曲线和曲面所需的权重。它是非理性曲线和曲面不需要。如果你不指定w的值,默认值为1.0。

注意:建议使用正权重值。使用零或负值可能会导致曲线中的未定义点或表面。

vp u v w

自由形式的几何声明。

指定曲线或曲面的参数空间中的点。

用法确定需要多少坐标。特别曲线的点需要一个1D控制点(仅限u)曲线的参数空间。表面的特殊要求需要a表面参数空间中的2D点(u和v)。控制非理性trim曲线的点需要u和v坐标。理性trim曲线的控制点需要你,v和w(重量)坐标。

u是曲线或第一个曲线的参数空间中的点坐标在曲面的参数空间中。

v是曲面参数空间中的第二个坐标。

w是理性trim曲线所需的重量。如果你这样做不指定w的值,默认为1.0。

注意:有关参数顶点的其他信息,请参阅curv2和sp语句

vn i j k

多边形和自由形式的几何声明。

指定具有分量i,j和k的法向量。

顶点法线影响几何体的平滑着色和渲染。对于多边形,使用顶点法线代替实际构面法线。对于曲面,顶点法线在内插上整个表面并替换实际的分析表面法线。

当存在顶点法线时,它们将取代平滑组。

ijk是顶点法线的i,j和k坐标。他们是浮点数。

vt u v w

多边形和自由形状几何的顶点语句。

指定纹理顶点及其坐标。一维纹理只需要u纹理坐标,2D纹理需要u和v纹理坐标,3D纹理需要全部三个坐标。

u是纹理水平方向的值。

v是可选参数。

v是纹理垂直方向的值。该默认值为0。

w是可选参数。

w是纹理深度的值。默认值为0。

指定自由曲线/曲面 Specifying free-form curves/surfaces

指定自由曲线或三个步骤涉及到表面元素。

​ 指定曲线或曲面的类型(basis matrix,Bezier,B-spline,Cardinal,or Taylor)使用自由曲线/曲面属性。

​ 用元素陈述描述曲线或曲面。

​ 使用自由曲线/曲面提供其他信息本身陈述

本附录的下三节提供了每个步骤的详细信息。

曲线和曲面的数据要求

所有曲线和曲面都需要一组特定的数据。这包括下列:

自由曲线/曲面属性 Free-form curve/surface attributes

​ 所有曲线和曲面都需要使用cstype声明的类型数据。

​ 所有曲线和曲面都需要给出度数(deg)数据与声明。

​ 基础矩阵曲线或曲面需要bmat语句。

​ 基础矩阵曲线或曲面也需要步长与步骤声明一起给出。

要素 Elements

​ 所有曲线和曲面都需要控制点在curv,curv2或surf声明中引用。

​ 3D曲线和曲面需要一个参数范围,即分别在曲线和曲面声明中给出。

自由曲线/曲面体声明 Free-form curve/surface body statements

​ 所有曲线和曲面都需要一组全局参数或a结矢量,两者都以parm语句给出。

​ 所有曲线和曲面body语句都需要显式end声明。

错误检查 Error checks

读取.obj文件时,上面的数据集开始时为空,没有默认值。在读取文件时遇到语句,信息累积,以及一些错误
可能会报出。

遇到end语句时,会检查涉及各种陈述之间的一致性和执行的以下错误::

​ 所有必需的信息都存在。

​ 控制点的数量,参数值的数量(结),度数与曲线或曲面一致类型。如果类型是bmatrix,则步长也是一致的。(有关更多信息,请参阅参数矢量方程式在“自由曲线/曲面数学”一节中附录B1的末尾。)

​ 如果类型是bmatrix且度数是n,则基矩阵大小是(n + 1)x(n + 1)。

请注意,状态设置语句提供的任何信息仍然存在从一条曲线或曲面到下一条曲线或曲面。给出的信息曲线或曲面体内仅对曲线或曲线有效表面给它。

自由曲线/曲面属性 Free-form curve/surface attributes

.obj文件中提供了五种类型的自由形式几何
格式:

​ 贝齐尔 Bezier

​ 基础矩阵 basis matrix

​ B样条 B-spline

​ Cardinal

​ 泰勒 Taylor

您只能将这些类型应用于曲线和曲面。其中每一个五种类型可以是理性的或非理性的。

除了指定类型外,还必须定义类型曲线或曲面。对于基础矩阵曲线和曲面元素,您必须还指定基础矩阵和步长。

所有自由曲线和曲面属性语句都是状态设置。这意味着一旦设置了属性语句,它就适用于所有后面的元素,直到它重置为不同的值。

句法

以下语法语句按使用顺序列出。

cstype rat type

自由形式的几何声明。

指定曲线或曲面的类型并指示理性或非理性的形式。

rat是一个可选参数。

rat指定曲线或曲面类型的合理形式。如果rat不包括在内,曲线或曲面是非理性的

type指定曲线或曲面类型。允许的类型是:

	bmatrix		basis matrix

	bezier		Bezier

	bspline		B-spline

	cardinal    Cardinal

	taylor		Taylor

没有默认值。必须提供一个值。

deg degu degv

自由形式的几何声明。

设置曲线和曲面的多项式度。

degu是u方向的度数。这两者都是必需的曲线和曲面。

degv是v方向的度数。它只需要表面。对于Bezier, B-spline, Taylor, and basis matrix, 有没有默认; 必须提供一个值。对于Cardinal来说,角度是总是3.如果给Cardinal一些其他的值,那就是忽略。

bmat u matrix

bmat v matrix

自由形式的几何声明。

设置用于基础矩阵曲线和曲面的基础矩阵。必须在单独的bmat语句中指定u和v值。

注意:必须在bmat语句之前给出deg语句并且矩阵的大小必须适合于程度。

u指定在u方向上应用基矩阵。

v指定在v方向上应用基矩阵。

矩阵用列下标列出基矩阵的内容j变化最快。如果n是给定u或v的度数方向,矩阵(i,j)的大小应为(n + 1)x(n + 1)。

没有默认值。必须提供一个值。

注意:矩阵的排列与通常的排列不同在其他参考文献中找到 有关更多信息,请参阅示例在本节的最后,还有“数学为...自由曲线和曲面。”

step stepu stepv

自由形式的几何声明。

设置使用基础的曲线和曲面的步长矩阵。

stepu是u方向的步长。这两者都是必需的使用基矩阵的曲线和曲面。

stepv是v方向的步长。它只需要使用基础矩阵的表面。没有默认值。值必须提供。

当评估曲线或曲面并从中过渡时一组控制点或下一个发生的补丁发生used使用步长增加。适当的步长取决于表示类型,通过表达式表示基础矩阵,以及程度。

也就是说,假设我们给出了一个带有k个控制点的曲线:
		{v,... v}
		  1    k

如果曲线为n度,则需要n + 1个控制点对于每个多项式段。如果步长为s,那么第i个多项式段,其中i = 0是第一个段,将使用控制点:
		{v,...,v}
		is+1 is+n+1

例如,对于贝塞尔曲线,s = n。

对于表面,以上描述独立地适用于每个表面参数方向。

当您创建使用基矩阵类型的文件时,请务必指定适合当前曲线或曲面的步长表示。

例子

1.立方贝塞尔曲面由基矩阵制成

要创建立方贝塞尔曲面:

cstype bmatrix
deg 3 3
step 3 3
bmat u 1 -3 3 -1 \
	0 3 -6 3
	0 0 3 -3 \
	0 0 0 1
bmat v 1 -3 3 -1 \
	0 3 -6 3
	0 0 3 -3 \
	0 0 0 1

2.用基矩阵制作的Hermite曲线

要创建Hermite曲线:

cstype bmatrix
deg 3
step 2
bmat u 1 0 -3 2 0 0 3 -2 \
	0 1 -2 1 0 0 -1 1

3.在v方向上使用B样条,在u方向上贝塞尔;用基矩阵制作

在u方向上创建一个具有三次贝塞尔曲面的曲面
v方向的立方均匀B样条:

cstype bmatrix
deg 3 3
step 3 1
bmat u 1 -3 3 -1 \
	0 3 -6 3
	0 0 3 -3 \
	0 0 0 1
bmat v 0.16666 -0.50000 0.50000 -0.16666 \
	0.66666 0.00000 -1.00000 0.50000 \
	0.16666 0.50000 0.50000 -0.50000 \
	0.00000 0.00000 0.00000 0.16666

要素

对于多边形几何体,.obj文件中可用的元素类型是:

​ 点 points

​ 线 lines

​ 面 faces

对于自由形式几何,.obj文件中可用的元素类型是:

​ 曲线 curve

​ 表面上的2D曲线 2D curve on a surface

​ 表面 surface

所有元素都可以在文件中自由混合。

引用顶点数据

对于所有元素,参考数字用于标识几何顶点,纹理顶点,顶点法线和参数空间顶点。

这些类型的顶点中的每一个都是单独编号的,从这意味着文件中的第一个几何顶点是1,即第二个是2,依此类推。文件中的第一个纹理顶点是1,即第二个是2,依此类推。编号在整个过程中继续进行整个文件。通常,文件具有多个顶点数据列表。即使顶点数据被分隔,该编号序列也会继续其他数据。

除了从顶部的第一个列表向下计算顶点在文件中,您还可以从顶部向上计算顶点元素在文件中的位置。当你从一个数字计算列表元素,参考数字是负数。参考编号为-1表示元素正上方的顶点。参考编号-2表示上面的两个引用,依此类推。

引用顶点组

某些元素(如面和曲面)可能具有三元组引用顶点数据的数字。这些数字是参考几何顶点,纹理顶点和顶点法线的数字。

每个三元组数字指定几何顶点,纹理顶点,和顶点正常。参考编号必须按顺序排列用斜杠(/)分隔。

​ 第一个参考编号是几何顶点。

​ 第二个参考编号是纹理顶点。它跟随第一个斜线。

​ 第三个参考编号是顶点法线。它遵循第二次斜线。

数字和斜杠之间没有空格。可能还有更多比一系列几何顶点/纹理顶点/顶点法线在一条线上的数字。

以下是四边形的示例文件的一部分元素:

f 1/1/1 2/2/2 3/3/3 4/4/4

使用v,vt和vn表示几何顶点,纹理顶点,和顶点法线,该语句将读取:

f v/vt/vn v/vt/vn v/vt/vn v/vt/vn

如果面元素只有顶点和顶点法线(没有纹理顶点),你会输入两个斜杠(//)。例如,当你会指定只有顶点和顶点的正常参考数字时,你会输入:

f 1//1 2//2 3//3 4//4

当你使用一系列三元组时,你必须保持你引用顶点数据的方式一致。例如,给予某些顶点而非全部的顶点法线,是非法的。

以下是非法声明的示例。

f 1/1/1 2/2/2 3//3 4//4

句法

以下复杂性的顺序列出了以下语法语句
几何。

p v1 v2 v3 . . .

多边形几何陈述。

指定点元素及其顶点。您可以指定多个与此声明相关。虽然点不能被遮挡或渲染后,它们被其他可视化应用程序使用。

v是点元素的顶点引用号。每一点元素需要一个顶点。正值表示绝对值顶点数。负值表示相对顶点数。

l v1/vt1 v2/vt2 v3/vt3 . . .

多边形几何陈述。

指定一条线及其顶点参考号。您可以可选地包括纹理顶点参考编号。虽然线条不能被着色或渲染,它们被其他高级使用可视化程序。

顶点和纹理顶点的参考编号必须是用斜杠(/)分隔。号码和号码之间没有空格斜线。

v是该行上顶点的参考编号。至少两个顶点数是必需的。最大限度没有限制。正值表示绝对顶点数。负值表示相对顶点数。

vt是一个可选参数。

vt是行中纹理顶点的参考编号元件。它必须始终遵循第一个斜杠。

f v1/vt1/vn1 v2/vt2/vn2 v3/vt3/vn3 . . .

多边形几何陈述。

指定面元素及其顶点引用号。您可以可选地包括纹理顶点和顶点法线参考数字。

顶点,纹理顶点和顶点的参考数字顶点法线必须用斜杠(/)分隔。没有空间数字和斜线之间。

v是面元素中顶点的参考编号。一个至少需要三个顶点。

vt是一个可选参数。

vt是面中纹理顶点的参考编号元件。它总是遵循第一个斜线。

vn是一个可选参数。

vn是面元素中顶点法线的参考编号。它必须始终遵循第二个斜杠。

面元素使用曲面法线来指示它们的方向。如果顶点是围绕面部逆时针排序的,两者都是面和法线将指向观众。如果是顶点顺序是顺时针,两者都指向远离观察者。如果顶点法线被赋值,它们应该指向一般表面方向正常,否则结果可能导致不可预测。

如果面具有分配给它的纹理贴图而没有纹理顶点在f语句中赋值,当忽略纹理贴图时元素被渲染。

注意:任何对fo(面轮廓)的引用都不再有效版本2.11。您可以使用f(面)来获得相同的结果。仍将读取现有.obj文件中对fo的引用,但是,在保存文件时,它们将被写为f。

curv u0 u1 v1 v2 . . .

自由形式几何的元素声明。

指定曲线,其参数范围及其控制顶点。虽然曲线不能被着色或渲染,但它们被其他可视化应用程序使用。

u0是曲线的起始参数值。这是一个浮点数。

u1是曲线的end参数值。这是浮动的点数。

v是控制点的顶点参考号。您可以指定多个控制点。至少两个控制点是曲线所必需的。

对于非理性曲线,控制点必须为3D。为一个理性曲线,控制点为3D或4D。第四个如果省略,坐标(权重)默认为1.0。

curv2 vp1 vp2 vp3 . . .

自由形式的几何声明。

指定曲面及其控制点上的2D曲线。一个2D曲线用作外部或内部trim曲线,作为特殊曲线曲线或连接。

vp是控制点的参数顶点参考号。您可以指定多个控制点。至少两个控制2D曲线需要点。

控制点是参数顶点,因为曲线必须位于某个表面的参数空间中。对于非理性的曲线,控制顶点可以是2D。对于理性曲线,控制顶点可以是2D或3D。第三个坐标(重量)如果省略,则默认为1.0。

surf s0 s1 t0 t1 v1/vt1/vn1 v2/vt2/vn2 . . .

自由形式几何的元素声明。

指定曲面,其参数范围及其控制顶点。在s0的全局参数范围内评估曲面在u方向上为s1,在v方向上为t0至t1。

s0是u中曲面的起始参数值方向。

s1是u中曲面的end参数值方向。

t0是v中曲面的起始参数值方向。

t1是v中曲面的end参数值方向。

v是曲面中控制顶点的参考编号。

vt是一个可选参数。

vt是曲面中纹理顶点的参考编号。它必须始终遵循第一个斜线。

vn是一个可选参数。

vn是曲面中顶点法线的参考编号。它必须始终遵循第二个斜线。

对于非有理曲面,控制顶点是3D。为一个有理表面控制顶点可以是3D或4D。第四个如果省略,坐标(权重)默认为1.0。

注意:有关控制点排序的更多信息,请参阅表面和控制点部分“自由曲线/曲面的数学”结尾附录。

例子

这些是多边形几何的示例。

有关使用自由形式几何的示例,请参阅末尾的示例下一节“自由曲线/曲面体声明”。

1.方形 Square

此示例显示了一个方形,用于测量每侧的两个单位面向正方向(朝向相机)。请注意顶点的排序是逆时针的。这种排序决定了方形面向前方。

v 0.000000 2.000000 0.000000
v 0.000000 0.000000 0.000000
v 2.000000 0.000000 0.000000
v 2.000000 2.000000 0.000000
f 1 2 3 4

2.立方体 Cube

这是一个立方体,每侧测量两个单位。每个顶点都是由三个不同的面共享。

v 0.000000 2.000000 2.000000
v 0.000000 0.000000 2.000000
v 2.000000 0.000000 2.000000
v 2.000000 2.000000 2.000000
v 0.000000 2.000000 0.000000
v 0.000000 0.000000 0.000000
v 2.000000 0.000000 0.000000
v 2.000000 2.000000 0.000000
f 1 2 3 4
f 8 7 6 5
f 4 3 7 8
f 5 1 4 8
f 5 6 2 1
f 2 6 7 3

3.具有负参考数字的立方体 Cube with negative reference numbers

这是一个具有负顶点引用数字的立方体。每个元素引用存储在文件正上方的顶点。注意顶点不共享。

v 0.000000 2.000000 2.000000
v 0.000000 0.000000 2.000000
v 2.000000 0.000000 2.000000
v 2.000000 2.000000 2.000000
f -4 -3 -2 -1

v 2.000000 2.000000 0.000000
v 2.000000 0.000000 0.000000
v 0.000000 0.000000 0.000000
v 0.000000 2.000000 0.000000
f -4 -3 -2 -1

v 2.000000 2.000000 2.000000
v 2.000000 0.000000 2.000000
v 2.000000 0.000000 0.000000
v 2.000000 2.000000 0.000000
f -4 -3 -2 -1

v 0.000000 2.000000 0.000000
v 0.000000 2.000000 2.000000
v 2.000000 2.000000 2.000000
v 2.000000 2.000000 0.000000
f -4 -3 -2 -1

v 0.000000 2.000000 0.000000
v 0.000000 0.000000 0.000000
v 0.000000 0.000000 2.000000
v 0.000000 2.000000 2.000000
f -4 -3 -2 -1

v 0.000000 0.000000 2.000000
v 0.000000 0.000000 0.000000
v 2.000000 0.000000 0.000000
v 2.000000 0.000000 2.000000
f -4 -3 -2 -1

自由曲线/曲面体声明 Free-form curve/surface body statements

您可以为自由曲线和曲面指定其他信息元素使用一系列称为body语句的语句。该系列以最终声明end。

Body语句只有在自由格式之间出现时才有效元素陈述(curv,curv2,surf)和end陈述。如果他们在.obj文件中的任何其他位置,它们没有任何效果。

您可以使用body语句指定以下值:

​ 参数 parameter

​ 结矢量 knot vector

​ trim 循环 trim ming loop

​ 洞 hole

​ 特殊曲线 special curve

​ 特殊点 special point

你不能在自由曲线之间使用任何其他声明:表面声明和end声明。使用任何其他类型的声明可能会导致不可预测的结果。

示例文件的这一部分显示了a的结矢量值合理的B样条曲面,带有trim 环。注意end声明end机构声明。

cstype rat bspline
deg 2 2
surf -1.0 2.5 -2.0 2.0 -9 -8 -7 -6 -5 -4 -3 -2 -1
parm u -1.00 -1.00 -1.00 2.50 2.50 2.50
parm v -2.00 -2.00 -2.00 -2.00 -2.00 -2.00
trim  0.0 2.0 1
end

参数值和结向量 Parameter values and knot vectors

所有曲线和曲面元素都需要一组参数值。

对于多项式曲线和曲面,它指定全局参数值。对于B样条曲线和曲面,这指定了结向量。

对于曲面,必须为u和指定参数值v方向。对于曲线,必须为其指定参数值只有你的方向。

如果多个参数值语句为同一参数方向用于单个曲线或曲面体内,最后一个语句被使用。

trim 环和孔 trim ming loops and holes

trim 循环语句将单个外部trim 循环构建为位于给定表面上的曲线序列。

hole语句构建一个内部trim 循环作为序列位于给定表面上的曲线。内环形成一个洞。

曲线以与顶点相同的方式用数字引用由面部元素引用。

各个曲线必须端到端地形成闭环不与自身相交且位于参数范围内为表面指定。整个循环可以定向任一方向(顺时针或逆时针)。

要剪切区域中的一个或多个孔,请使用trim 语句,然后使用一个或多个空洞陈述。引入另一个trim 区域相同的表面,使用另一个trim 语句,后跟一个或多个孔声明。关联孔和它们切割区域的顺序很重要,必须保持。

如果序列中的第一个trim 语句被省略,则为封闭外部trim 环被认为是表面的参数范围。如果没有指定trim 或hole语句,那么表面就是在其参数范围内trim 。

样本文件的这一部分显示了非理性贝塞尔曲面
两个区域,每个区域都有一个洞:

cstype bezier
deg 1 1
surf 0.0 2.0 0.0 2.0 1 2 3 4
parm u 0.00 2.00
parm v 0.00 2.00
trim  0.0 4.0 1
hole 0.0 4.0 2
trim  0.0 4.0 3
hole 0.0 4.0 4
end

特殊曲线 Special curve

特殊曲线语句将单个特殊曲线构建为序列位于给定表面上的曲线。

曲线以与顶点相同的方式用数字引用由面部元素引用。

保证在任何三角测量中都包含特殊曲线表面。这意味着通过近似形成的线实际上,具有一系列直线段的特殊曲线在最终的三角测量中显示为一系列三角形边。

特殊点 Special point

特殊的点语句指定特殊的几何点与曲线或曲面相关联。用于空间曲线和trim 曲线,参数顶点必须是1D。对于曲面,参数顶点必须是2D。

这些特殊点将包含在任何线性近似值中曲线或曲面。

对于空间曲线,这意味着对应于给定的点曲线参数作为近似中的一个顶点包含在内由一系列线段组成。

对于曲面,这意味着对应于给定的点表面参数包含在中的三角形顶点中三角测量。

对于trim 曲线,处理略有不同:特殊trim 曲线上的点基本上与特殊点相同它trim 的表面。

示例文件的以下部分显示了一个特殊点
表面上有理的Bezier二维曲线。

vp -0.675 1.850 3.000
vp 0.915 1.930
vp 2.485 0.470 2.000
vp 2.485 -1.030
vp 1.605 -1.890 10.700
vp -0.745 -0.654 0.500
cstype rat bezier
curv2 -6 -5 -4 -3 -2 -1 -6
parm u 0.00 1.00 2.00
sp 2 3
end

句法

以下语法语句按正常使用顺序列出。

parm u p1 p2 p3 . . .

parm v p1 p2 p3 . . .

自由形式几何体的声明。

指定全局参数值。对于B样条曲线和表面,这指定结向量。

u是参数值的u方向。

v是参数值的v方向。

要设置u和v值,请使用单独的命令行。

p是全局参数或结值。您可以指定多个值。至少需要两个参数值。参数价值必须单调增加。表面的类型和度数决定了所需的数量。

trim u0 u1 curv2d u0 u1 curv2d . . .

自由形式几何体的声明。

指定用于构建单个外部trim的曲线序列环。

u0是trim曲线curv2d的起始参数值。

u1是trim曲线curv2d的end参数值。

curv2d是位于参数中的trim曲线的索引表面的空间。此曲线必须先前已定义与curv2声明。

hole u0 u1 curv2d u0 u1 curv2d . . .

自由形式几何体的声明。

指定一系列曲线以构建单个内部trim循环(洞)。

u0是trim曲线curv2d的起始参数值。

u1是trim曲线curv2d的end参数值。

curv2d是位于参数中的trim曲线的索引表面的空间。此曲线必须先前已定义与curv2声明。

scrv u0 u1 curv2d u0 u1 curv2d . . .

自由形式几何体的声明。

指定位于给定曲面上的曲线序列建立一条特殊的曲线。

u0是特殊曲线curv2d的起始参数值。

u1是特殊曲线curv2d的end参数值。

curv2d是位于参数中的特殊曲线的索引表面的空间。此曲线必须先前已定义与curv2声明。

sp vp1 vp . . .

自由形式几何体的声明。

指定与曲线或关联的特殊几何点表面。对于空间曲线和trim曲线,参数顶点必须是1D。对于曲面,参数顶点必须为2D。

vp是特殊参数顶点的引用号指向与曲线的参数空间点相关联或表面。

end

自由形式几何体的声明。

指定由曲线开始的曲线或曲面体的末端,curv2,或surf声明。

例子

1.泰勒曲线

    For creating a single-segment Taylor polynomial curve of the form:
                                2         3         4
	x =  3.00 +  2.30t +  7.98t  +  8.30t  +  6.34t 
                                2         3         4
	y =  1.00 - 10.10t +  5.40t  -  4.70t  +  2.03t 
                                2         3         4
	z = -2.50 +  0.50t -  7.00t  + 18.10t  +  0.08t 

并在全局参数0.5和1.6之间进行评估:

v 3.000 1.000 -2.500
v 2.300 -10.100 0.500
v 7.980 5.400 -7.000
v 8.300 -4.700 18.100
v 6.340 2.030 0.080
cstype taylor
deg 4
curv 0.500 1.600 1 2 3 4 5
parm u 0.000 2.000
end

2.贝塞尔曲线

此示例显示了具有13个控制点的非理性Bezier曲线。

v -2.300000 1.950000 0.000000
v -2.200000 0.790000 0.000000
v -2.340000 -1.510000 0.000000
v -1.530000 -1.490000 0.000000
v -0.720000 -1.470000 0.000000
v -0.780000 0.230000 0.000000
v 0.070000 0.250000 0.000000
v 0.920000 0.270000 0.000000
v 0.800000 -1.610000 0.000000
v 1.620000 -1.590000 0.000000
v 2.440000 -1.570000 0.000000
v 2.690000 0.670000 0.000000
v 2.900000 1.980000 0.000000
#13个顶点

cstype bezier
ctech cparm 1.000000
deg 3
curv 0.000000 4.000000 1 2 3 4 5 6 7 8 9 10
11 12 13
parm u 0.000000 1.000000 2.000000 3.000000 \
4.000000
end
#1元素
  1. B样条曲面

这是立方B样条曲面的示例。

g bspatch
v -5.000000 -5.000000 -7.808327
v -5.000000 -1.666667 -7.808327
v -5.000000 1.666667 -7.808327
v -5.000000 5.000000 -7.808327
v -1.666667 -5.000000 -7.808327
v -1.666667 -1.666667 11.977780
v -1.666667 1.666667 11.977780
v -1.666667 5.000000 -7.808327
v 1.666667 -5.000000 -7.808327
v 1.666667 -1.666667 11.977780
v 1.666667 1.666667 11.977780
v 1.666667 5.000000 -7.808327
v 5.000000 -5.000000 -7.808327
v 5.000000 -1.666667 -7.808327
v 5.000000 1.666667 -7.808327
v 5.000000 5.000000 -7.808327
#16个顶点

cstype bspline
stech curv 0.5 10.000000
deg 3 3
8surf 0.000000 1.000000 0.000000 1.000000 13 14 \ 15 16 9 10 11 12 5 6
7 8 1 2 3 4
parm u -3.000000 -2.000000 -1.000000 0.000000 \
1.000000 2.000000 3.000000 4.000000
parm v -3.000000 -2.000000 -1.000000 0.000000 \
1.000000 2.000000 3.000000 4.000000
end
#1元素

4.Cardinal表面

此示例显示了一个Cardinal表面。

 v -5.000000 -5.000000 0.000000
v -5.000000 -1.666667 0.000000
v -5.000000 1.666667 0.000000
v -5.000000 5.000000 0.000000
v -1.666667 -5.000000 0.000000
v -1.666667 -1.666667 0.000000
v -1.666667 1.666667 0.000000
v -1.666667 5.000000 0.000000
v 1.666667 -5.000000 0.000000
v 1.666667 -1.666667 0.000000
v 1.666667 1.666667 0.000000
v 1.666667 5.000000 0.000000
v 5.000000 -5.000000 0.000000
v 5.000000 -1.666667 0.000000
v 5.000000 1.666667 0.000000
v 5.000000 5.000000 0.000000
#16个顶点

cstype Cardinal
stech cparma 1.000000 1.000000
deg 3 3
surf 0.000000 1.000000 0.000000 1.000000 13 14
15 16 9 10 11 12 5 6 7 8 1 2 3 4
parm u 0.000000 1.000000
parm v 0.000000 1.000000
end
#1元素

5.理性B样条曲面

此示例使用创建二度有理B样条曲面开放,统一的结矢量。纹理贴图应用于曲面。

v -1.3 -1.0 0.0
v 0.1 -1.0 0.4 7.6
v 1.4 -1.0 0.0 2.3
v -1.4 0.0 0.2
v 0.1 0.0 0.9 0.5
v 1.3 0.0 0.4 1.5
v -1.4 1.0 0.0 2.3
v 0.1 1.0 0.3 6.1
v 1.1 1.0 0.0 3.3
vt 0.0 0.0
vt 0.5 0.0
vt 1.0 0.0
vt 0.0 0.5
vt 0.5 0.5
vt 1.0 0.5
vt 0.0 1.0
vt 0.5 1.0
vt 1.0 1.0
cstype rat bspline
deg 2 2
surf 0.0 1.0 0.0 1.0 1/1 2/2 3/3 4/4 5/5 6/6 \
7/7 8/8 9/9
parm u 0.0 0.0 0.0 1.0 1.0 1.0
parm v 0.0 0.0 0.0 1.0 1.0 1.0
end

6.修剪NURB表面

这是包含t修剪NURB曲面的文件的完整示例,具有顶点的负参考数字。

#trim 曲线
vp -0.675 1.850 3.000
vp 0.915 1.930
vp 2.485 0.470 2.000
vp 2.485 -1.030
vp 1.605 -1.890 10.700
vp -0.745 -0.654 0.500
cstype rat bezier
deg 3
curv2 -6 -5 -4 -3 -2 -1 -6
parm u 0.00 1.00 2.00
end
#face
v -1.350 -1.030 0.000
v 0.130 -1.030 0.432 7.600
v 1.480 -1.030 0.000 2.300
v -1.460 0.060 0.201
v 0.120 0.060 0.915 0.500
v 1.380 0.060 0.454 1.500
v -1.480 1.030 0.000 2.300
v 0.120 1.030 0.394 6.100
v 1.170 1.030 0.000 3.300
cstype rat bspline
deg 2 2
surf -1.0 2.5 -2.0 2.0 -9 -8 -7 -6 -5 -4 -3 -2 -1
parm u -1.00 -1.00 -1.00 2.50 2.50 2.50
parm v -2.00 -2.00 -2.00 -2.00 -2.00 -2.00
trim  0.0 2.0 1
end

7.两个带孔的修剪区域

此示例显示了Bezier曲面,每个曲面都有两个修剪区域有一个洞。

e#第一个区域的外环
deg 1
cstype bezier
vp 0.100 0.100
vp 0.900 0.100
vp 0.900 0.900
vp 0.100 0.900
curv2 1 2 3 4 1
parm u 0.00 1.00 2.00 3.00 4.00
end
#第一区域的洞
vp 0.300 0.300
vp 0.700 0.300
vp 0.700 0.700
vp 0.300 0.700
curv2 5 6 7 8 5
parm u 0.00 1.00 2.00 3.00 4.00
end
#第二区域的外环
vp 1.100 1.100
vp 1.900 1.100
vp 1.900 1.900
vp 1.100 1.900
curv2 9 10 11 12 9
parm u 0.00 1.00 2.00 3.00 4.00
end
#第二区域的洞
vp 1.300 1.300
vp 1.700 1.300
vp 1.700 1.700
vp 1.300 1.700
curv2 13 14 15 16 13
parm u 0.00 1.00 2.00 3.00 4.00
end
#face
v 0.000 0.000 0.000
v 1.000 0.000 0.000
v 0.000 1.000 0.000
v 1.000 1.000 0.000
deg 1 1
cstype bezier
冲浪0.0 2.0 0.0 2.0 1 2 3 4
parm u 0.00 2.00
parm v 0.00 2.00
trim0.0 4.0 1
洞0.0 4.0 2
trim0.0 4.0 3
洞0.0 4.0 4
end

8.修剪特殊曲线
此示例类似于修剪的NURB曲面示例(6),除了
表面有一条特殊的曲线。此示例使用否定
顶点数。

#trim曲线
vp -0.675 1.850 3.000
vp 0.915 1.930
vp 2.485 0.470 2.000
vp 2.485 -1.030
vp 1.605 -1.890 10.700
vp -0.745 -0.654 0.500
cstype rat bezier
deg 3
curv2 -6 -5 -4 -3 -2 -1 -6
parm u 0.00 1.00 2.00
end
#特殊曲线
vp -0.185 0.322
vp 0.214 0.818
vp 1.652 0.207
vp 1.652 -0.455
curv2 -4 -3 -2 -1
parm u 2.00 10.00
end
#face
v -1.350 -1.030 0.000
v 0.130 -1.030 0.432 7.600
v 1.480 -1.030 0.000 2.300
v -1.460 0.060 0.201
v 0.120 0.060 0.915 0.500
v 1.380 0.060 0.454 1.500
v -1.480 1.030 0.000 2.300
v 0.120 1.030 0.394 6.100
v 1.170 1.030 0.000 3.300
cstyperatbspline
deg 2 2
surf-1.0 2.5 -2.0 2.0 -9 -8 -7 -6 -5 -4 -3 -2 -1
parm u -1.00 -1.00 -1.00 2.50 2.50 2.50
parm v -2.00 -2.00 -2.00 2.00 2.00 2.00
trim0.0 2.0 1
scrv 4.2 9.7 2
end

9.修剪特殊点

此示例将trim 的NURB曲面示例(6)扩展为包含
trim 曲线和曲面上的特殊点。空间曲线
还包括一个特殊点。此示例使用否定
顶点数。

#特殊点和空间曲线数据
vp 0.500
vp 0.700
vp 1.100
vp 0.200 0.950
v 0.300 1.500 0.100
v 0.000 0.000 0.000
v 1.000 1.000 0.000
v 2.000 1.000 0.000
v 3.000 0.000 0.000
cstype bezier
deg 3
曲率0.2 0.9 -4 -3 -2 -1
sp 1
parm u 0.00 1.00
end
#修剪曲线
vp -0.675 1.850 3.000
vp 0.915 1.930
vp 2.485 0.470 2.000
vp 2.485 -1.030
vp 1.605 -1.890 10.700
vp -0.745 -0.654 0.500
cstype rat bezier
curv2 -6 -5 -4 -3 -2 -1 -6
parm u 0.00 1.00 2.00
sp 2 3
end
#face
v -1.350 -1.030 0.000
v 0.130 -1.030 0.432 7.600
v 1.480 -1.030 0.000 2.300
v -1.460 0.060 0.201
v 0.120 0.060 0.915 0.500
v 1.380 0.060 0.454 1.500
v -1.480 1.030 0.000 2.300
v 0.120 1.030 0.394 6.100
v 1.170 1.030 0.000 3.300
cstyperatbspline
deg 2 2
surf -1.0 2.5 -2.0 2.0 -9 -8 -7 -6 -5 -4 -3 -2 -1
parm u -1.00 -1.00 -1.00 2.50 2.50 2.50
parm v -2.00 -2.00 -2.00 2.00 2.00 2.00
trim 0.0 2.0 1
sp 4
end

自由曲面之间的连通性

连通性沿着修剪曲线连接两个表面。

con语句指定第一个带有修剪曲线的曲面和第二个表面及其修剪曲线。这个信息是有用于边缘合并。没有这个曲面和曲线数据,连接必须以更高的费用和数字来确定使用mg语句降低准确性。

忽略不同合并组中的表面之间的连接。此外,虽然连接跨越C1不连续点修剪曲线是合法的,不建议使用。相反,使用两个在不连续点处满足的连通性陈述。

两条曲线及其起始和end参数都应该映射到对象空间中的相同曲线和起点和终点。

句法

con surf_1 q0_1 q1_1 curv2d_1 surf_2 q0_2 q1_2 curv2d_2

自由形式的几何声明。

指定两个曲面之间的连接。

surf_1是第一个表面的索引。

q0_1是引用的曲线的起始参数
curv2d_1。

q1_1是curv2d_1引用的曲线的end参数。

curv2d_1是第一个曲面上曲线的索引。这条曲线
必须先使用curv2语句定义。

surf_2是第二个表面的索引。

q0_2是引用的曲线的起始参数
curv2d_2。

q1_2是curv2d_2引用的曲线的end参数。

curv2d_2是第二个曲面上曲线的索引。这条曲线
必须先使用curv2语句定义。

1.两个表面之间的连通性

此示例显示了两个曲面之间的连接以进行修剪曲线。

cstype bezier
deg 1 1

v 0 0 0
v 1 0 0
v 0 1 0
v 1 1 0

vp 0 0
vp 1 0
vp 1 1
vp 0 1

curv 2 1 2 3 4 1
parm u 0.0 1.0 2.0 3.0 4.0
end

surf 0.0 1.0 0.0 1.0 1 2 3 4
parm u 0.0 1.0
parm v 0.0 1.0
trim 0.0 4.0 1
end

v 1 0 0
v 2 0 0
v 1 1 0
v 2 1 0

surf 0.0 1.0 0.0 1.0 5 6 7 8
parm u 0.0 1.0
parm v 0.0 1.0
trim 0.0 4.0 1
end

con 1 2.0 2.0 1 2 4.0 3.0 1

分组

.obj文件中有四个语句可帮助您操作组元素:

​ Gropu名称语句 Gropu name statements 用于组织集合元素和简化操作的数据操作模型。

​ 通过平滑组语句 Smoothing group statements,您可以识别其上的元素要插入法线以使这些元素平滑,非刻面的外观。这是指定顶点的快速方法法线。

​ 合并组语句 Merging group statements 用于识别自由格式元素应该检查邻接检测。你也可以使用合并组来排除足够接近的表面被认为是相邻的,但不应合并。

​ 对象名称语句 Object name statements 允许您为整个对象指定名称在一个文件中。

所有分组语句都是状态设置。这意味着一旦一个设置了group语句,它将跟随所有后面的元素直到下一组声明。

示例文件的这一部分显示属于的单个元素三组。平滑组已关闭。

    g square thing all
    s off
    f 1 2 3 4

此示例显示合并组1中的两个曲面,分辨率为0.5。

mg 1.5
surf0.0 1.0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
surf0.0 1.0 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32

句法

g group_name1 group_name2。。。

多边形和自由形式的几何声明。

指定其后面的元素的组名称。您可以有多个组名。如果一个上有多个组line,后面的数据属于所有组。集团信息是可选的。

group_name是组的名称。信件,数字和组名称可接受字母和数字的组合。默认组名称是默认值。

s group_number

多边形和自由形式的几何声明。

为其后的元素设置平滑组。如果你这样做不想使用平滑组,指定off或值为0。

要在模型和预览中使用平滑着色显示,您必须分配平滑组后创建顶点法线。您可以使用vn语句或使用。创建顶点法线模型程序。

要平滑多边形几何体以使用Image进行渲染,它是足以将元素放入某些平滑组中。但是,顶点法线覆盖图像的平滑信息。

group_number是平滑组编号。关闭平滑组,使用值0或关闭。多边形元素使用组将元素放在不同的平滑组中的数字。对于自由曲面,平滑组打开或关闭;大于0的值之间没有区别。

mg group_number res

自由形式的几何声明。

设置自由格式的合并组和合并分辨率跟随它的表面。如果您不想使用合并组,指定off或值为0。

邻接检测仅在组内执行,从不在组之间执行组。不同合并组中表面之间的连通性不被允许。合并同一合并组中的曲面沿着距离内的边缘分开。

注意:邻接检测是一种昂贵的数值比较处理。最好将此过程限制为一个小域尽可能使用小型合并组。

group_number是合并组号。关闭邻接检测,使用值0或关闭。

res是两个表面之间的最大距离合并在一起。分辨率必须大于0。仅在使用合并组时,这是必需参数。

o object_name

多边形和自由形式的几何声明。

可选声明; 任何Wavefront程序都不会处理它。它为定义的元素指定用户定义的对象名称在此声明之后。

object_name是用户定义的对象名称。没有默认值。

例子

1.具有组名的多维数据集

以下示例是一个多维数据集,其每个面都放在一个
分开的小组。此外,所有元素都属于组多维数据集。

    v 0.000000 2.000000 2.000000
    v 0.000000 0.000000 2.000000
    v 2.000000 0.000000 2.000000
    v 2.000000 2.000000 2.000000
    v 0.000000 2.000000 0.000000
    v 0.000000 0.000000 0.000000
    v 2.000000 0.000000 0.000000
    v 2.000000 2.000000 0.000000
    # 8 vertices

    g front cube
    f 1 2 3 4
    g back cube
    f 8 7 6 5
    g right cube
    f 4 3 7 8
    g top cube
    f 5 1 4 8
    g left cube
    f 5 6 2 1
    g bottom cube
    f 2 6 7 3
    # 6 elements

2.两个相邻的正方形,有一个平滑组

此示例显示了共享公共边的两个相邻正方形。该将正方形放置在平滑组中以确保它们的共同点使用Image渲染时,边缘将被平滑。

v 0.000000 2.000000 0.000000
v 0.000000 0.000000 0.000000
v 2.000000 0.000000 0.000000
v 2.000000 2.000000 0.000000
v 4.000000 0.000000 -1.255298
v 4.000000 2.000000 -1.255298
#6个顶点

g all
s 1
f 1 2 3 4
f 4 3 5 6
#2元素

3.具有顶点法线的两个相邻正方形

此示例还显示了共享公共边的两个正方形。顶点法线已添加到每个方格的角落以确保在Model和PreView中显示时,它们的公共边缘将被平滑当用Image渲染时。

v 0.000000 2.000000 0.000000
v 0.000000 0.000000 0.000000
v 2.000000 0.000000 0.000000
v 2.000000 2.000000 0.000000
v 4.000000 0.000000 -1.255298
v 4.000000 2.000000 -1.255298
vn 0.000000 0.000000 1.000000
vn 0.000000 0.000000 1.000000
vn 0.276597 0.000000 0.960986
vn 0.276597 0.000000 0.960986
vn 0.531611 0.000000 0.846988
vn 0.531611 0.000000 0.846988
#6个顶点

#6法线

g all
s 1
f 1 // 1 2 // 2 3 // 3 4 // 4
f 4 // 4 3 // 3 5 // 5 6 // 6
#2元素

4.合并组

此示例显示了两个在公共边相交的Bezier曲面。他们两者都被安排在同一个合并组中以确保连续性他们相遇的边缘。这可以防止“裂缝”出现。合并小组会在平面着色,平滑着色和材质着色期间被忽略表面。

v -4.949854 -5.000000 0.000000
v -4.949854 -1.666667 0.000000
v -4.949854 1.666667 0.000000
v -4.949854 5.000000 0.000000
v -1.616521 -5.000000 0.000000
v -1.616521 -1.666667 0.000000
v -1.616521 1.666667 0.000000
v -1.616521 5.000000 0.000000
v 1.716813 -5.000000 0.000000
v 1.716813 -1.666667 0.000000
v 1.716813 1.666667 0.000000
v 1.716813 5.000000 0.000000
v 5.050146 -5.000000 0.000000
v 5.050146 -1.666667 0.000000
v 5.050146 1.666667 0.000000
v 5.050146 5.000000 0.000000
v -15.015566 -4.974991 0.000000
v -15.015566 -1.641658 0.000000
v -15.015566 1.691675 0.000000
v -15.015566 5.025009 0.000000
v -11.682233 -4.974991 0.000000
v -11.682233 -1.641658 0.000000
v -11.682233 1.691675 0.000000
v -11.682233 5.025009 0.000000
v -8.348900 -4.974991 0.000000
v -8.348900 -1.641658 0.000000
v -8.348900 1.691675 0.000000
v -8.348900 5.025009 0.000000
v -5.015566 -4.974991 0.000000
v -5.015566 -1.641658 0.000000
v -5.015566 1.691675 0.000000
v -5.015566 5.025009 0.000000

mg 1 0.500000

cstype bezier
deg 3 3
surf 0.000000 1.000000 0.000000 1.000000 13 14
15 16 9 10 11 12 5 6 7 8 1 2 3 4
parm u 0.000000 1.000000
parm v 0.000000 1.000000
end
surf 0.000000 1.000000 0.000000 1.000000 29 30 31 32 25 26 27 28 21 22
23 24 17 18 19 20
parm u 0.000000 1.000000
parm v 0.000000 1.000000
end

显示/渲染属性 Display/render attributes

显示和渲染属性描述对象在何时显示显示在Model和PreView中或使用Image渲染时。

某些属性适用于自由形状和多边形几何,例如材质名称和库,光线跟踪和阴影投射。插值属性仅适用于多边形几何。曲线和表面分辨率仅用于自由形状几何体。

所有显示和呈现属性语句都是状态设置。这个表示一旦设置了属性语句,它就适用于所有后面的元素,直到它重置为不同的值。

以下示例显示了面的呈现和显示语句元件:

s 1
usemtl blue
usemap marble
f 1 2 3 4

句法

以下语法语句按几何类型列出。首先是多边形几何的陈述。第二个是声明自由形状和多边形几何。第三是声明仅自由形式的几何。

bevel on/off

多边形几何陈述。

设置斜角插值的开或关。它只适用于斜面对象,即具有由斜面分开的边的对象。

斜角插值使用法向矢量插值来给出圆形斜面的错觉。它不会影响平滑非斜面。

斜角插补不会改变原件的几何形状宾语。

在转弯斜面插补。

关闭斜角插补。默认为关闭。

注意:图像无法渲染具有斜角插值元素顶点法线。

c_interp on/off

多边形几何陈述。

设置打开或关闭颜色插值。

颜色插值在多边形的表面上创建混合在分配给它的顶点的材料之间。这创造了一个在面部元素上混合颜色。

要支持颜色插值,必须分配材料顶点,而不是每个元素。所有材料的照明模型附加到多边形的顶点必须相同。颜色插值适用于环境(Ka),漫反射(Kd),镜面反射(Ks)和镜面反射高光(Ns)材质属性。

打开颜色插值。

关闭关闭颜色插值。默认为关闭。

d_interp on/off

多边形几何陈述。

设置溶解插值打开或关闭。

溶解插值创建插值或混合所分配材料的溶解(d)值之间的多边形到它的顶点。此功能用于创建展示效果不同程度的表观透明度,如玻璃或云。

为了支持溶解插值,必须分配材料顶点,而不是每个元素。分配给顶点的所有材质参与溶解插值必须包含溶解factor命令指定一个溶解。

关闭溶解插值。默认为关闭。

lod level

多边形和自由形式的几何声明。

设置要在PreView动画中显示的细节级别。细节级别功能可让您控制其中的哪些元素在PreView中工作时显示对象。

level是要显示的详细程度。当你设置细节级别为0或省略lod语句,所有元素都是显示。指定1到100之间的整数可设置级别读取.obj文件时要显示的详细信息。

maplib filename1 filename2 . . .

这是一个指定地图库文件的渲染标识符用于使用usemap标识符设置的纹理贴图定义。您可以使用maplib指定多个文件名。如果有多个文件名如果指定,则首先搜索列出的第一个文件以查找地图定义,接下来搜索第二个文件,依此类推。

使用Model程序分配地图库时,Model允许每个.obj文件只有一个地图库。您可以分配多个库使用文本编辑器。

filename是纹理贴图所在的库文件的名称定义。没有默认值。

usemap map_name / off

这是一个指定纹理贴图名称的渲染标识符对于它后面的元素。要关闭纹理映射,请指定关闭而不是地图名称。

如果为没有纹理顶点的面指定纹理贴图,纹理贴图将被忽略。

map_name是纹理贴图的名称。

off关闭纹理映射。默认为关闭。

usemtl material_name

多边形和自由形式的几何声明。

指定其后面的元素的材质名称。一旦材料已分配,不能关闭; 它只能是改变。

material_name是材料的名称。如果是材料名称未指定,使用白色材料。

mtllib filename1 filename2。。。

多边形和自由形式的几何声明。

指定材料定义的材料库文件使用usemtl语句设置。您可以指定多个文件名用mtllib。如果指定了多个文件名,则为第一个文件首先搜索列出的材料定义,第二个接下来搜索文件,依此类推。

仅使用“模型”程序分配材料库时每个.obj文件允许一个地图库。您可以分配多个库使用文本编辑器。

filename是定义的库文件的名称材料。没有默认值。

shadow_obj filename

多边形和自由形式的几何声明。

指定阴影对象文件名。此对象用于强制转换当前对象的阴影。阴影只在a中可见渲染图像; 使用硬件着色无法看到它们。该阴影对象除了阴影外是不可见的。

仅当对象具有阴影对象时,该对象才会投射阴影。您可以使用对象作为自己的阴影对象。但是,简化了原始对象的版本通常更适合阴影对象,因为阴影投射可以大大增加渲染时间。

filename是阴影对象的文件名。你可以输入任何阴影对象的有效对象文件名。目标文件可以是.obj或.mod文件。如果给出的文件名没有扩展名,假定.obj的扩展名。

只有一个阴影对象可以存储在文件中。如果不止一个指定了shadow对象,将使用指定的最后一个。

trace_obj文件名

多边形和自由形式的几何声明。

指定光线跟踪对象文件名。将使用此对象在反射时产生当前物体的反射表面。只有渲染图像才能看到反射; 他们使用硬件着色无法看到。

仅当对象具有跟踪对象时,该对象才会出现在反射中。您可以将对象用作自己的跟踪对象。但是,一个通常优选原始对象的简化版本跟踪对象,因为光线跟踪可以大大增加渲染时间。

filename是光线跟踪对象的文件名。你可以输入跟踪对象的任何有效对象文件名。你可以输入任何阴影对象的有效对象文件名。目标文件可以是.obj或.mod文件。如果给出的文件名没有扩展名,假定.obj的扩展名。

只有一个跟踪对象可以存储在文件中。如果不止一个指定,使用最后一个。

ctech技术解决方案

自由形式的几何声明。

指定曲线近似技术。参数指定曲线的技术和分辨率。

您必须从以下三种技术中选择一种。

ctech cparm res

使用指定具有常量参数细分的曲线一个分辨率参数。曲线的每个多项式段在参数空间中细分n次,其中n是分辨率参数乘以曲线的程度。

res是分辨率参数。值越大,值越大分辨率更高。如果res的值为0,则为每个多项式曲线段由单个线段表示。

ctech cspace maxlength

指定具有常量空间细分的曲线。曲线由一系列长度为的线段近似实空间小于或等于maxlength。

maxlength是线段的最大长度。该值越小,分辨率越精细。

ctech curv maxdist maxangle

使用单独指定曲率相关细分分辨率参数为最大距离和最大值角度。

该曲线由一系列线段近似1)线段与线段之间的物距空间距离实际曲线必须小于maxdist参数和2)一条直线末端切线向量之间的角度segment必须小于maxangle参数。

maxdist是线段之间的实际空间距离和实际的曲线。

maxangle是切线向量之间的角度(以度为单位)线段的末端。

maxdist和maxangle的值越小,越精细解析度。

注意:修剪,孔和特殊的近似信息曲线存储在相应的曲面中。ctech声明对于表面使用,而不是应用于ctech语句curv2声明。虽然未trim 的表面没有明确的trim 循环,构造一个限制合法的循环参数范围。此隐式循环遵循与任何规则相同的规则其他循环并根据ctech信息进行近似对于表面。

stech技术解决方案

自由形式的几何声明。

指定表面近似技术。参数指定表面的技术和分辨率。

您必须选择以下技术之一:

stech cparma ures vres

使用指定具有常量参数细分的曲面u和v方向的单独分辨率参数。每表面的补丁在参数空间中被细分n次,其中n是分辨率参数乘以度数表面。

ures是u方向的分辨率参数。

vres是v方向的分辨率参数。

ures和vres的值越大,越细解析度。如果为ures和vres输入值0,每个补丁由两个三角形近似。

stech cparmb uvres

指定具有常量参数细分的曲面,使用使用u和v的一个分辨率参数进行细化方向。

仅使用点来执行初始三角测量修剪曲线。然后将这种三角测量提炼到直到所有边缘都有适当的长度。生成的三角形不是沿着等参线定向的,因为它们在cparma技术。

uvres是u和v的分辨率参数方向。值越大,分辨率越精细。

stech cspace maxlength

指定具有常量空间细分的曲面。

表面被细分为矩形区域,直到任何矩形边缘的真实空间中的长度小于最长长度。然后对这些矩形区域进行三角测量。

maxlength是任何矩形边的实空间长度。值越小,分辨率越精细。

stech curv maxdist maxangle

使用指定具有曲率相关细分的曲面单独的分辨率参数为最大距离和最大角度。

表面被细分为矩形区域,直到1)近似矩形与近似矩形之间的真实距离实际表面小于maxdist(大约)和2)角落处的表面法线之间的角度矩形的小于maxangle。以下细分,区域是三角形的。

maxdist是近似值之间的实际空间距离矩形和实际表面。

maxangle是曲面法线之间的角度矩形的角落。

maxdist和maxangle的值越小,越精细解析度。

例子

1.材料立方体

此立方体的每个面都应用了不同的材质。

    mtllib master.mtl

    v 0.000000 2.000000 2.000000
    v 0.000000 0.000000 2.000000
    v 2.000000 0.000000 2.000000
    v 2.000000 2.000000 2.000000
    v 0.000000 2.000000 0.000000
    v 0.000000 0.000000 0.000000
    v 2.000000 0.000000 0.000000
    v 2.000000 2.000000 0.000000
    # 8 vertices

    g front
    usemtl red
    f 1 2 3 4
    g back
    usemtl blue
    f 8 7 6 5
    g right
    usemtl green
    f 4 3 7 8
    g top
    usemtl gold
    f 5 1 4 8
    g left
    usemtl orange
    f 5 6 2 1
    g bottom
    usemtl purple
    f 2 6 7 3
    # 6 elements

2.立方体投下阴影

在此示例中,立方体在其他对象上投射阴影
用Image渲染。多维数据集,存储在文件cube.obj中,
引用自己作为阴影对象。

	mtllib master.mtl
	shadow_obj cube.obj

    v 0.000000 2.000000 2.000000
    v 0.000000 0.000000 2.000000
    v 2.000000 0.000000 2.000000
    v 2.000000 2.000000 2.000000
    v 0.000000 2.000000 0.000000
    v 0.000000 0.000000 0.000000
    v 2.000000 0.000000 0.000000
    v 2.000000 2.000000 0.000000
    # 8 vertices

    g front
    usemtl red
    f 1 2 3 4
    g back
    usemtl blue
    f 8 7 6 5
    g right
    usemtl green
    f 4 3 7 8
    g top
    usemtl gold
    f 5 1 4 8
    g left
    usemtl orange
    f 5 6 2 1
    g bottom
    usemtl purple
    f 2 6 7 3
    # 6 elements

3.立方体投射反射

这个立方体在任何反射物体上投射它的反射
用图像渲染。多维数据集,存储在文件cube.obj中,
将自身引用为跟踪对象。

    mtllib master.mtl
    trace_obj cube.obj

    v 0.000000 2.000000 2.000000
    v 0.000000 0.000000 2.000000
    v 2.000000 0.000000 2.000000
    v 2.000000 2.000000 2.000000
    v 0.000000 2.000000 0.000000
    v 0.000000 0.000000 0.000000
    v 2.000000 0.000000 0.000000
    v 2.000000 2.000000 0.000000
    # 8 vertices

    g front
    usemtl red
    f 1 2 3 4
    g back
    usemtl blue
    f 8 7 6 5
    g right
    usemtl green
    f 4 3 7 8
    g top
    usemtl gold
    f 5 1 4 8
    g left
    usemtl orange
    f 5 6 2 1
    g bottom
    usemtl purple
    f 2 6 7 3
    # 6 elements

4.纹理映射方形

此示例描述了一个2 x 2的正方形。它用1 x 1平方映射
质地。纹理被拉伸以完全适合方形。

mtllib master.mtl

v 0.000000 2.000000 0.000000
v 0.000000 0.000000 0.000000
v 2.000000 0.000000 0.000000
v 2.000000 2.000000 0.000000
vt 0.000000 1.000000 0.000000
vt 0.000000 0.000000 0.000000
vt 1.000000 0.000000 0.000000
vt 1.000000 1.000000 0.000000
# 4 vertices

usemtl wood
f 1/1 2/2 3/3 4/4
# 1 element

5.表面的近似技术

此示例显示了将使用近似的B样条曲面由stech命令指定的曲率相关细分。

g bspatch
v -5.000000 -5.000000 -7.808327
v -5.000000 -1.666667 -7.808327
v -5.000000 1.666667 -7.808327
v -5.000000 5.000000 -7.808327
v -1.666667 -5.000000 -7.808327
v -1.666667 -1.666667 11.977780
v -1.666667 1.666667 11.977780
v -1.666667 5.000000 -7.808327
v 1.666667 -5.000000 -7.808327
v 1.666667 -1.666667 11.977780
v 1.666667 1.666667 11.977780
v 1.666667 5.000000 -7.808327
v 5.000000 -5.000000 -7.808327
v 5.000000 -1.666667 -7.808327
v 5.000000 1.666667 -7.808327
v 5.000000 5.000000 -7.808327
#16个顶点

g bspatch
cstype bspline
stech curv 0.5 10.000000
deg 3 3
surf 0.000000 1.000000 0.000000 1.000000 13 14 \ 15 16 9 10 11 12 5 6 7
8 1 2 3 4
parm u -3.000000 -2.000000 -1.000000 0.000000 \
1.000000 2.000000 3.000000 4.000000
parm v -3.000000 -2.000000 -1.000000 0.000000 \
1.000000 2.000000 3.000000 4.000000
end
#1元素

6.曲线的近似技术

此示例显示将使用的近似Bezier曲线由ctech命令指定的恒定参数细分。

v -2.300000 1.950000 0.000000
v -2.200000 0.790000 0.000000
v -2.340000 -1.510000 0.000000
v -1.530000 -1.490000 0.000000
v -0.720000 -1.470000 0.000000
v -0.780000 0.230000 0.000000
v 0.070000 0.250000 0.000000
v 0.920000 0.270000 0.000000
v 0.800000 -1.610000 0.000000
v 1.620000 -1.590000 0.000000
v 2.440000 -1.570000 0.000000
v 2.690000 0.670000 0.000000
v 2.900000 1.980000 0.000000
#13个顶点

g default
cstype bezier
ctech cparm 1.000000
deg 3
curv 0.000000 4.000000 1 2 3 4 5 6 7 8 9 10
11 12 13
parm u 0.000000 1.000000 2.000000 3.000000 \
4.000000
end
#1元素

评论

注释可以出现在.obj文件中的任何位置。它们用于注释
文件; 他们没有被处理。

这是一个例子:

# this is a comment

Model程序在创建.obj时会自动插入注释文件。例如,它报告几何顶点的数量,纹理顶点和文件中的顶点法线。

    # 4 vertices
    # 4 texture vertices
    # 4 normals

【以下段我并未理解 --译者注】


Mathematics for free-form curves/surfaces

[I apologize but this section will make absolutely no sense whatsoever
 without the equations and diagrams and there was just no easy way to
 include them in a pure ASCII document.  You should probably just skip
 ahead to the section "Superseded statements."  -Jim]

General forms

Rational and non-rational curves and surfaces

In general, any non-rational curve segment may be written as:

where

K + 1    is the number of control points

di       are the control points

n        is the degree of the curve

Ni,n(t)          are the degree n basis functions

Extending this to the bivariate case, any non-rational surface patch
may be written as:

where:

K1 + 1   is the number of control points in the u direction

K2 + 1   is the number of control points in the v direction

di,j     are the control points

m        is the degree of the surface in the u direction

n        is the degree of the surface in the v direction

Ni,m(u)          are the degree m basis functions in the u direction

Nj,n(v)          are the degree n basis functions in the v direction

NOTE: The front of the surface is defined as the side where the u
parameter increases to the right and the v parameter increases upward.

We may extend this curve to the rational case as:



where wi are the weights associated with the control points di.
Similarly, a rational surface may be expressed as:

where wi,j  are the weights associated with the control points di,j.

NOTE: If a curve or surface in an .obj file is rational, it must use
the rat option with the cstype statement and it requires some weight
values for each control point.



The weights for the rational form are given as a third control point
coordinate (for trimming curves) or fourth coordinate (for space curves
and surfaces). These weights are optional and default to 1.0 if not
given.



This default weight is only reasonable for curves and surfaces whose
basis functions sum to 1.0, such as Bezier, Cardinal, and NURB. It does
not make sense for Taylor and may or may not make sense for a
representation given in basis-matrix form.

For all forms other than B-spline, the final curve or surface is
constructed by piecing together the individual curve segments or
surface patches. A global parameter space is then defined over the
entire composite curve or surface using the parameter vector given with
the parm statement.

The parameter vector for a curve is a list of p global parameter values
{t1, . . . , tp}. If t1  t < ti+1 is a point in global parameter space,
then:

is the corresponding point in local parameter space for the ith
polynomial segment. It is this t which is used when evaluating a given
segment of the piecewise curve. For surfaces, this mapping from global
to local parameter space is applied independently in both the u and v
parametric directions.

B-splines require a knot vector rather than a parameter vector,
although this is also given with the parm statement. Refer to the
description of B-splines below.

The following discussion of each type is expressed in terms of the
above definitions.

NOTE: The maximum degree for all curve and surface types is currently
set at 20, which is high enough for most purposes.

自由曲线和曲面类型

B样条

类型bspline指定任意度非均匀B样条通常被称为NURBs的理性形式。基础函数由Cox-deBoor递归公式定义为:

and:

where,按照惯例,0/0 = 0。

xi {x0 ,. 。。,xq}形成一个称为结矢量的集合由parm声明给出。这是必需的

  1. xi xi + 1,

  2. x0 <xn + 1,

  3. xq -n -1 <xq,

  4. xi <xi + n为0 <i <q - n - 1,

  5. xn t min <tmax xK + 1,其中[tmin,tmax]是参数要评估B样条,以及

  6. K = q - n - 1。

如果结的值重复r次,则称结具有多重性r在结矢量。上述第二至第四条件受到限制结在矢量的末端具有至多多重性n + 1其他地方最多n个。最后一个条件要求控制点的数量相等比结数减去一个数量。对于表面,所有上述条件均适用于u和v参数方向。

贝塞尔

类型bezier指定任意度Bezier曲线和曲面。这个基函数定义为:

where:

使用类型贝塞尔曲线时,给出的全局参数值的数量parm语句必须是K / n + 1,其中K是数字控制点。对于曲面,此要求独立应用对于u和v参数方向。

Cardinal

基数类型指定立方,一阶导数,连续曲线或表面。对于曲线,这将插入除第一个和最后一个之外的所有曲线控制点。对于曲面,除了第一行和最后一行和列之外的所有曲面对控制点进行插值。

Cardinal样条,也称为Catmull-Rom样条,是最好的通过考虑从Cardinal到贝塞尔的转换来理解单个曲线段的控制点:

这里,ci变量是Cardinal控制点和bi变量是贝塞尔控制点。我们看到第二个和第三个基数点是该点的起点和终点段,分别。此外,开始切线位于沿着从第一个到第三个点的矢量,以及end的切线从第二点到最后一点的向量。

如果我们让Bi(t)成为三次Bezier基函数(即什么是如上所述,Bezier为Ni,n(t),n = 3),那么我们可以写出基数功能如下:

请注意,Cardinal样条曲线仅针对立方体情况定义。

使用类型基数时,给出全局参数值的数量parm语句必须是K - n + 2,其中K是数字控制点。对于曲面,此要求独立应用对于u和v参数方向。

泰勒

类型泰勒指定任意度泰勒多项式曲线和表面。基本功能很简单:

注意:在这种情况下,控制点是多项式系数并没有明显的几何意义。

使用类型taylor时,给出的全局参数值的数量parm语句必须是(K + 1)/(n + 1)+ 1,其中K是控制点数量。对于表面,此要求适用独立于u和v参数方向。

基础矩阵

类型bmatrix指定通过定义的一般任意度曲线使用基础矩阵而不是像贝塞尔这样的显式类型。基函数定义为:

基础矩阵是bi,j。为了使矩阵性质这个更明显,我们也可以写:

构造基础矩阵时,应该保留这个定义因为不同的作者以不同的方式写这个。更常见的矩阵表示是:

要在.obj文件中使用这样的矩阵,只需转置矩阵和反转列排序。

当使用类型基础时,给出的全局参数值的数量parm语句必须是(K-n)/ s + 2,其中K是数字控制点和s是步骤语句给出的步长。对于曲面,此要求适用于u和v参数方向。

表面顶点数据

控制点

由单个贴片组成的表面的控制点是对于j = 0,以i = 0到K1的顺序列出,然后i = 0到K1j = 1,依此类推,直到j = K2。

对于由许多贴片组成的表面,这是通常的情况,控制点的排序就像表面是一个大的补丁一样。例如,由双三次贝塞尔曲面组成的控制点四个补丁的安排如下:

其中(m,n)是曲面的全局参数空间数字表示surf中顶点索引的排序声明。

纹理顶点和纹理映射

未提供纹理顶点时,原始曲面参数化用于纹理映射。但是,如果纹理提供顶点,它们被解释为附加信息单独插值或近似,但使用相同的插值函数作为控制顶点。

也就是说,在非理性的情况下,表面本身就是在“理性和非理性曲线和曲面”一节中给出如:

纹理顶点通过以下方式进行插值或近似:

其中ti,j是纹理顶点,基函数是与S(u,v)相同。它是T(u,v),而不是表面参数化(u,v),在应用纹理贴图时使用。

顶点法线和法线贴图

顶点法线的处理方式与纹理顶点完全相同。当顶点不提供法线,使用真实的法线法线。如果是顶点提供法线,计算如下:

其中qi,j是顶点法线,基函数是相同的至于S(u,v)和T(u,v)。

注意:顶点法线不会影响曲面的形状; 他们是简单地与最终的三角形顶点相关联三角测量。与面部一样,提供顶点法线仅影响表面的照明计算。

在案例中处理纹理顶点和顶点法线有理的表面是相同的。重要的是要注意甚至当表面S(u,v)合理时,纹理和法线表面,T(u,v)和Q(u,v)是不合理的。这是因为控制点(纹理顶点和顶点法线)永远不是理性的。

曲线和曲面操作

特别要点

以下等式给出了更精确的特殊描述空间曲线的点,并讨论trim 曲线的扩展和表面。

设C(t)为具有全局参数t的空间曲线。我们可以通过连接的一组k-1线段来近似该曲线要点:

对于某些k个全局参数值{t1,…,tk}

给定曲线参数空间中的特殊点ts(由vp引用),我们保证ts {t1 ,. 。。,TK}。更多具体来说,我们通过以下方式估

其中,在插入ts的点i,我们有ti ts <ti + 1。

特殊曲线

以下等式给出了一个特殊的更精确的描述曲线。

令T(t)为具有全局参数t的特殊曲线。我们有:

其中(m,n)是曲面的全局参数空间中的一个点。我们可以通过连接的一组k-1线段来近似该曲线要点:

对于某些k个全局参数值。

设S(m,n)为具有全局参数m和n的表面。我们可以通过一组p点的三角测量来近似该表面。

它们位于表面上。我们进一步将E定义为所有边的集合这样ei,j E意味着连接S(mi,ni)和S(mj,nj)三角测量。最后,我们保证存在一些子集E:

这样点:

在三角测量中连接。

连接

回想一下con语句的语法是:

con surf_1 q0_1 q1_1 curv2d_1 surf_2 q0_2 q1_2 curv2d_2

如果我们让:

T1(t1)是curv2d_1引用的曲线

S1(m1,n1)是由T1(t1)所在的surf1引用的表面

T2(t2)是由curv2d_2引用的曲线

S2(m2,n2)是由surf2引用的表面,T2(t2)位于其上

那么S1(T1(t1)),S2(T2(t2))必须相同才能重新参数化。
而且,必须是这样的情况:

S1(T1(q0_1))= S2(T2(q0_2))

和:

S1(T1(q1_1))= S2(T2(q1_2))

它沿着曲线S1(T1(t1))在t1 = q0_1和t1 = q1_1之间,并且
曲线S2(T2(t2))表示t2 = q0_2和t2 = q1_2之间的曲线
S1(m1,n1)连接到表面S2(m2,n2)。

被取代的陈述

新的.obj文件格式消除了对几个补丁和曲线陈述。这些陈述已被自由格式取代几何陈述。

在3.0版本中,以下关键字已被取代:

​ bsp

​ bzp

​ cdc

​ cdp

​ res

您仍然可以在此版本3.0中阅读这些语句,但是,系统将不再以此格式写入文件。

此版本是将阅读这些语句的最后一个版本。如果你想保存这种格式的任何数据,读入文件并写入出来。系统会将数据转换为新的.obj格式。

有关新语法语句的详细信息,请参阅“指定自由曲线和曲面。“

句法

以下语法语句适用于已取代的关键字。

bsp v1 v2。。。V16

指定B样条补丁。B样条补丁有十六个控制点,定义为顶点。只有四个控制点分布在贴片的表面; 其余的是分布在补丁的周边。

必须先在模型中对修补程序进行细分,然后才能正确进行修补阴影或渲染。

v是控制点的顶点编号。十六个顶点数是必要的。正值表示绝对顶点数。负值表示相对顶点数。

bzp v1 v2。。。V16

指定Bezier补丁。Bezier补丁有十六个控件点,定义为顶点。控制点是分布式的均匀地在其表面上。

必须先在模型中对修补程序进行细分,然后才能正确进行修补阴影或渲染。

v是控制点的顶点编号。十六个顶点数是必要的。正值表示绝对顶点数。负值表示相对顶点数。

cdc v1 v2 v3 v4 v5。。。

指定基数曲线。基数曲线至少有四个控制点,定义为顶点。

基数曲线无法正确着色或渲染。他们可以细分,然后在模型中挤出以创建3D形状。

v是控制点的顶点编号。至少四个顶点数是必需的。最大限度没有限制。正值表示绝对顶点数。负值表示相对顶点数。

cdp v1 v2 v3。。。V16

指定Cardinal补丁。Cardinal补丁有十六个控制点,定义为顶点。四个控制点是附在补丁的角落。

必须先在模型中对修补程序进行细分,然后才能正确进行修补阴影或渲染。

v是控制点的顶点编号。十六个顶点数是必要的。正值表示绝对顶点数。负值表示相对顶点数。

res useg vseg

参考和显示声明。

设置Bezier,B-spline和Cardinal的段数跟随它的补丁。

useg是u方向上的段数(水平或x方向)。最小设置为3,最大设置为120.默认值为4。

vseg是v方向上的段数(垂直或y)方向)。最小设置为3,最大设置为120.默认值为4。

比较2.11和3.0语法

基数曲线

以下示例显示了2.11语法和3.0语法
相同的基数曲线。

2.11基数曲线

#2.11Cardinal曲线

v 2.570000 1.280000 0.000000
v 0.940000 1.340000 0.000000
v -0.670000 0.820000 0.000000
v -0.770000 -0.940000 0.000000
v 1.030000 -1.350000 0.000000
v 3.070000 -1.310000 0.000000
#6个顶点

cdc 1 2 3 4 5 6

3.0基数曲线

#3.0基数曲线

v 2.570000 1.280000 0.000000
v 0.940000 1.340000 0.000000
v -0.670000 0.820000 0.000000
v -0.770000 -0.940000 0.000000
v 1.030000 -1.350000 0.000000
v 3.070000 -1.310000 0.000000
#6个顶点

cstypeCardinal
deg 3
curv 0.000000 3.000000 1 2 3 4 5 6
parm u 0.000000 1.000000 2.000000 3.000000
end
#1元素

贝齐尔补丁

以下示例显示了2.11语法和3.0语法同样的Bezier补丁。

2.11贝塞尔补丁

#2.11 Bezier补丁
v -5.000000 -5.000000 0.000000
v -5.000000 -1.666667 0.000000
v -5.000000 1.666667 0.000000
v -5.000000 5.000000 0.000000
v -1.666667 -5.000000 0.000000
v -1.666667 -1.666667 0.000000
v -1.666667 1.666667 0.000000
v -1.666667 5.000000 0.000000
v 1.666667 -5.000000 0.000000
v 1.666667 -1.666667 0.000000
v 1.666667 1.666667 0.000000
v 1.666667 5.000000 0.000000
v 5.000000 -5.000000 0.000000
v 5.000000 -1.666667 0.000000
v 5.000000 1.666667 0.000000
v 5.000000 5.000000 0.000000
#16个顶点

bzp 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
#1元素

3.0贝塞尔补丁

#3.0 Bezier补丁

v -5.000000 -5.000000 0.000000
v -5.000000 -1.666667 0.000000
v -5.000000 1.666667 0.000000
v -5.000000 5.000000 0.000000
v -1.666667 -5.000000 0.000000
v -1.666667 -1.666667 0.000000
v -1.666667 1.666667 0.000000
v -1.666667 5.000000 0.000000
v 1.666667 -5.000000 0.000000
v 1.666667 -1.666667 0.000000
v 1.666667 1.666667 0.000000
v 1.666667 5.000000 0.000000
v 5.000000 -5.000000 0.000000
v 5.000000 -1.666667 0.000000
v 5.000000 1.666667 0.000000
v 5.000000 5.000000 0.000000
#16个顶点

cstype bezier
deg 3 3
surf 0.000000 1.000000 0.000000 1.000000 13 14
15 16 9 10 11 12 5 6 7 8 1 2 3 4
parm u 0.000000 1.000000
parm v 0.000000 1.000000
end
#1元素
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值