commonMain.Orbital.kt Maven / Gradle / Ivy
The newest version!
package org.openrndr.extra.camera
import org.openrndr.Extension
import org.openrndr.Program
import org.openrndr.draw.Drawer
import org.openrndr.events.Event
import org.openrndr.math.Vector3
/**
* Extension that provides orbital camera view and controls.
*/
class Orbital : Extension, ChangeEvents {
override var enabled: Boolean = true
override val changed = Event()
override val hasChanged: Boolean
get() {
return camera.hasChanged
}
var eye = Vector3.UNIT_Z * 10.0
var lookAt = Vector3.ZERO
var near = 0.1
var far = 1000.0
var fov = 90.0
var userInteraction = true
var keySpeed = 1.0
var projectionType = ProjectionType.PERSPECTIVE
/**
* Damping factor for camera motion, set to 0 for no damping
*/
var dampingFactor = 0.05
val camera by lazy {
OrbitalCamera(eye, lookAt, fov, near, far, projectionType).apply {
dampingFactor = [email protected]
this.changed.listen([email protected])
}
}
val controls by lazy { OrbitalControls(camera, userInteraction, keySpeed) }
override fun setup(program: Program) {
controls.setup(program)
}
override fun beforeDraw(drawer: Drawer, program: Program) {
camera.beforeDraw(drawer, program)
}
override fun afterDraw(drawer: Drawer, program: Program) {
camera.afterDraw(drawer, program)
}
}