Empty decals pass.

This commit is contained in:
Lubos Lenco 2016-05-15 12:12:21 +02:00
parent 68452c0006
commit 58b3c32f01
7 changed files with 225 additions and 4 deletions

View file

@ -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);
}
}
}

View file

@ -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;
}
}

View file

@ -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;

View file

@ -0,0 +1,13 @@
#version 450
#ifdef GL_ES
precision mediump float;
#endif
uniform sampler2D tex;
in vec2 texCoord;
void main() {
// gl_FragColor = texColor;
}

View file

@ -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"
}
]
}

View file

@ -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);
}

View file

@ -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",