|
@@ -152,6 +152,47 @@ class HMDModel extends MeshPrimitive {
|
|
normalsRecomputed = name;
|
|
normalsRecomputed = name;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ public function addTangents() {
|
|
|
|
+ var pos = lib.getBuffers(data, [new hxd.fmt.hmd.Data.GeometryFormat("position", DVec3)]);
|
|
|
|
+ var ids = new Array();
|
|
|
|
+ var pts : Array<h3d.col.Point> = [];
|
|
|
|
+ for( i in 0...data.vertexCount ) {
|
|
|
|
+ var added = false;
|
|
|
|
+ var px = pos.vertexes[i * 3];
|
|
|
|
+ var py = pos.vertexes[i * 3 + 1];
|
|
|
|
+ var pz = pos.vertexes[i * 3 + 2];
|
|
|
|
+ for(i in 0...pts.length) {
|
|
|
|
+ var p = pts[i];
|
|
|
|
+ if(p.x == px && p.y == py && p.z == pz) {
|
|
|
|
+ ids.push(i);
|
|
|
|
+ added = true;
|
|
|
|
+ break;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ if( !added ) {
|
|
|
|
+ ids.push(pts.length);
|
|
|
|
+ pts.push(new h3d.col.Point(px,py,pz));
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ var idx = new hxd.IndexBuffer();
|
|
|
|
+ for( i in pos.indexes )
|
|
|
|
+ idx.push(ids[i]);
|
|
|
|
+ var pol = new Polygon(pts, idx);
|
|
|
|
+ pol.addNormals();
|
|
|
|
+ pol.addTangents();
|
|
|
|
+ var v = new hxd.FloatBuffer();
|
|
|
|
+ v.grow(data.vertexCount*3);
|
|
|
|
+ var k = 0;
|
|
|
|
+ for( i in 0...data.vertexCount ) {
|
|
|
|
+ var t = pol.tangents[ids[i]];
|
|
|
|
+ v[k++] = t.x;
|
|
|
|
+ v[k++] = t.y;
|
|
|
|
+ v[k++] = t.z;
|
|
|
|
+ }
|
|
|
|
+ var buf = h3d.Buffer.ofFloats(v, 3);
|
|
|
|
+ addBuffer("tangent", buf, 0);
|
|
|
|
+ }
|
|
|
|
+
|
|
override function render( engine : h3d.Engine ) {
|
|
override function render( engine : h3d.Engine ) {
|
|
if( curMaterial < 0 ) {
|
|
if( curMaterial < 0 ) {
|
|
super.render(engine);
|
|
super.render(engine);
|