Merge pull request #44

Updated OrbitControls
This commit is contained in:
Alexander Nozik 2021-07-15 13:12:14 +03:00 committed by GitHub
commit 7242b5b4e0
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -39,7 +39,7 @@ public class OrbitControls internal constructor(camera: Camera, canvas: SubScene
public val baseZProperty: SimpleDoubleProperty = SimpleDoubleProperty(0.0) public val baseZProperty: SimpleDoubleProperty = SimpleDoubleProperty(0.0)
public var z: Double by baseZProperty public var z: Double by baseZProperty
private val baseTranslate = Translate() private val baseTranslate = Translate(0.0, 0.0, 0.0)
// val basePositionProperty: ObjectBinding<Point3D> = // val basePositionProperty: ObjectBinding<Point3D> =
// nonNullObjectBinding(baseXProperty, baseYProperty, baseZProperty) { // nonNullObjectBinding(baseXProperty, baseYProperty, baseZProperty) {
@ -62,13 +62,14 @@ public class OrbitControls internal constructor(camera: Camera, canvas: SubScene
private val ry = Rotate(0.0, Rotate.Y_AXIS) private val ry = Rotate(0.0, Rotate.Y_AXIS)
private val rz = Rotate(0.0, Rotate.Z_AXIS) private val translate = Translate(0.0, 0.0, 0.0)
private val translate = Translate() //private val rz = Rotate(0.0, Rotate.Z_AXIS)
init { init {
camera.transforms.setAll(rx, ry, rz, baseTranslate, translate) camera.transforms.setAll(baseTranslate, ry, rx, translate)
update() update()
val listener = InvalidationListener { val listener = InvalidationListener {
update() update()
@ -81,8 +82,8 @@ public class OrbitControls internal constructor(camera: Camera, canvas: SubScene
baseZProperty.addListener(listener) baseZProperty.addListener(listener)
canvas.apply { canvas.apply {
// center.xProperty().bind(widthProperty().divide(2)) //center.xProperty().bind(widthProperty().divide(2))
// center.zProperty().bind(heightProperty().divide(2)) //center.zProperty().bind(heightProperty().divide(2))
handleMouse() handleMouse()
} }
// coordinateContainer?.vbox { // coordinateContainer?.vbox {
@ -96,32 +97,32 @@ public class OrbitControls internal constructor(camera: Camera, canvas: SubScene
val spherePosition = Point3D( val spherePosition = Point3D(
sin(zenith) * sin(azimuth), sin(zenith) * sin(azimuth),
cos(zenith), cos(zenith),
sin(zenith) * cos(azimuth) sin(zenith) * cos(azimuth),
).times(distance) ).times(distance)
val basePosition = Point3D(x, y, z) val basePosition = Point3D(x, y, z)
baseTranslate.x = x baseTranslate.x = x
baseTranslate.y = y baseTranslate.y = y
baseTranslate.z = z baseTranslate.z = z
//Create direction vector //Create direction vector
val cameraPosition = basePosition + spherePosition val camPosition = basePosition+spherePosition
val camDirection: Point3D = (-spherePosition).normalize() val camDirection: Point3D = (-spherePosition).normalize()
val xRotation = Math.toDegrees(asin(-camDirection.y)) val xRotation = Math.toDegrees(asin(-camDirection.y))
val yRotation = Math.toDegrees(atan2(camDirection.x, camDirection.z)) val yRotation = Math.toDegrees(atan2(camDirection.x, camDirection.z))
rx.pivotX = cameraPosition.x rx.pivotX = camPosition.x
rx.pivotY = cameraPosition.y rx.pivotY = camPosition.y
rx.pivotZ = cameraPosition.z rx.pivotZ = camPosition.z
rx.angle = xRotation rx.angle = xRotation
ry.pivotX = cameraPosition.x ry.pivotX = camPosition.x
ry.pivotY = cameraPosition.y ry.pivotY = camPosition.y
ry.pivotZ = cameraPosition.z ry.pivotZ = camPosition.z
ry.angle = yRotation ry.angle = yRotation
translate.x = cameraPosition.x translate.x = camPosition.x
translate.y = cameraPosition.y translate.y = camPosition.y
translate.z = cameraPosition.z translate.z = camPosition.z
} }