3D-mesh generating functions and DSL.
// To create simple meshes
val sphere = sphereMesh(32, 32, 4.0)
val box = boxMesh(2.0, 4.0, 2.0)
val cylinder = cylinderMesh(radius = 0.5, length = 1.0, center = true)
val dodecahedron = dodecahedronMesh(0.5)
val plane = planeMesh(Vector3.ZERO, Vector3.UNIT_X, Vector3.UNIT_Y)
val disk = capMesh(sides = 15, radius = 0.5)
val tube = revolveMesh(sides = 15, length = 1.0)
// To draw the generated meshes
drawer.vertexBuffer(dodecahedron, DrawPrimitive.TRIANGLES)
orx-mesh-generators
comes with buildTriangleMesh
, which
implements a DSL
to construct 3D shapes.
To create shapes we can call methods like box()
, sphere()
,
cylinder()
, dodecahedron()
, plane()
, revolve()
,
taperedCylinder()
, hemisphere()
and cap()
.
// Create a rotated box
val mesh = buildTriangleMesh {
rotate(Vector3.UNIT_Z, 45.0)
box()
}
We can also use methods like translate()
and rotate()
to create
more complex compositions. The color
property sets the color of
the next mesh.
// Create a ring of boxes of various colors
val mesh = buildTriangleMesh {
repeat(12) {
// Take a small step
translate(2.0, 0.0, 0.0)
// Turn 30 degrees
rotate(Vector3.UNIT_Y, 30.0)
// Set a color
color = rgb(it / 11.0, 1.0, 1.0 - it / 11.0)
// Add a colored box
box(1.0, 1.0, 1.0)
}
}
isolated { ... }
can be used to encapsulate transformations and
avoid them accumulating to unpredictable values.
val mesh = buildTriangleMesh {
repeat(10) { x ->
repeat(10) { y ->
isolated {
translate(x * 1.0, y * 1.0, 0.0)
sphere(8, 8, 0.1)
}
}
}
}
Other available methods are:
grid()
: creates a tri-dimensional grid of meshes.extrudeShape()
: gives depth to 2DShape
.twist()
: post-processing effect to twist a mesh around an axis.extrudeContourSteps()
: uses Parallel Transport Frames to extrude a contour along a 3D path.
The demo folder contains examples using these methods.
Check out the source code to learn about function arguments.