56 lines
1.6 KiB
Kotlin
56 lines
1.6 KiB
Kotlin
package org.openrndr.extras.camera
|
|
|
|
import org.openrndr.Extension
|
|
import org.openrndr.Program
|
|
import org.openrndr.color.ColorRGBa
|
|
import org.openrndr.draw.*
|
|
import org.openrndr.math.Vector3
|
|
|
|
@Suppress("unused")
|
|
class GridHelper(val size: Int = 10, val divisions: Int = 10) : Extension {
|
|
override var enabled: Boolean = true
|
|
private val step = size / divisions.toDouble()
|
|
|
|
private val grid = vertexBuffer(
|
|
vertexFormat {
|
|
position(3)
|
|
}
|
|
, 4 * (size * divisions + 1)).apply {
|
|
put {
|
|
val halfSize = size / 2.0
|
|
var k = -halfSize
|
|
|
|
for(i in 0 until divisions + 1) {
|
|
write(Vector3(-halfSize, 0.0, k))
|
|
write(Vector3(halfSize, 0.0, k))
|
|
|
|
write(Vector3(k, 0.0, -halfSize))
|
|
write(Vector3(k, 0.0, halfSize))
|
|
|
|
k += step
|
|
}
|
|
}
|
|
}
|
|
|
|
override fun beforeDraw(drawer: Drawer, program: Program) {
|
|
draw(drawer)
|
|
}
|
|
|
|
fun draw(drawer: Drawer) {
|
|
drawer.isolated {
|
|
drawer.fill = ColorRGBa.WHITE
|
|
drawer.stroke = ColorRGBa.WHITE
|
|
drawer.vertexBuffer(grid, DrawPrimitive.LINES)
|
|
|
|
// Axis cross
|
|
drawer.stroke = ColorRGBa.RED
|
|
drawer.lineSegment(Vector3.ZERO, Vector3(step, 0.0, 0.0))
|
|
|
|
drawer.stroke = ColorRGBa.GREEN
|
|
drawer.lineSegment(Vector3.ZERO, Vector3(0.0, step, 0.0))
|
|
|
|
drawer.stroke = ColorRGBa.BLUE
|
|
drawer.lineSegment(Vector3.ZERO, Vector3(0.0, 0.0, step))
|
|
}
|
|
}
|
|
} |