File: cs_218.html

package info (click to toggle)
crystalspace 0.94-20020412-3
  • links: PTS
  • area: main
  • in suites: woody
  • size: 62,276 kB
  • ctags: 52,843
  • sloc: cpp: 274,783; ansic: 6,608; perl: 6,276; objc: 3,952; asm: 2,942; python: 2,354; php: 542; pascal: 530; sh: 430; makefile: 370; awk: 193
file content (497 lines) | stat: -rw-r--r-- 21,220 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<!-- Created by texi2html 1.64 -->
<!-- 
Written by: Lionel Cons <Lionel.Cons@cern.ch> (original author)
            Karl Berry  <karl@freefriends.org>
            Olaf Bachmann <obachman@mathematik.uni-kl.de>
            and many others.
Maintained by: Olaf Bachmann <obachman@mathematik.uni-kl.de>
Send bugs and suggestions to <texi2html@mathematik.uni-kl.de>
 
-->
<HTML>
<HEAD>
<TITLE>Crystal Space: MeshObject Thing</TITLE>

<META NAME="description" CONTENT="Crystal Space: MeshObject Thing">
<META NAME="keywords" CONTENT="Crystal Space: MeshObject Thing">
<META NAME="resource-type" CONTENT="document">
<META NAME="distribution" CONTENT="global">
<META NAME="Generator" CONTENT="texi2html 1.64">

</HEAD>

<BODY LANG="" BGCOLOR="#FFFFFF" TEXT="#000000" LINK="#0000FF" VLINK="#800080" ALINK="#FF0000">

<A NAME="SEC536"></A>
<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="cs_217.html#SEC530"> &lt; </A>]</TD>
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="cs_219.html#SEC542"> &gt; </A>]</TD>
<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="cs_196.html#SEC414"> &lt;&lt; </A>]</TD>
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="cs_201.html#SEC452"> Up </A>]</TD>
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="cs_220.html#SEC543"> &gt;&gt; </A>]</TD>
<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="index.html#SEC_Top">Top</A>]</TD>
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="cs_toc.html#SEC_Contents">Contents</A>]</TD>
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="cs_285.html#SEC711">Index</A>]</TD>
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="cs_abt.html#SEC_About"> ? </A>]</TD>
</TR></TABLE>
<HR SIZE=1>
<H3> 7.8.17 Thing Mesh Object </H3>
<!--docid::SEC536::-->
<P>

<EM>Written by Jorrit Tyberghein,
(<A HREF="mailto:jorrit.tyberghein@uz.kuleuven.ac.be">jorrit.tyberghein@uz.kuleuven.ac.be</A>).</EM>
</P><P>

This mesh object represents a 'thing' which is a very often used
geometry object in Crystal Space. Things are often used to mark the bounding
geometry of a sector so that it represents a closed space. Things are not
very dynamic in nature (although you can have things that move) so they
are most often used for static geometry.
</P><P>

Things support both polygons and curved surfaces (bezier surfaces only
at this moment). Things also support portals which means that they can
be used to define transition polygons between adjacent or non-adjacent
sectors.
</P><P>

One important aspect of the thing mesh object is that there is no difference
between a mesh object and a mesh factory. You can create a mesh factory
and use it as a mesh object.
</P><P>

<A NAME="SEC537"></A>
<H4> Basic Structure            </H4>
<!--docid::SEC537::-->
<P>

The following SCF class names are used (for <CODE>CS_LOAD_PLUGIN()</CODE>):
</P><P>

<UL>
<LI>
Type plugin: `<SAMP>crystalspace.mesh.object.thing</SAMP>'
<LI>
Loader plugin: `<SAMP>crystalspace.mesh.loader.thing</SAMP>'
<LI>
Factory loader plugin: `<SAMP>crystalspace.mesh.loader.factory.thing</SAMP>'
<LI>
Plane loader addon plugin: `<SAMP>crystalspace.mesh.loader.thing.plane</SAMP>'
<LI>
Bezier curve loader addon plugin: `<SAMP>crystalspace.mesh.loader.thing.bezier</SAMP>'
</UL>
<P>

Objects in this plugin implement the following SCF interfaces (get
with <CODE>SCF_QUERY_INTERFACE()</CODE>):
</P><P>

<UL>
<LI>
<EM>MeshObject</EM> and <EM>MeshObjectFactory</EM>
<UL>
<LI>
Implements `<SAMP>iMeshObject</SAMP>'
<LI>
Implements `<SAMP>iMeshObjectFactory</SAMP>'
<LI>
Implements `<SAMP>iThingState</SAMP>'
<LI>
Implements `<SAMP>iPolygonMesh</SAMP>'
<LI>
Implements `<SAMP>iVisibilityCuller</SAMP>'
<LI>
Implements `<SAMP>iLightingInfo</SAMP>'
</UL>
<LI>
<EM>MeshObjectType</EM>
<UL>
<LI>
Implements `<SAMP>iMeshObjectType</SAMP>'
<LI>
Implements `<SAMP>iThingEnvironment</SAMP>'
</UL>
</UL>
<P>

<A NAME="SEC538"></A>
<H4> State Interface </H4>
<!--docid::SEC538::-->
<P>

Since mesh objects and mesh factories are the same for things there is
only one state interface.
</P><P>

`<SAMP>iThingState</SAMP>' is the SCF interface that you can use to
set/get settings for a thing. The definition of this interface
can be found in `<TT>CS/include/imesh/thing/thing.h</TT>' and that is also the
include file you need to include in your applications to use this plugin.
Using this interface you can access the vertices, polygons, materials,
curved surfaces, and various other configuration parameters for a thing.
</P><P>

All include files for the thing mesh can be found in the
`<TT>CS/include/imesh/thing</TT>' directory. There are include files for the
curve definition, for lightmaps, polygons, portals, ...
</P><P>

<A NAME="SEC539"></A>
<H4> Factory and Object Loader </H4>
<!--docid::SEC539::-->
<P>

At load time a thing can be constructed from several <EM>thing parts</EM>.
At run time these parts will all be combined into one big thing but
at load time it is sometimes easy to be able to split the thing in parts
so that you can have a more logical grouping of thing data. The important
feature of parts is that the vertex table starts from zero again. This means
that you can define vertices in a part and then use them in polygons in that
part as if the vertex table starts at 0 again. This is useful because then
you can more easily add new parts and even move around parts without having
to change all vertex indices. Note that it is no problem to have duplicate
vertices between different parts as they will be combined in a post-processing
pass anyway. The table below describes everything which you can use in a
single <EM>part</EM> which is also what you can use in the top level thing
definition.
</P><P>

<UL>

<LI>
Vertex and polygon definition commands. Note that in a given part the vertex
table always starts at index 0. Every vertex you add will use a new index.
<DL COMPACT>
<DT><CODE>VERTEX(x,y,z)</CODE>
<DD>Define a single vertex given three coordinates. The coordinates are given
in local object space for this thing.
<DT><CODE>V(x,y,z)</CODE>
<DD>Shorthand for `<SAMP>VERTEX</SAMP>'.
<DT><CODE>VBLOCK(minx,miny,minz,maxx,maxy,maxz)</CODE>
<DD>This is a conveniance command that creates eight vertices shaped in a block.
You can then easily define polygons that use some of these vertices to form
one surface of the block. VBLOCK expects six parameters which
are the dimensions of the block.
<DT><CODE>VROOM(minx,miny,minz,maxx,maxy,maxz)</CODE>
<DD>This command is similar to VBLOCK. Except that it will generate the vertices
in a different order so that later created polygons will
be visible from the inside instead of the outside.
<DT><CODE>CIRCLE(x,y,z,rx,ry,rz,num)</CODE>
<DD>Generate a circle of vertices.
`<SAMP>x,y,z</SAMP>' is the centre of the circle. `<SAMP>rx,ry,rz</SAMP>' is the radius of
the circle. `<SAMP>num</SAMP>' is the number of vertices to generate. If `<SAMP>num</SAMP>'
is negative the vertices will be generated in a different direction.
<DT><CODE>POLYGON(<small>...</small>)</CODE>
<DD>This defines a single polygon using the vertices described above. The
definition of a polygon is given below.
<DT><CODE>P(<small>...</small>)</CODE>
<DD>Shorthand for `<SAMP>POLYGON</SAMP>'.
</DL>
<P>

<LI>
Curve related commands. Currently only 3x3 bezier patches are supported.
Note that to use a curve in a thing mesh object you need to describe
a curve template first (more on this later).
<DL COMPACT>
<DT><CODE>CURVECONTROL(x,y,z:u,v)</CODE>
<DD>A control point for a curve. There are 9 control points (for a 3x3
bezier patch). Every control point has the following format: `<SAMP>x,y,z:u,v</SAMP>'.
`<SAMP>x,y,z</SAMP>' is the location of the point in object space. `<SAMP>u,v</SAMP>' is
the texture mapping coordinate for this control point.
<DT><CODE>CURVECENTER(x,y,z)</CODE>
<DD>Set the center point (`<SAMP>x,y,z</SAMP>') of the curve.
<DT><CODE>CURVESCALE(scale)</CODE>
<DD>Set the scale of the curve.
<DT><CODE>CURVE(curveTemplateName)</CODE>
<DD>Get the name of the curve template to use for this curve. Read about curve
templates later.
</DL>
<P>

<LI>
Material related commands.
<DL COMPACT>
<DT><CODE>MATERIAL(materialName)</CODE>
<DD>The default material to use for all following polygons. A polygon can
still override this.
<DT><CODE>MAT_SET_SELECT(materialSetName)</CODE>
<DD>Use a set of textures that was defined previously.
<DT><CODE>TEXLEN(scale)</CODE>
<DD>This is a very general and easy command to control texture mapping on
a polygon. It basically defines the scale of a texture. If you want more
control over polygon texture mapping you should look at the texture mapping
parameters in a polygon. But if you want Quick-And-Dirty texture mapping
then this command can help you. `<SAMP>TEXLEN</SAMP>' expects a single parameter
which is a scale. A scale of 1 means that the given texture will be scaled
once in both directions for 1 unit in world space. A scale of 2 means that
the given texture will be scaled once in 2 units of world space.
</DL>
<P>

<LI>
Various other commands.
<DL COMPACT>
<DT><CODE>MOVEABLE(boolean)</CODE>
<DD>This command only works for the top-level thing. It indicates that the
thing can possibly move around. If you don't set this option then it is
illegal to later move the thing.
<DT><CODE>VISTREE(boolean)</CODE>
<DD>This command only works for the top-level thing. It indicates that this
thing will have an octree + mini-bsp trees. This is used for visibility
culling. Usually only big things will have VISTREE and usually there is
only one thing in a sector which has this flag set. In this case you probably
want to use the `<SAMP>CULLER</SAMP>' keyword in the sector to indicate that
this thing is the one containing the visibility culling information.
<DT><CODE>FASTMESH(boolean)</CODE>
<DD>This command only works for the top-level thing. It indicates that this
mesh will be rendered using a faster technique. At this moment this is
not properly implemented though.
<DT><CODE>FACTORY(factoryName)</CODE>
<DD>This thing will be made from the given thing factory.
<DT><CODE>TEMPLATE(factoryName)</CODE>
<DD>Same as `<SAMP>FACTORY</SAMP>'
<DT><CODE>CLONE(thingName)</CODE>
<DD>This is similar to `<SAMP>FACTORY</SAMP>' but the thing will be made from the
given thing instead. i.e. it is a clone.
</DL>
</UL>
<P>

A given polygon (inside the `<SAMP>POLYGON</SAMP>' keyword) is defined as
follows:
</P><P>

<DL COMPACT>
<DT><CODE>MATERIAL(materialName)</CODE>
<DD>The material to use for this polygon. If not given then the default material
will be used.
<DT><CODE>TEXTURE(<small>...</small>)</CODE>
<DD>This keyword can be used to define additional texture mapping parameters.
<DT><CODE>LIGHTING(boolean)</CODE>
<DD>Should this polygon use lighting or not. By default this is enabled. If
disabled the texture on this polygon will be rendered using original colors
(i.e. full-bright texture).
<DT><CODE>PORTAL(sectorName)</CODE>
<DD>If you use this keyword then this polygon is a portal to the given sector.
<DT><CODE>WARP(<small>...</small>)</CODE>
<DD>This keyword can be used to define additional parameters for the portal.
More on this later.
<DT><CODE>SHADING(shadingParm)</CODE>
<DD>This describes the kind of shading to use for this polygon. Possible values
are: `<SAMP>NONE</SAMP>', `<SAMP>FLAT</SAMP>', `<SAMP>GOURAUD</SAMP>', or `<SAMP>LIGHTMAP</SAMP>'. Default
is `<SAMP>LIGHTMAP</SAMP>'.
<DT><CODE>VERTICES(v1,<small>...</small>)</CODE>
<DD>The vertices of the polygon. This is a list of vertex indices local to the
part this polygon is in. In combination with the `<SAMP>VBLOCK</SAMP>' or `<SAMP>VROOM</SAMP>'
commands this command can also contain something with the name: `<SAMP>w</SAMP>',
`<SAMP>e</SAMP>', `<SAMP>n</SAMP>', `<SAMP>s</SAMP>', `<SAMP>u</SAMP>', or `<SAMP>d</SAMP>' (for west, east, north,
south, up, or down). This will then create vertices according to the last
`<SAMP>VBLOCK</SAMP>' or `<SAMP>VROOM</SAMP>'. Note that there should be no other vertex
generating command between the `<SAMP>VBLOCK</SAMP>' or `<SAMP>VROOM</SAMP>' and this
polygon command! You can also give the first index of the `<SAMP>VBLOCK</SAMP>'
or `<SAMP>VROOM</SAMP>' generated vertices with a notation like this:
`<SAMP>VERTICES (w,8)</SAMP>'.
<DT><CODE>V(v1,<small>...</small>)</CODE>
<DD>Shorthand for `<SAMP>VERTICES</SAMP>'.
<DT><CODE>UV(u1,v1,<small>...</small>)</CODE>
<DD>If you use this keyword the polygon will be gouraud shaded and not
lightmapped. This keyword allows you to describe the uv coordinates
for the polygon with gouraud shading. Currently a gouraud shaded polygon
is limited to three vertices. This limitation will be removed in the
future. But for now it means that UV will be followed by six parameters (three
u,v coordinate sets).
<DT><CODE>UVA(u1,v1,a1,<small>...</small>)</CODE>
<DD>Similar to `<SAMP>UV</SAMP>' but uses another technique to describe the coordinates
using angle.
<DT><CODE>COLORS(r,g,b<small>...</small>)</CODE>
<DD>When using `<SAMP>UV</SAMP>' you can use this command to give colors (r,g,b) for
every vertex.
<DT><CODE>COLLDET(boolean)</CODE>
<DD>Enable/disable collision detection for this polygon. By default a normal
polygon will have collision detection enabled. If the polygon has a portal
then collision detection will be disabled unless the portal is a mirror in
which case it will be enabled again. But using `<SAMP>COLLDET</SAMP>' allows you to
override all this.
<DT><CODE>COSFACT(factor)</CODE>
<DD>The cosinus factor to use for lighting. The default is 0 which means
that the strength of the light falling on this polygon will depend
completely on the angle of the light and this polygon. This is the most
realistic setting but in some cases it doesn't look right. To completely
disable dependence on angle you can use 1. In between values are also
possible.
<DT><CODE>ALPHA(alpha)</CODE>
<DD>Using this you can set the alpha transparency factor of this polygon.
This is a value between 0 and 100.
<DT><CODE>MIXMODE(mode)</CODE>
<DD>With this you can control more blending options for the polygon.
One of `<SAMP>ADD</SAMP>', `<SAMP>ALPHA</SAMP>', `<SAMP>COPY</SAMP>', `<SAMP>KEYCOLOR</SAMP>',
`<SAMP>MULTIPLY2</SAMP>', `<SAMP>MULTIPLY</SAMP>', or `<SAMP>TRANSPARENT</SAMP>'.
<DT><CODE>LEN(scale)</CODE>
<DD>This is similar to the `<SAMP>TEXLEN</SAMP>' command in the part and also to the
`<SAMP>LEN</SAMP>' command in the texture definition but it is repeated here
as a short-hand for `<SAMP>TEXTURE (LEN (...))</SAMP>'.
<DT><CODE>PLANE(planeName)</CODE>
<DD>This is a shorthand for `<SAMP>TEXTURE (PLANE (...))</SAMP>'.
</DL>
<P>

A texture mapping specification (the `<SAMP>TEXTURE</SAMP>' keyword in a polygon)
has the following parameters:
</P><P>

<DL COMPACT>
<DT><CODE>ORIG(x,y,z)</CODE>
<DD>The origin for texture mapping (3D coord).
<DT><CODE>FIRST(x,y,z)</CODE>
<DD>The u-axis coordinate for texture mapping (3D coord).
<DT><CODE>SECOND(x,y,z)</CODE>
<DD>The v-axis coordinate for texture mapping (3D coord).
<DT><CODE>FIRST_LEN(scale)</CODE>
<DD>Scale along the u-axis.
<DT><CODE>SECOND_LEN(scale)</CODE>
<DD>Scale along the v-axis.
<DT><CODE>UVEC(x,y,z)</CODE>
<DD>Similar to `<SAMP>FIRST</SAMP>' with `<SAMP>FIRST_LEN</SAMP>' set to length
of vector (`<SAMP>FIRST</SAMP>'-`<SAMP>ORIG</SAMP>').
<DT><CODE>VVEC(x,y,z)</CODE>
<DD>Similar to `<SAMP>SECOND</SAMP>' with `<SAMP>SECOND_LEN</SAMP>' set to length
of vector (`<SAMP>SECOND</SAMP>'-`<SAMP>ORIG</SAMP>').
<DT><CODE>MATRIX(<small>...</small>)</CODE>
<DD>Most general way to describe texture mapping using the transformation matrix.
<DT><CODE>V(x,y,z)</CODE>
<DD>Most general way to describe texture mapping using the transformation vector.
<DT><CODE>LEN(scale)</CODE>
<DD>Use this as an easier way to describe texture scale (i.e. instead
of all the above).
<DT><CODE>UV(idx1,u1,v1,idx2,u2,v2,idx3,u3,v3)</CODE>
<DD>Directly specify u,v mapping coordinates for three given vertices.
<DT><CODE>UV_SHIFT(ushift,vshift)</CODE>
<DD>Given the mapping described above, further shift with the given
u,v shift value.
<DT><CODE>PLANE(planeName)</CODE>
<DD>Use the given texture mapping plane instead of all the above.
See how to define planes later.
</DL>
<P>

The `<SAMP>WARP</SAMP>' keyword as used in a polygon has the following keywords:
</P><P>

<DL COMPACT>
<DT><CODE>MATRIX(<small>...</small>)</CODE>
<DD>The matrix to use for space warping the portal.
<DT><CODE>V(x,y,z)</CODE>
<DD>The vector to use for space warping before the matrix is applied.
<DT><CODE>W(x,y,z)</CODE>
<DD>The vector to use for space warping after the matrix is applied. If not
given this is the same as `<SAMP>V</SAMP>'.
<DT><CODE>MIRROR()</CODE>
<DD>Short-hand to generate a mirror portal. This will automatically calculate
`<SAMP>MATRIX</SAMP>', `<SAMP>V</SAMP>', and `<SAMP>W</SAMP>'.
<DT><CODE>STATIC()</CODE>
<DD>When this item is given the portal destination will be static. This means
that the portal will point to the same location even if the portal polygon
moves. Otherwise the portal destination will move accordingly.
<DT><CODE>ZFILL()</CODE>
<DD>Set this option on a portal that floats in the middle of a room. It will
make sure that the Z-buffer is filled AFTER rendering all objects seen
through the portal.
<DT><CODE>CLIP()</CODE>
<DD>Set this option on a portal that points to the middle of a room. It will
make sure that all geometry in the destination sector is correctly clipped
to the portal so that it is not rendered in this sector.
</DL>
<P>

<A NAME="SEC540"></A>
<H4> Plane Add-on Loader </H4>
<!--docid::SEC540::-->
<P>

The thing loader plugin also supports an additional plugin which can load
plane definitions. A plane definition is used for texture mapping. It is
an optional (but very useful) feature which allows you to define texture
mapping planes for polygons that share the same texture mapping.
</P><P>

The following keywords are supported by the plane loader:
</P><P>

<DL COMPACT>
<DT><CODE>NAME(planeName)</CODE>
<DD>The name of this plane. This can then be used later in `<SAMP>PLANE</SAMP>' commands
for the texture or polygon.
<DT><CODE>ORIG(x,y,z)</CODE>
<DD>The origin for texture mapping (3D coord).
<DT><CODE>FIRST(x,y,z)</CODE>
<DD>The u-axis coordinate for texture mapping (3D coord).
<DT><CODE>SECOND(x,y,z)</CODE>
<DD>The v-axis coordinate for texture mapping (3D coord).
<DT><CODE>FIRST_LEN(scale)</CODE>
<DD>Scale along the u-axis.
<DT><CODE>SECOND_LEN(scale)</CODE>
<DD>Scale along the v-axis.
<DT><CODE>UVEC(x,y,z)</CODE>
<DD>Similar to `<SAMP>FIRST</SAMP>' with `<SAMP>FIRST_LEN</SAMP>' set to length
of vector (`<SAMP>FIRST</SAMP>'-`<SAMP>ORIG</SAMP>').
<DT><CODE>VVEC(x,y,z)</CODE>
<DD>Similar to `<SAMP>SECOND</SAMP>' with `<SAMP>SECOND_LEN</SAMP>' set to length
of vector (`<SAMP>SECOND</SAMP>'-`<SAMP>ORIG</SAMP>').
<DT><CODE>MATRIX(<small>...</small>)</CODE>
<DD>Most general way to describe texture mapping using the transformation matrix.
<DT><CODE>V(x,y,z)</CODE>
<DD>Most general way to describe texture mapping using the transformation vector.
</DL>
<P>

<A NAME="SEC541"></A>
<H4> Bezier Curve Add-on Loader </H4>
<!--docid::SEC541::-->
<P>

The thing loader also supports an additional plugin which can load curve
template definitions.
</P><P>

The following keywords are supported by the bezier curve loader:
</P><P>

<DL COMPACT>
<DT><CODE>NAME(curveTemplateName)</CODE>
<DD>The name of this curve template. This can then be used later in `<SAMP>CURVE</SAMP>'
commands in the thing part definition.
<DT><CODE>MATERIAL(materialName)</CODE>
<DD>The material to use for this curve.
<DT><CODE>VERTICES(v1,<small>...</small>)</CODE>
<DD>Nine vertex indices (the exact position and texture mapping coordinate will
be defined in the thing mesh object using `<SAMP>CURVECONTROL</SAMP>').
<DT><CODE>V(v1,<small>...</small>)</CODE>
<DD>Shorthand for `<SAMP>VERTICES</SAMP>'.
</DL>
<P>

<A NAME="MeshObject Metaball"></A>
<HR SIZE=1>
<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="cs_217.html#SEC530"> &lt; </A>]</TD>
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="cs_219.html#SEC542"> &gt; </A>]</TD>
<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="cs_196.html#SEC414"> &lt;&lt; </A>]</TD>
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="cs_201.html#SEC452"> Up </A>]</TD>
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="cs_220.html#SEC543"> &gt;&gt; </A>]</TD>
<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="index.html#SEC_Top">Top</A>]</TD>
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="cs_toc.html#SEC_Contents">Contents</A>]</TD>
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="cs_285.html#SEC711">Index</A>]</TD>
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="cs_abt.html#SEC_About"> ? </A>]</TD>
</TR></TABLE>
<BR>  
<FONT SIZE="-1">
This document was generated

using <A HREF="http://www.mathematik.uni-kl.de/~obachman/Texi2html
"><I>texi2html</I></A>

</BODY>
</HTML>