Add orx-view-box, adjust for api changes in OPENRNDR

This commit is contained in:
Edwin Jakobs
2022-11-30 11:32:12 +01:00
parent 711222db33
commit 4c22687763
16 changed files with 349 additions and 33 deletions

View File

@@ -4,6 +4,7 @@ import org.openrndr.Extension
import org.openrndr.MouseEvents
import org.openrndr.Program
import org.openrndr.draw.Drawer
import org.openrndr.draw.RenderTarget
import org.openrndr.math.Matrix44
import org.openrndr.math.transforms.buildTransform
@@ -36,6 +37,14 @@ class Camera2D : Extension {
}
override fun beforeDraw(drawer: Drawer, program: Program) {
drawer.pushTransforms()
drawer.ortho(RenderTarget.active)
drawer.view = view
}
}
override fun afterDraw(drawer: Drawer, program: Program) {
drawer.popTransforms()
}
}

View File

@@ -168,6 +168,9 @@ class OrbitalCamera(eye: Vector3 = Vector3.ZERO, lookAt: Vector3 = Vector3.UNIT_
override var enabled: Boolean = true
override fun beforeDraw(drawer: Drawer, program: Program) {
drawer.pushTransforms()
if (lastSeconds == -1.0) lastSeconds = program.seconds
val delta = program.seconds - lastSeconds
@@ -178,8 +181,7 @@ class OrbitalCamera(eye: Vector3 = Vector3.ZERO, lookAt: Vector3 = Vector3.UNIT_
}
override fun afterDraw(drawer: Drawer, program: Program) {
drawer.view = Matrix44.IDENTITY
drawer.ortho()
drawer.popTransforms()
}
}
@@ -206,7 +208,6 @@ fun OrbitalCamera.isolated(drawer: Drawer, function: Drawer.() -> Unit) {
* if you don't need to revert back to the orthographic projection.
*/
fun OrbitalCamera.applyTo(drawer: Drawer) {
if (projectionType == ProjectionType.PERSPECTIVE) {
drawer.perspective(fov, drawer.width.toDouble() / drawer.height, near, far)
} else {

View File

@@ -57,14 +57,14 @@ class OrbitalControls(
// half of the fov is center to top of screen
val targetDistance = offset.length * tan(fov.asRadians / 2)
val panX = (2 * delta.x * targetDistance / program.window.size.x)
val panY = (2 * delta.y * targetDistance / program.window.size.y)
val panX = (2 * delta.x * targetDistance / program.width)
val panY = (2 * delta.y * targetDistance / program.height)
orbitalCamera.pan(panX, -panY, 0.0)
} else {
val rotX = 360.0 * delta.x / program.window.size.x
val rotY = 360.0 * delta.y / program.window.size.y
val rotX = 360.0 * delta.x / program.width
val rotY = 360.0 * delta.y / program.height
orbitalCamera.rotate(rotX, rotY)
}
}