|
@@ -9,7 +9,20 @@ class Model extends flash.utils.ByteArray {
|
|
|
|
|
|
}
|
|
|
|
|
|
-class LightShader extends h3d.Shader {
|
|
|
+class Axis implements h3d.IDrawable {
|
|
|
+
|
|
|
+ public function new() {
|
|
|
+ }
|
|
|
+
|
|
|
+ public function render( engine : h3d.Engine ) {
|
|
|
+ engine.line(0, 0, 0, 50, 0, 0, 0xFFFF0000);
|
|
|
+ engine.line(0, 0, 0, 0, 50, 0, 0xFF00FF00);
|
|
|
+ engine.line(0, 0, 0, 0, 0, 50, 0xFF0000FF);
|
|
|
+ }
|
|
|
+
|
|
|
+}
|
|
|
+
|
|
|
+class LightShader extends hxsl.Shader {
|
|
|
static var SRC = {
|
|
|
var input : {
|
|
|
pos : Float3,
|
|
@@ -42,11 +55,12 @@ class LightShader extends h3d.Shader {
|
|
|
class Anim {
|
|
|
|
|
|
var engine : h3d.Engine;
|
|
|
- var obj : h3d.CustomObject<LightShader>;
|
|
|
+ var scene : h3d.scene.Scene;
|
|
|
+ var obj : h3d.Drawable<LightShader>;
|
|
|
var model : h3d.prim.FBXModel;
|
|
|
var anim : h3d.prim.Skin.Animation;
|
|
|
var time : Float;
|
|
|
- var palette : Array<h3d.Matrix>;
|
|
|
+ var palette : flash.Vector<h3d.Matrix>;
|
|
|
|
|
|
var flag : Bool;
|
|
|
var view : Int;
|
|
@@ -58,6 +72,7 @@ class Anim {
|
|
|
engine.backgroundColor = 0xFF808080;
|
|
|
engine.onReady = onReady;
|
|
|
engine.init();
|
|
|
+ scene = new h3d.scene.Scene();
|
|
|
}
|
|
|
|
|
|
function onReady() {
|
|
@@ -75,13 +90,13 @@ class Anim {
|
|
|
});
|
|
|
|
|
|
var shader = new LightShader();
|
|
|
- var name = "", aname = "Take 001";
|
|
|
+ var name = "";
|
|
|
|
|
|
var file = new Model();
|
|
|
var lib = new h3d.fbx.Library();
|
|
|
lib.loadTextFile(file.readUTFBytes(file.length));
|
|
|
model = new h3d.prim.FBXModel(lib.getMesh(name));
|
|
|
-
|
|
|
+ var aname = model.listAnimations().first().split("::")[1];
|
|
|
try {
|
|
|
anim = model.getAnimation(aname);
|
|
|
} catch( d:Dynamic ) {
|
|
@@ -90,41 +105,40 @@ class Anim {
|
|
|
anim.computeAbsoluteFrames();
|
|
|
palette = anim.allocPalette();
|
|
|
|
|
|
- obj = new h3d.CustomObject(model, shader);
|
|
|
+ obj = new h3d.Drawable(model, shader);
|
|
|
obj.material.culling = None;
|
|
|
obj.material.blend(SrcAlpha, OneMinusSrcAlpha);
|
|
|
- obj.shader.tex = engine.mem.makeTexture(new Tex(0,0));
|
|
|
+ obj.shader.tex = engine.mem.makeTexture(new Tex(0, 0));
|
|
|
+
|
|
|
+ scene.addPass(obj);
|
|
|
+ scene.addPass(new Axis());
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
function onUpdate() {
|
|
|
if( !engine.begin() )
|
|
|
return;
|
|
|
|
|
|
var dist = 50., height = 10.;
|
|
|
-
|
|
|
+ var camera = scene.camera;
|
|
|
switch( view ) {
|
|
|
case 0:
|
|
|
- engine.camera.pos.set(0, height, dist);
|
|
|
- engine.camera.up.set(0, -1, 0);
|
|
|
- engine.camera.target.set(0, height, 0);
|
|
|
- engine.camera.update();
|
|
|
+ camera.pos.set(0, height, dist);
|
|
|
+ camera.up.set(0, -1, 0);
|
|
|
+ camera.target.set(0, height, 0);
|
|
|
case 1:
|
|
|
- engine.camera.pos.set(0, dist, 0);
|
|
|
- engine.camera.up.set(0, 1, 0);
|
|
|
- engine.camera.target.set(0, 0, 0);
|
|
|
- engine.camera.update();
|
|
|
+ camera.pos.set(0, dist, 0);
|
|
|
+ camera.up.set(0, 1, 0);
|
|
|
+ camera.target.set(0, 0, 0);
|
|
|
case 2:
|
|
|
var K = Math.sqrt(2);
|
|
|
- engine.camera.pos.set(dist, height, 0);
|
|
|
- engine.camera.up.set(1, 0, 0);
|
|
|
- engine.camera.target.set(0, height, 0);
|
|
|
- engine.camera.update();
|
|
|
+ camera.pos.set(dist, height, 0);
|
|
|
+ camera.up.set(1, 0, 0);
|
|
|
+ camera.target.set(0, height, 0);
|
|
|
case 3:
|
|
|
var speed = 0.02;
|
|
|
- engine.camera.pos.set(Math.cos(time * speed) * dist, Math.sin(time * speed) * dist, height);
|
|
|
- engine.camera.up.set(0, 0, -1);
|
|
|
- engine.camera.target.set(0, 0, height);
|
|
|
- engine.camera.update();
|
|
|
+ camera.pos.set(Math.cos(time * speed) * dist, Math.sin(time * speed) * dist, height);
|
|
|
+ camera.up.set(0, 0, -1);
|
|
|
+ camera.target.set(0, 0, height);
|
|
|
default:
|
|
|
view = 0;
|
|
|
}
|
|
@@ -139,17 +153,13 @@ class Anim {
|
|
|
var lspeed = 0.03;
|
|
|
var light = new h3d.Vector( -Math.cos(time * lspeed), -Math.sin(time * lspeed), 3 );
|
|
|
light.normalize();
|
|
|
+ camera.update();
|
|
|
obj.shader.light = light;
|
|
|
- obj.shader.mproj = engine.camera.m;
|
|
|
+ obj.shader.mproj = camera.m;
|
|
|
obj.shader.mpos = h3d.Matrix.I();
|
|
|
obj.shader.bones = palette;
|
|
|
- obj.render(engine);
|
|
|
|
|
|
- engine.line(0, 0, 0, 50, 0, 0, 0xFFFF0000);
|
|
|
- engine.line(0, 0, 0, 0, 50, 0, 0xFF00FF00);
|
|
|
- engine.line(0, 0, 0, 0, 0, 50, 0xFF0000FF);
|
|
|
-
|
|
|
- engine.end();
|
|
|
+ engine.render(scene);
|
|
|
}
|
|
|
|
|
|
static function main() {
|