2
0
Эх сурвалжийг харах

addTangents for HMDModel (#934)

Sechgulo 4 жил өмнө
parent
commit
52511c494d
1 өөрчлөгдсөн 41 нэмэгдсэн , 0 устгасан
  1. 41 0
      h3d/prim/HMDModel.hx

+ 41 - 0
h3d/prim/HMDModel.hx

@@ -152,6 +152,47 @@ class HMDModel extends MeshPrimitive {
 		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 ) {
 		if( curMaterial < 0 ) {
 			super.render(engine);