Difference between revisions of "Reference:Mesh"
Jholsenback (talk | contribs) m (still testing that theory) |
Jholsenback (talk | contribs) m (1 revision: underscore link repair) |
(No difference)
|
Revision as of 18:09, 17 July 2012
The mesh
object can be used to efficiently store large
numbers of triangles. Its syntax is:
MESH: mesh { MESH_TRIANGLE... [MESH_MODIFIER...] } MESH_TRIANGLE: triangle { <Corner_1>, <Corner_2>, <Corner_3> [uv_vectors <uv_Corner_1>, <uv_Corner_2>, <uv_Corner_3>] [MESH_TEXTURE] } | smooth_triangle { <Corner_1>, <Normal_1>, <Corner_2>, <Normal_2>, <Corner_3>, <Normal_3> [uv_vectors <uv_Corner_1>, <uv_Corner_2>, <uv_Corner_3>] [MESH_TEXTURE] } MESH_TEXTURE: texture { TEXTURE_IDENTIFIER } texture_list { TEXTURE_IDENTIFIER TEXTURE_IDENTIFIER TEXTURE_IDENTIFIER } MESH_MODIFIER: inside_vector <direction> | hierarchy [ Boolean ] | OBJECT_MODIFIER
Mesh default values:
hierarchy : on
Any number of triangle
and/or smooth_triangle
statements can be used and each of those triangles can be individually
textured by assigning a texture identifier to it. The texture has to be
declared before the mesh is parsed. It is not possible to use texture
definitions inside the triangle or smooth triangle statements. This is a
restriction that is necessary for an efficient storage of the assigned
textures. See Triangle and Smooth Triangle for more information on triangles.
The mesh
object can support uv_mapping
. For this, per triangle the keyword
uv_vectors
has to be given, together with three 2D uv-vectors. Each vector specifies a location
in the xy-plane from which the texture has to be mapped to the matching points of the triangle.
Also see the section uv_mapping.
The mesh's components are internally bounded by a bounding box hierarchy
to speed up intersection testing. The bounding hierarchy can be turned off
with the hierarchy off
keyword. This should only be done if
memory is short or the mesh consists of only a few triangles. The default is
hierarchy on
.
Copies of a mesh object refer to the same triangle data and thus consume very little memory. You can easily trace a hundred copies of a 10000 triangle mesh without running out of memory (assuming the first mesh fits into memory). The mesh object has two advantages over a union of triangles: it needs less memory and it is transformed faster. The memory requirements are reduced by efficiently storing the triangles vertices and normals. The parsing time for transformed meshes is reduced because only the mesh object has to be transformed and not every single triangle as it is necessary for unions.
The mesh object can currently only include triangle and smooth triangle components. That restriction may change, allowing polygonal components, at some point in the future.
Solid Mesh
The triangle mesh objects mesh
(and mesh2
) can be used in CSG objects such as difference and intersect. Adding the inside_vector
they do have a defined inside. This will only work for well-behaved meshes, which are completely closed volumes. If meshes have any holes in them, this might work, but the results are not guaranteed.
To determine if a point is inside a triangle mesh, POV-Ray shoots a ray from the point in some arbitrary direction. If this vector intersects an odd number of triangles, the point is inside the mesh. If it intersects an even number of triangles, the point is outside of the mesh. You can specify the direction of this vector. For example, to use +z
as the direction, you would add the following line to the triangle mesh description (following all other mesh data, but before the object modifiers).
inside_vector <0, 0, 1>
This change does not have any effect on unions of triangles, these will still be always hollow.