From 58b3c32f014b7250acd01fa47d501fc848f3c041 Mon Sep 17 00:00:00 2001 From: Lubos Lenco Date: Sun, 15 May 2016 12:12:21 +0200 Subject: [PATCH] Empty decals pass. --- Sources/cycles/trait/ArcBallCamera.hx | 53 +++++++++ Sources/cycles/trait/FlyCamera.hx | 112 ++++++++++++++++++ Sources/cycles/trait/RigidBody.hx | 2 +- raw/decals_pass/decals_pass.frag.glsl | 13 ++ raw/decals_pass/decals_pass.shader.json | 25 ++++ raw/decals_pass/decals_pass.vert.glsl | 18 +++ raw/deferred_light/deferred_light.shader.json | 6 +- 7 files changed, 225 insertions(+), 4 deletions(-) create mode 100644 Sources/cycles/trait/ArcBallCamera.hx create mode 100644 Sources/cycles/trait/FlyCamera.hx create mode 100644 raw/decals_pass/decals_pass.frag.glsl create mode 100755 raw/decals_pass/decals_pass.shader.json create mode 100644 raw/decals_pass/decals_pass.vert.glsl diff --git a/Sources/cycles/trait/ArcBallCamera.hx b/Sources/cycles/trait/ArcBallCamera.hx new file mode 100644 index 00000000..2fec6d1e --- /dev/null +++ b/Sources/cycles/trait/ArcBallCamera.hx @@ -0,0 +1,53 @@ +package cycles.trait; + +import lue.Trait; +import lue.sys.Input; +import lue.node.CameraNode; +import lue.node.RootNode; +import lue.math.Vec4; +import lue.math.Quat; + +class ArcBallCamera extends Trait { + + var camera:CameraNode; + var origin:Vec4; + + var pitchRad:Float; + + public function new() { + super(); + + origin = new Vec4(); + + requestInit(init); + requestUpdate(update); + } + + function init() { + camera = RootNode.cameras[0]; + + var r = camera.transform.rot; + var q = new Quat(r.x, r.y, r.z, r.w); + q.inverse(q); + + var e = q.getEuler(); + pitchRad = lue.math.Math.degToRad(90) - e.x; + } + + function update() { + + if (Input.touch) { + var dist = lue.math.Math.distance3d(camera.transform.pos, origin); + + camera.move(camera.look(), dist); + camera.rotate(camera.right(), pitchRad); + + camera.rotate(camera.look(), -Input.deltaX / 200); + + camera.rotate(camera.right(), -pitchRad); + camera.move(camera.look(), -dist); + + camera.move(camera.look(), Input.deltaY / 50); + } + } +} diff --git a/Sources/cycles/trait/FlyCamera.hx b/Sources/cycles/trait/FlyCamera.hx new file mode 100644 index 00000000..fcbc8cb5 --- /dev/null +++ b/Sources/cycles/trait/FlyCamera.hx @@ -0,0 +1,112 @@ +package cycles.trait; + +import kha.Key; +import lue.Trait; +import lue.sys.Input; +import lue.sys.Time; +import lue.node.CameraNode; +import lue.node.RootNode; +import lue.math.Vec4; +import lue.math.Quat; + +class FlyCamera extends Trait { + + var camera:CameraNode; + + var pitchRad:Float; + + var moveForward = false; + var moveBackward = false; + var strafeLeft = false; + var strafeRight = false; + var strafeForward = false; + var strafeBackward = false; + + public function new() { + super(); + + kha.input.Keyboard.get().notify(onKeyDown, onKeyUp); + + requestInit(init); + requestUpdate(update); + requestRemove(removed); + } + + function removed() { + kha.input.Keyboard.get().remove(onKeyDown, onKeyUp); + } + + function init() { + camera = RootNode.cameras[0]; + + var r = camera.transform.rot; + var q = new Quat(r.x, r.y, r.z, r.w); + q.inverse(q); + + var e = q.getEuler(); + pitchRad = lue.math.Math.degToRad(90) - e.x; + } + + function update() { + if (Input.occupied) return; + + var d = Time.delta * 5 / 2; + + if (moveForward) { + camera.move(camera.look(), d); + } + else if (moveBackward) { + camera.move(camera.look(), -d); + } + if (strafeRight) { + camera.move(camera.right(), -d); + } + else if (strafeLeft) { + camera.move(camera.right(), d); + } + if (strafeForward) { + var dir = new Vec4(0, 1, 0); + camera.move(dir, -d); + } + else if (strafeBackward) { + var dir = new Vec4(0, 1, 0); + camera.move(dir, d); + } + + if (Input.touch) { + camera.rotate(camera.up(), Input.deltaX / 200); + camera.rotate(camera.right(), Input.deltaY / 200); + } + } + + function onKeyDown(key:Key, char:String) { + if (char == 'w') moveForward = true; + else if (char == 's') moveBackward = true; + else if (char == 'a') strafeLeft = true; + else if (char == 'd') strafeRight = true; + else if (char == 'q') strafeForward = true; + else if (char == 'e') strafeBackward = true; + + // if (char == 'r') {lue.node.ModelNode._u1 += 0.01;trace("u1:", lue.node.ModelNode._u1);} + // else if (char == 'f') {lue.node.ModelNode._u1 -= 0.01;trace("u1:", lue.node.ModelNode._u1);} + // else if (char == 't') {lue.node.ModelNode._u2 += 0.01;trace("u2:", lue.node.ModelNode._u2);} + // else if (char == 'g') {lue.node.ModelNode._u2 -= 0.01;trace("u2:", lue.node.ModelNode._u2);} + // else if (char == 'y') {lue.node.ModelNode._u3 += 0.1;trace("u3:", lue.node.ModelNode._u3);} + // else if (char == 'h') {lue.node.ModelNode._u3 -= 0.1;trace("u3:", lue.node.ModelNode._u3);} + // else if (char == 'u') {lue.node.ModelNode._u4 += 0.1;trace("u4:", lue.node.ModelNode._u4);} + // else if (char == 'j') {lue.node.ModelNode._u4 -= 0.1;trace("u4:", lue.node.ModelNode._u4);} + // else if (char == 'i') {lue.node.ModelNode._u5 += 0.1;trace("u5:", lue.node.ModelNode._u5);} + // else if (char == 'k') {lue.node.ModelNode._u5 -= 0.1;trace("u5:", lue.node.ModelNode._u5);} + // else if (char == 'o') {lue.node.ModelNode._u6 += 0.005;trace("u6:", lue.node.ModelNode._u6);} + // else if (char == 'l') {lue.node.ModelNode._u6 -= 0.005;trace("u6:", lue.node.ModelNode._u6);} + } + + function onKeyUp(key:kha.Key, char:String) { + if (/*key == Key.UP ||*/ char == 'w') moveForward = false; + else if (/*key == Key.DOWN ||*/ char == 's') moveBackward = false; + else if (/*key == Key.LEFT ||*/ char == 'a') strafeLeft = false; + else if (/*key == Key.RIGHT ||*/ char == 'd') strafeRight = false; + else if (char == 'q') strafeForward = false; + else if (char == 'e') strafeBackward = false; + } +} diff --git a/Sources/cycles/trait/RigidBody.hx b/Sources/cycles/trait/RigidBody.hx index 59350491..d7b058cd 100644 --- a/Sources/cycles/trait/RigidBody.hx +++ b/Sources/cycles/trait/RigidBody.hx @@ -43,7 +43,7 @@ class RigidBody extends Trait { public var onCreated:Void->Void = null; - public function new(mass = 1.0, shape = SHAPE_BOX, friction = 0.5, collisionMargin = 0.06) { + public function new(mass = 1.0, shape = SHAPE_BOX, friction = 0.5, collisionMargin = 0.0) { super(); this.mass = mass; diff --git a/raw/decals_pass/decals_pass.frag.glsl b/raw/decals_pass/decals_pass.frag.glsl new file mode 100644 index 00000000..ae53714a --- /dev/null +++ b/raw/decals_pass/decals_pass.frag.glsl @@ -0,0 +1,13 @@ +#version 450 + +#ifdef GL_ES +precision mediump float; +#endif + +uniform sampler2D tex; + +in vec2 texCoord; + +void main() { + // gl_FragColor = texColor; +} diff --git a/raw/decals_pass/decals_pass.shader.json b/raw/decals_pass/decals_pass.shader.json new file mode 100755 index 00000000..5f832e32 --- /dev/null +++ b/raw/decals_pass/decals_pass.shader.json @@ -0,0 +1,25 @@ +{ + "contexts": [ + { + "id": "decals_pass", + "params": [ + { + "id": "depth_write", + "value": "true" + }, + { + "id": "compare_mode", + "value": "always" + }, + { + "id": "cull_mode", + "value": "none" + } + ], + "links": [], + "texture_params": [], + "vertex_shader": "decals_pass.vert.glsl", + "fragment_shader": "decals_pass.frag.glsl" + } + ] +} diff --git a/raw/decals_pass/decals_pass.vert.glsl b/raw/decals_pass/decals_pass.vert.glsl new file mode 100644 index 00000000..e1cc9c08 --- /dev/null +++ b/raw/decals_pass/decals_pass.vert.glsl @@ -0,0 +1,18 @@ +#version 450 + +#ifdef GL_ES +precision highp float; +#endif + +in vec2 pos; + +out vec2 texCoord; + +const vec2 madd = vec2(0.5, 0.5); + +void main() { + // Scale vertex attribute to [0-1] range + texCoord = pos.xy * madd + madd; + + gl_Position = vec4(pos.xy, 0.0, 1.0); +} diff --git a/raw/deferred_light/deferred_light.shader.json b/raw/deferred_light/deferred_light.shader.json index d5b9bd4a..5e9e7e67 100755 --- a/raw/deferred_light/deferred_light.shader.json +++ b/raw/deferred_light/deferred_light.shader.json @@ -52,17 +52,17 @@ { "id": "sltcMat", "link": "_ltcMat", - "ifdef": ["PolyLight"] + "ifdef": ["_PolyLight"] }, { "id": "sltcMag", "link": "_ltcMag", - "ifdef": ["PolyLight"] + "ifdef": ["_PolyLight"] }, { "id": "time", "link": "_time", - "ifdef": ["PolyLight"] + "ifdef": ["_PolyLight"] } ], "vertex_shader": "deferred_light.vert.glsl",