11package de.fabmax.kool.scene
22
3- import de.fabmax.kool.KoolContext
43import de.fabmax.kool.input.Pointer
54import de.fabmax.kool.math.*
65import de.fabmax.kool.pipeline.RenderPass
@@ -106,13 +105,13 @@ abstract class Camera(name: String = "camera") : Node(name) {
106105
107106 abstract fun updateProjectionMatrix (updateEvent : RenderPass .UpdateEvent )
108107
109- fun computePickRay (pickRay : RayF , ptr : Pointer , viewport : Viewport , ctx : KoolContext ): Boolean {
110- return ptr.isValid && computePickRay(pickRay, ptr.x.toFloat(), ptr.y.toFloat(), viewport, ctx )
108+ fun computePickRay (pickRay : RayF , ptr : Pointer , viewport : Viewport ): Boolean {
109+ return ptr.isValid && computePickRay(pickRay, ptr.x.toFloat(), ptr.y.toFloat(), viewport)
111110 }
112111
113- fun computePickRay (pickRay : RayF , screenX : Float , screenY : Float , viewport : Viewport , ctx : KoolContext ): Boolean {
114- var valid = unProjectScreen(tmpVec3.set(screenX, screenY, 0f ), viewport, ctx, pickRay.origin)
115- valid = valid && unProjectScreen(tmpVec3.set(screenX, screenY, 1f ), viewport, ctx, pickRay.direction)
112+ fun computePickRay (pickRay : RayF , screenX : Float , screenY : Float , viewport : Viewport ): Boolean {
113+ var valid = unProjectScreen(tmpVec3.set(screenX, screenY, 0f ), viewport, pickRay.origin)
114+ valid = valid && unProjectScreen(tmpVec3.set(screenX, screenY, 1f ), viewport, pickRay.direction)
116115
117116 if (valid) {
118117 pickRay.direction.subtract(pickRay.origin)
@@ -122,13 +121,13 @@ abstract class Camera(name: String = "camera") : Node(name) {
122121 return valid
123122 }
124123
125- fun initRayTes (rayTest : RayTest , ptr : Pointer , viewport : Viewport , ctx : KoolContext ): Boolean {
126- return ptr.isValid && initRayTes(rayTest, ptr.x.toFloat(), ptr.y.toFloat(), viewport, ctx )
124+ fun initRayTes (rayTest : RayTest , ptr : Pointer , viewport : Viewport ): Boolean {
125+ return ptr.isValid && initRayTes(rayTest, ptr.x.toFloat(), ptr.y.toFloat(), viewport)
127126 }
128127
129- fun initRayTes (rayTest : RayTest , screenX : Float , screenY : Float , viewport : Viewport , ctx : KoolContext ): Boolean {
128+ fun initRayTes (rayTest : RayTest , screenX : Float , screenY : Float , viewport : Viewport ): Boolean {
130129 rayTest.clear()
131- return computePickRay(rayTest.ray, screenX, screenY, viewport, ctx )
130+ return computePickRay(rayTest.ray, screenX, screenY, viewport)
132131 }
133132
134133 abstract fun computeFrustumPlane (z : Float , result : FrustumPlane )
@@ -164,16 +163,16 @@ abstract class Camera(name: String = "camera") : Node(name) {
164163 return projectOk
165164 }
166165
167- fun projectScreen (world : Vec3f , viewport : Viewport , ctx : KoolContext , result : MutableVec3f ): Boolean {
166+ fun projectScreen (world : Vec3f , viewport : Viewport , result : MutableVec3f ): Boolean {
168167 val projectOk = projectViewport(world, viewport, result)
169168 result.x + = viewport.x
170- result.y + = ctx.windowHeight - viewport.y - viewport.height
169+ result.y + = viewport.y
171170 return projectOk
172171 }
173172
174- fun unProjectScreen (screen : Vec3f , viewport : Viewport , ctx : KoolContext , result : MutableVec3f ): Boolean {
173+ fun unProjectScreen (screen : Vec3f , viewport : Viewport , result : MutableVec3f ): Boolean {
175174 val x = screen.x - viewport.x
176- val y = (ctx.windowHeight - screen.y) - viewport .y
175+ val y = viewport.y + viewport.height - screen .y
177176
178177 tmpVec4.set(2f * x / viewport.width - 1f , 2f * y / viewport.height - 1f , 2f * screen.z - 1f , 1f )
179178 invViewProj.transform(tmpVec4)
0 commit comments