[orx-mesh-generators] Add comments for resolveMesh(), capMesh() (#254)

This commit is contained in:
Abe Pazos
2022-08-10 20:57:22 +00:00
committed by GitHub
parent ee9c5e0f70
commit 09cb062154
5 changed files with 131 additions and 8 deletions

View File

@@ -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) }

View File

@@ -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)
}