Files
orx/orx-camera/src/main/kotlin/GridHelper.kt
Ricardo Matias 03519ff9e3 Add AxisHelper to orx-camera
* Rename Debug3D to GridHelper
2019-11-27 11:39:35 +01:00

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