Almost working OrbitControls for FX

This commit is contained in:
Alexander Nozik 2019-12-29 14:56:52 +03:00
parent 7733bc9258
commit 1ebc9c5cda
2 changed files with 9 additions and 8 deletions

View File

@ -10,7 +10,6 @@ import javafx.application.Platform
import javafx.beans.property.ObjectProperty import javafx.beans.property.ObjectProperty
import javafx.beans.property.SimpleObjectProperty import javafx.beans.property.SimpleObjectProperty
import javafx.scene.* import javafx.scene.*
import javafx.scene.layout.BorderPane
import javafx.scene.paint.Color import javafx.scene.paint.Color
import org.fxyz3d.scene.Axes import org.fxyz3d.scene.Axes
import tornadofx.* import tornadofx.*
@ -20,7 +19,9 @@ class FXCanvas3D(val plugin: FX3DPlugin, val spec: CanvasSpec) :
override val context: Context get() = plugin.context override val context: Context get() = plugin.context
val world = Group() val world = Group().apply {
//transforms.add(Rotate(180.0, Rotate.Z_AXIS))
}
val axes = Axes().also { val axes = Axes().also {
it.setHeight(spec.axes.size) it.setHeight(spec.axes.size)

View File

@ -49,11 +49,11 @@ class OrbitControls internal constructor(camera: Camera, canvas: SubScene, spec:
val centerMarker by lazy { val centerMarker by lazy {
Sphere(10.0).also { Sphere(10.0).also {
it.transforms.setAll(center, baseTranslate) it.transforms.setAll(baseTranslate)
} }
} }
private val center = Translate() //private val center = Translate()
private val rx = Rotate(0.0, Rotate.X_AXIS) private val rx = Rotate(0.0, Rotate.X_AXIS)
@ -61,11 +61,11 @@ class OrbitControls internal constructor(camera: Camera, canvas: SubScene, spec:
private val translate = Translate() private val translate = Translate()
private val rz = Rotate(180.0, Rotate.Z_AXIS) //private val rz = Rotate(180.0, Rotate.Z_AXIS)
init { init {
camera.transforms.setAll(center, ry, rx, translate, rz) camera.transforms.setAll(ry, rx, translate)
update() update()
val listener = InvalidationListener { val listener = InvalidationListener {
update() update()
@ -153,8 +153,8 @@ class OrbitControls internal constructor(camera: Camera, canvas: SubScene, spec:
} }
if (me.isPrimaryButtonDown) { if (me.isPrimaryButtonDown) {
azimuth -= mouseDeltaX * MOUSE_SPEED * modifier * ROTATION_SPEED azimuth = (azimuth - mouseDeltaX * MOUSE_SPEED * modifier * ROTATION_SPEED).coerceIn(0.0, 2 * PI)
zenith -= mouseDeltaY * MOUSE_SPEED * modifier * ROTATION_SPEED zenith = (zenith - mouseDeltaY * MOUSE_SPEED * modifier * ROTATION_SPEED).coerceIn(0.0,PI)
} else if (me.isSecondaryButtonDown) { } else if (me.isSecondaryButtonDown) {
x += MOUSE_SPEED * modifier * TRACK_SPEED * (mouseDeltaX * cos(azimuth) + mouseDeltaY * sin(azimuth)) x += MOUSE_SPEED * modifier * TRACK_SPEED * (mouseDeltaX * cos(azimuth) + mouseDeltaY * sin(azimuth))
z += MOUSE_SPEED * modifier * TRACK_SPEED * (-mouseDeltaX * sin(azimuth) + mouseDeltaY * cos(azimuth)) z += MOUSE_SPEED * modifier * TRACK_SPEED * (-mouseDeltaX * sin(azimuth) + mouseDeltaY * cos(azimuth))