Remove camera handling logic from Debug3D
This commit is contained in:
@@ -1,74 +1,51 @@
|
||||
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.Matrix44
|
||||
import org.openrndr.math.Vector3
|
||||
|
||||
@Suppress("unused")
|
||||
class Debug3D(eye: Vector3 = Vector3(0.0, 0.0, 10.0), lookAt: Vector3 = Vector3.ZERO, fov:Double = 90.0, userInteraction:Boolean = true) : Extension {
|
||||
|
||||
class Debug3D(val size: Int = 10, val divisions: Int = 10) : Extension {
|
||||
override var enabled: Boolean = true
|
||||
var showGrid = false
|
||||
val orbitalCamera = OrbitalCamera(eye, lookAt, fov)
|
||||
private val orbitalControls = OrbitalControls(orbitalCamera, userInteraction)
|
||||
private var lastSeconds: Double = -1.0
|
||||
private val step = size / divisions.toDouble()
|
||||
|
||||
private val grid = vertexBuffer(
|
||||
vertexFormat {
|
||||
position(3)
|
||||
}
|
||||
, 4 * 21).apply {
|
||||
, 4 * (size * divisions + 1)).apply {
|
||||
put {
|
||||
for (x in -10..10) {
|
||||
write(Vector3(x.toDouble(), 0.0, -10.0))
|
||||
write(Vector3(x.toDouble(), 0.0, 10.0))
|
||||
write(Vector3(-10.0, 0.0, x.toDouble()))
|
||||
write(Vector3(10.0, 0.0, x.toDouble()))
|
||||
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) {
|
||||
if (lastSeconds == -1.0) lastSeconds = program.seconds
|
||||
|
||||
val delta = program.seconds - lastSeconds
|
||||
lastSeconds = program.seconds
|
||||
orbitalCamera.update(delta)
|
||||
|
||||
drawer.background(ColorRGBa.BLACK)
|
||||
drawer.perspective(orbitalCamera.fov, program.window.size.x / program.window.size.y, 0.1, 1000.0)
|
||||
drawer.view = orbitalCamera.viewMatrix()
|
||||
|
||||
if (showGrid) {
|
||||
drawer.isolated {
|
||||
drawer.fill = ColorRGBa.WHITE
|
||||
drawer.stroke = ColorRGBa.WHITE
|
||||
drawer.vertexBuffer(grid, DrawPrimitive.LINES)
|
||||
|
||||
// Axis cross
|
||||
drawer.fill = ColorRGBa.RED
|
||||
drawer.lineSegment(Vector3.ZERO, Vector3.UNIT_X)
|
||||
|
||||
drawer.fill = ColorRGBa.GREEN
|
||||
drawer.lineSegment(Vector3.ZERO, Vector3.UNIT_Y)
|
||||
|
||||
drawer.fill = ColorRGBa.BLUE
|
||||
drawer.lineSegment(Vector3.ZERO, Vector3.UNIT_Z)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
override fun afterDraw(drawer: Drawer, program: Program) {
|
||||
fun draw(drawer: Drawer) {
|
||||
drawer.isolated {
|
||||
drawer.view = Matrix44.IDENTITY
|
||||
drawer.ortho()
|
||||
}
|
||||
}
|
||||
drawer.fill = ColorRGBa.WHITE
|
||||
drawer.stroke = ColorRGBa.WHITE
|
||||
drawer.vertexBuffer(grid, DrawPrimitive.LINES)
|
||||
|
||||
override fun setup(program: Program) {
|
||||
orbitalControls.setup(program)
|
||||
// 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))
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user