61 lines
2.2 KiB
Kotlin
61 lines
2.2 KiB
Kotlin
package org.openrndr.extras.meshgenerators
|
|
|
|
import org.openrndr.draw.VertexBuffer
|
|
import org.openrndr.math.Vector3
|
|
|
|
fun boxMesh(width: Double = 1.0, height: Double = 1.0, depth: Double = 1.0,
|
|
widthSegments: Int = 1, heightSegments: Int = 1, depthSegments: Int = 1,
|
|
invert: Boolean = false): VertexBuffer {
|
|
val vb = meshVertexBuffer(widthSegments * heightSegments * 6 * 2 +
|
|
widthSegments * depthSegments * 6 * 2 +
|
|
heightSegments * depthSegments * 6 * 2)
|
|
vb.put {
|
|
generateBox(width, height, depth,
|
|
widthSegments, heightSegments, depthSegments,
|
|
invert, bufferWriter(this))
|
|
}
|
|
return vb
|
|
}
|
|
|
|
fun generateBox(width: Double = 1.0, height: Double = 1.0, depth: Double = 1.0,
|
|
widthSegments: Int = 1, heightSegments: Int = 1, depthSegments: Int = 1,
|
|
invert: Boolean = false,
|
|
writer: VertexWriter) {
|
|
|
|
val sign = if (invert) -1.0 else 1.0
|
|
// +x -- ZY
|
|
generatePlane(Vector3(width / 2.0 * sign, 0.0, 0.0),
|
|
Vector3.UNIT_Z, Vector3.UNIT_Y, Vector3.UNIT_X,
|
|
depth, height,
|
|
depthSegments, heightSegments, writer)
|
|
|
|
// -x -- ZY
|
|
generatePlane(Vector3(-width / 2.0 * sign, 0.0, 0.0),
|
|
Vector3.UNIT_Z, Vector3.UNIT_Y, -Vector3.UNIT_X,
|
|
depth, height,
|
|
depthSegments, heightSegments, writer)
|
|
|
|
// +y -- XZ
|
|
generatePlane(Vector3(0.0, height / 2.0 * sign, 0.0),
|
|
Vector3.UNIT_X, Vector3.UNIT_Z, Vector3.UNIT_Y,
|
|
width, depth,
|
|
widthSegments, depthSegments, writer)
|
|
|
|
// -y -- XZ
|
|
generatePlane(Vector3(0.0, -height / 2.0 * sign, 0.0),
|
|
Vector3.UNIT_X, Vector3.UNIT_Z, -Vector3.UNIT_Y,
|
|
width, depth,
|
|
widthSegments, depthSegments, writer)
|
|
|
|
// +z -- XY
|
|
generatePlane(Vector3(0.0, 0.0, depth / 2.0 * sign),
|
|
Vector3.UNIT_X, Vector3.UNIT_Y, Vector3.UNIT_Z,
|
|
width, height,
|
|
widthSegments, heightSegments, writer)
|
|
|
|
// -z -- XY
|
|
generatePlane(Vector3(0.0, 0.0, -depth / 2.0 * sign),
|
|
Vector3.UNIT_X, Vector3.UNIT_Y, -Vector3.UNIT_Z,
|
|
width, height,
|
|
widthSegments, heightSegments, writer)
|
|
} |