Remove camera handling logic from Debug3D

This commit is contained in:
Ricardo Matias
2019-11-21 13:54:09 +01:00
parent a91f2b3da1
commit bd87501199

View File

@@ -1,74 +1,51 @@
package org.openrndr.extras.camera package org.openrndr.extras.camera
import org.openrndr.Extension import org.openrndr.Extension
import org.openrndr.Program
import org.openrndr.color.ColorRGBa import org.openrndr.color.ColorRGBa
import org.openrndr.draw.* import org.openrndr.draw.*
import org.openrndr.math.Matrix44
import org.openrndr.math.Vector3 import org.openrndr.math.Vector3
@Suppress("unused") @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 override var enabled: Boolean = true
var showGrid = false private val step = size / divisions.toDouble()
val orbitalCamera = OrbitalCamera(eye, lookAt, fov)
private val orbitalControls = OrbitalControls(orbitalCamera, userInteraction)
private var lastSeconds: Double = -1.0
private val grid = vertexBuffer( private val grid = vertexBuffer(
vertexFormat { vertexFormat {
position(3) position(3)
} }
, 4 * 21).apply { , 4 * (size * divisions + 1)).apply {
put { put {
for (x in -10..10) { val halfSize = size / 2.0
write(Vector3(x.toDouble(), 0.0, -10.0)) var k = -halfSize
write(Vector3(x.toDouble(), 0.0, 10.0))
write(Vector3(-10.0, 0.0, x.toDouble())) for(i in 0 until divisions + 1) {
write(Vector3(10.0, 0.0, x.toDouble())) 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) { fun draw(drawer: Drawer) {
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.isolated {
drawer.fill = ColorRGBa.WHITE drawer.fill = ColorRGBa.WHITE
drawer.stroke = ColorRGBa.WHITE drawer.stroke = ColorRGBa.WHITE
drawer.vertexBuffer(grid, DrawPrimitive.LINES) drawer.vertexBuffer(grid, DrawPrimitive.LINES)
// Axis cross // Axis cross
drawer.fill = ColorRGBa.RED drawer.stroke = ColorRGBa.RED
drawer.lineSegment(Vector3.ZERO, Vector3.UNIT_X) drawer.lineSegment(Vector3.ZERO, Vector3(step, 0.0, 0.0))
drawer.fill = ColorRGBa.GREEN drawer.stroke = ColorRGBa.GREEN
drawer.lineSegment(Vector3.ZERO, Vector3.UNIT_Y) drawer.lineSegment(Vector3.ZERO, Vector3(0.0, step, 0.0))
drawer.fill = ColorRGBa.BLUE drawer.stroke = ColorRGBa.BLUE
drawer.lineSegment(Vector3.ZERO, Vector3.UNIT_Z) drawer.lineSegment(Vector3.ZERO, Vector3(0.0, 0.0, step))
} }
} }
} }
override fun afterDraw(drawer: Drawer, program: Program) {
drawer.isolated {
drawer.view = Matrix44.IDENTITY
drawer.ortho()
}
}
override fun setup(program: Program) {
orbitalControls.setup(program)
}
}