[orx-mesh-generators] Add comments for resolveMesh(), capMesh() (#254)
This commit is contained in:
@@ -1,12 +1,38 @@
|
||||
package org.openrndr.extra.meshgenerators
|
||||
|
||||
import org.openrndr.math.Matrix44
|
||||
import org.openrndr.math.Vector2
|
||||
import org.openrndr.math.Vector3
|
||||
import org.openrndr.math.YPolarity
|
||||
import org.openrndr.draw.VertexBuffer
|
||||
import org.openrndr.math.*
|
||||
import org.openrndr.math.transforms.rotateY
|
||||
|
||||
fun generateCap(sides: Int, radius: Double, enveloppe: List<Vector2> = listOf(Vector2(0.0, 0.0), Vector2(1.0, 0.0)), writer: VertexWriter) {
|
||||
/**
|
||||
* A shape created by rotating an envelope around a vertical axis.
|
||||
* The default envelope is a horizontal line which produces a flat round disk.
|
||||
* By providing a more complex envelop one can create curved shapes like a bowl.
|
||||
*/
|
||||
fun capMesh(
|
||||
sides: Int,
|
||||
radius: Double,
|
||||
enveloppe: List<Vector2> = listOf(
|
||||
Vector2(0.0, 0.0),
|
||||
Vector2(1.0, 0.0)
|
||||
)
|
||||
): VertexBuffer {
|
||||
val vb = meshVertexBuffer(6 * sides * (enveloppe.size - 1))
|
||||
vb.put {
|
||||
generateCap(sides, radius, enveloppe, bufferWriter(this))
|
||||
}
|
||||
return vb
|
||||
}
|
||||
|
||||
fun generateCap(
|
||||
sides: Int,
|
||||
radius: Double,
|
||||
enveloppe: List<Vector2> = listOf(
|
||||
Vector2(0.0, 0.0),
|
||||
Vector2(1.0, 0.0)
|
||||
),
|
||||
writer: VertexWriter
|
||||
) {
|
||||
val maxX = enveloppe.maxByOrNull { it.x } ?: Vector2(1.0, 0.0)
|
||||
val a = maxX.x
|
||||
|
||||
@@ -50,7 +76,34 @@ fun generateCap(sides: Int, radius: Double, enveloppe: List<Vector2> = listOf(Ve
|
||||
}
|
||||
}
|
||||
|
||||
fun generateRevolve(sides: Int, length: Double, enveloppe: List<Vector2> = listOf(Vector2(1.0, 0.0), Vector2(1.0, 1.0)), writer: VertexWriter) {
|
||||
/**
|
||||
* A shape created by rotating an envelope around a vertical axis.
|
||||
* The default envelope is a vertical line which produces a hollow cylinder.
|
||||
*/
|
||||
fun revolveMesh(
|
||||
sides: Int,
|
||||
length: Double,
|
||||
enveloppe: List<Vector2> = listOf(
|
||||
Vector2(1.0, 0.0),
|
||||
Vector2(1.0, 1.0)
|
||||
)
|
||||
): VertexBuffer {
|
||||
val vb = meshVertexBuffer(6 * sides * (enveloppe.size - 1))
|
||||
vb.put {
|
||||
generateRevolve(sides, length, enveloppe, bufferWriter(this))
|
||||
}
|
||||
return vb
|
||||
}
|
||||
|
||||
fun generateRevolve(
|
||||
sides: Int,
|
||||
length: Double,
|
||||
enveloppe: List<Vector2> = listOf(
|
||||
Vector2(1.0, 0.0),
|
||||
Vector2(1.0, 1.0)
|
||||
),
|
||||
writer: VertexWriter
|
||||
) {
|
||||
val maxY = enveloppe.maxByOrNull { it.y } ?: Vector2(0.0, 1.0)
|
||||
val a = maxY.y
|
||||
|
||||
@@ -59,7 +112,6 @@ fun generateRevolve(sides: Int, length: Double, enveloppe: List<Vector2> = listO
|
||||
val normals2D = enveloppe.zipWithNext().map {
|
||||
val d = it.second - it.first
|
||||
d.normalized.perpendicular() * Vector2(1.0, -1.0)
|
||||
|
||||
}
|
||||
|
||||
val basePositions = cleanEnveloppe.map { Vector3(it.x, it.y, 0.0) }
|
||||
|
||||
@@ -6,7 +6,6 @@ import org.openrndr.math.Vector2
|
||||
import org.openrndr.math.Vector3
|
||||
import org.openrndr.math.transforms.normalMatrix
|
||||
import org.openrndr.math.transforms.rotate
|
||||
import org.openrndr.math.transforms.transform
|
||||
import org.openrndr.shape.Shape
|
||||
import java.nio.ByteBuffer
|
||||
import java.nio.ByteOrder
|
||||
@@ -121,6 +120,10 @@ fun GeneratorBuffer.cylinder(sides: Int, segments: Int, radius: Double, length:
|
||||
generateCylinder(sides, segments, radius, length, invert, this::write)
|
||||
}
|
||||
|
||||
fun GeneratorBuffer.dodecahedron(radius: Double) {
|
||||
generateDodecahedron(radius, this::write)
|
||||
}
|
||||
|
||||
fun GeneratorBuffer.taperedCylinder(sides: Int, segments: Int, startRadius: Double, endRadius: Double, length: Double, invert: Boolean = false) {
|
||||
generateTaperedCylinder(sides, segments, startRadius, endRadius, length, invert, this::write)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user