44 lines
1.7 KiB
Kotlin
44 lines
1.7 KiB
Kotlin
package org.openrndr.extra.kinect.v1.demo
|
|
|
|
import org.bytedeco.libfreenect.global.freenect
|
|
import org.bytedeco.libfreenect.global.freenect.*
|
|
import org.openrndr.application
|
|
import org.openrndr.extra.kinect.v1.getKinectsV1
|
|
import java.lang.RuntimeException
|
|
|
|
/**
|
|
* Even though this library is abstracting freenect access, it is still
|
|
* possible to call any low level kinect API through execute methods.
|
|
* The calls are executed in separate kinect runner thread but they will
|
|
* block the calling thread until the result is returned.
|
|
*/
|
|
fun main() = application {
|
|
program {
|
|
val kinects = getKinectsV1(this)
|
|
// the same as calling kinects.countDevices(), here to show that any value might be returned from execute
|
|
val num = kinects.execute { ctx -> freenect_num_devices(ctx.fnCtx) }
|
|
if (num == 0) { throw RuntimeException("no kinect detected") }
|
|
kinects.execute { ctx ->
|
|
freenect_set_log_level(ctx.fnCtx, freenect.FREENECT_LOG_FLOOD) // lots of logs
|
|
}
|
|
kinects.execute { ctx ->
|
|
// extra FREENECT_DEVICE_MOTOR gives control over tilt and LEDs
|
|
freenect_select_subdevices(ctx.fnCtx, FREENECT_DEVICE_CAMERA xor FREENECT_DEVICE_MOTOR)
|
|
}
|
|
val kinect = kinects.startDevice()
|
|
var tilt = 90.0
|
|
extend {
|
|
kinect.execute { ctx ->
|
|
freenect_set_led(ctx.fnDev, (seconds * 10).toInt() % 7) // disco
|
|
}
|
|
val currentTilt = if ((seconds % 10) < 5) -90.0 else 90.0
|
|
if (currentTilt != tilt) {
|
|
kinect.execute { ctx ->
|
|
freenect_set_tilt_degs(ctx.fnDev, currentTilt)
|
|
}
|
|
tilt = currentTilt
|
|
}
|
|
}
|
|
}
|
|
}
|