瀏覽代碼

[ts][threejs] Added VertexEffect to SkeletonMesh

badlogic 8 年之前
父節點
當前提交
8d4a14b200

+ 4 - 0
spine-ts/build/spine-all.d.ts

@@ -1699,6 +1699,10 @@ declare module spine.threejs {
 }
 declare module spine.threejs {
 	class SkeletonMesh extends THREE.Mesh {
+		tempPos: Vector2;
+		tempUv: Vector2;
+		tempLight: Color;
+		tempDark: Color;
 		skeleton: Skeleton;
 		state: AnimationState;
 		zOffset: number;

+ 58 - 7
spine-ts/build/spine-all.js

@@ -9264,6 +9264,10 @@ var spine;
 			__extends(SkeletonMesh, _super);
 			function SkeletonMesh(skeletonData) {
 				var _this = _super.call(this) || this;
+				_this.tempPos = new spine.Vector2();
+				_this.tempUv = new spine.Vector2();
+				_this.tempLight = new spine.Color();
+				_this.tempDark = new spine.Color();
 				_this.zOffset = 0.1;
 				_this.clipper = new spine.SkeletonClipping();
 				_this.vertices = spine.Utils.newFloatArray(1024);
@@ -9287,6 +9291,10 @@ var spine;
 				this.updateGeometry();
 			};
 			SkeletonMesh.prototype.updateGeometry = function () {
+				var tempPos = this.tempPos;
+				var tempUv = this.tempUv;
+				var tempLight = this.tempLight;
+				var tempDark = this.tempDark;
 				var geometry = this.geometry;
 				var numVertices = 0;
 				var verticesLength = 0;
@@ -9354,17 +9362,60 @@ var spine;
 							clipper.clipTriangles(vertices, numFloats, triangles, triangles.length, uvs, color, null, false);
 							var clippedVertices = clipper.clippedVertices;
 							var clippedTriangles = clipper.clippedTriangles;
+							if (this.vertexEffect != null) {
+								var vertexEffect = this.vertexEffect;
+								var verts = clippedVertices;
+								for (var v = 0, n_9 = clippedVertices.length; v < n_9; v += vertexSize) {
+									tempPos.x = verts[v];
+									tempPos.y = verts[v + 1];
+									tempLight.setFromColor(color);
+									tempDark.set(0, 0, 0, 0);
+									tempUv.x = verts[v + 6];
+									tempUv.y = verts[v + 7];
+									vertexEffect.transform(tempPos, tempUv, tempLight, tempDark);
+									verts[v] = tempPos.x;
+									verts[v + 1] = tempPos.y;
+									verts[v + 2] = tempLight.r;
+									verts[v + 3] = tempLight.g;
+									verts[v + 4] = tempLight.b;
+									verts[v + 5] = tempLight.a;
+									verts[v + 6] = tempUv.x;
+									verts[v + 7] = tempUv.y;
+								}
+							}
 							batcher.batch(clippedVertices, clippedVertices.length, clippedTriangles, clippedTriangles.length, z);
 						}
 						else {
 							var verts = vertices;
-							for (var v = 2, u = 0, n_9 = numFloats; v < n_9; v += vertexSize, u += 2) {
-								verts[v] = color.r;
-								verts[v + 1] = color.g;
-								verts[v + 2] = color.b;
-								verts[v + 3] = color.a;
-								verts[v + 4] = uvs[u];
-								verts[v + 5] = uvs[u + 1];
+							if (this.vertexEffect != null) {
+								var vertexEffect = this.vertexEffect;
+								for (var v = 0, u = 0, n_10 = numFloats; v < n_10; v += vertexSize, u += 2) {
+									tempPos.x = verts[v];
+									tempPos.y = verts[v + 1];
+									tempLight.setFromColor(color);
+									tempDark.set(0, 0, 0, 0);
+									tempUv.x = uvs[u];
+									tempUv.y = uvs[u + 1];
+									vertexEffect.transform(tempPos, tempUv, tempLight, tempDark);
+									verts[v] = tempPos.x;
+									verts[v + 1] = tempPos.y;
+									verts[v + 2] = tempLight.r;
+									verts[v + 3] = tempLight.g;
+									verts[v + 4] = tempLight.b;
+									verts[v + 5] = tempLight.a;
+									verts[v + 6] = tempUv.x;
+									verts[v + 7] = tempUv.y;
+								}
+							}
+							else {
+								for (var v = 2, u = 0, n_11 = numFloats; v < n_11; v += vertexSize, u += 2) {
+									verts[v] = color.r;
+									verts[v + 1] = color.g;
+									verts[v + 2] = color.b;
+									verts[v + 3] = color.a;
+									verts[v + 4] = uvs[u];
+									verts[v + 5] = uvs[u + 1];
+								}
 							}
 							batcher.batch(vertices, numFloats, triangles, triangles.length, z);
 						}

File diff suppressed because it is too large
+ 0 - 0
spine-ts/build/spine-all.js.map


+ 4 - 0
spine-ts/build/spine-threejs.d.ts

@@ -1238,6 +1238,10 @@ declare module spine.threejs {
 }
 declare module spine.threejs {
 	class SkeletonMesh extends THREE.Mesh {
+		tempPos: Vector2;
+		tempUv: Vector2;
+		tempLight: Color;
+		tempDark: Color;
 		skeleton: Skeleton;
 		state: AnimationState;
 		zOffset: number;

+ 58 - 7
spine-ts/build/spine-threejs.js

@@ -6514,6 +6514,10 @@ var spine;
 			__extends(SkeletonMesh, _super);
 			function SkeletonMesh(skeletonData) {
 				var _this = _super.call(this) || this;
+				_this.tempPos = new spine.Vector2();
+				_this.tempUv = new spine.Vector2();
+				_this.tempLight = new spine.Color();
+				_this.tempDark = new spine.Color();
 				_this.zOffset = 0.1;
 				_this.clipper = new spine.SkeletonClipping();
 				_this.vertices = spine.Utils.newFloatArray(1024);
@@ -6537,6 +6541,10 @@ var spine;
 				this.updateGeometry();
 			};
 			SkeletonMesh.prototype.updateGeometry = function () {
+				var tempPos = this.tempPos;
+				var tempUv = this.tempUv;
+				var tempLight = this.tempLight;
+				var tempDark = this.tempDark;
 				var geometry = this.geometry;
 				var numVertices = 0;
 				var verticesLength = 0;
@@ -6604,17 +6612,60 @@ var spine;
 							clipper.clipTriangles(vertices, numFloats, triangles, triangles.length, uvs, color, null, false);
 							var clippedVertices = clipper.clippedVertices;
 							var clippedTriangles = clipper.clippedTriangles;
+							if (this.vertexEffect != null) {
+								var vertexEffect = this.vertexEffect;
+								var verts = clippedVertices;
+								for (var v = 0, n_2 = clippedVertices.length; v < n_2; v += vertexSize) {
+									tempPos.x = verts[v];
+									tempPos.y = verts[v + 1];
+									tempLight.setFromColor(color);
+									tempDark.set(0, 0, 0, 0);
+									tempUv.x = verts[v + 6];
+									tempUv.y = verts[v + 7];
+									vertexEffect.transform(tempPos, tempUv, tempLight, tempDark);
+									verts[v] = tempPos.x;
+									verts[v + 1] = tempPos.y;
+									verts[v + 2] = tempLight.r;
+									verts[v + 3] = tempLight.g;
+									verts[v + 4] = tempLight.b;
+									verts[v + 5] = tempLight.a;
+									verts[v + 6] = tempUv.x;
+									verts[v + 7] = tempUv.y;
+								}
+							}
 							batcher.batch(clippedVertices, clippedVertices.length, clippedTriangles, clippedTriangles.length, z);
 						}
 						else {
 							var verts = vertices;
-							for (var v = 2, u = 0, n_2 = numFloats; v < n_2; v += vertexSize, u += 2) {
-								verts[v] = color.r;
-								verts[v + 1] = color.g;
-								verts[v + 2] = color.b;
-								verts[v + 3] = color.a;
-								verts[v + 4] = uvs[u];
-								verts[v + 5] = uvs[u + 1];
+							if (this.vertexEffect != null) {
+								var vertexEffect = this.vertexEffect;
+								for (var v = 0, u = 0, n_3 = numFloats; v < n_3; v += vertexSize, u += 2) {
+									tempPos.x = verts[v];
+									tempPos.y = verts[v + 1];
+									tempLight.setFromColor(color);
+									tempDark.set(0, 0, 0, 0);
+									tempUv.x = uvs[u];
+									tempUv.y = uvs[u + 1];
+									vertexEffect.transform(tempPos, tempUv, tempLight, tempDark);
+									verts[v] = tempPos.x;
+									verts[v + 1] = tempPos.y;
+									verts[v + 2] = tempLight.r;
+									verts[v + 3] = tempLight.g;
+									verts[v + 4] = tempLight.b;
+									verts[v + 5] = tempLight.a;
+									verts[v + 6] = tempUv.x;
+									verts[v + 7] = tempUv.y;
+								}
+							}
+							else {
+								for (var v = 2, u = 0, n_4 = numFloats; v < n_4; v += vertexSize, u += 2) {
+									verts[v] = color.r;
+									verts[v + 1] = color.g;
+									verts[v + 2] = color.b;
+									verts[v + 3] = color.a;
+									verts[v + 4] = uvs[u];
+									verts[v + 5] = uvs[u + 1];
+								}
 							}
 							batcher.batch(vertices, numFloats, triangles, triangles.length, z);
 						}

File diff suppressed because it is too large
+ 0 - 0
spine-ts/build/spine-threejs.js.map


+ 58 - 8
spine-ts/threejs/src/SkeletonMesh.ts

@@ -30,7 +30,10 @@
 
 module spine.threejs {
 	export class SkeletonMesh extends THREE.Mesh {
-
+		tempPos: Vector2 = new Vector2();
+		tempUv: Vector2 = new Vector2();
+		tempLight = new Color();
+		tempDark = new Color();
 		skeleton: Skeleton;
 		state: AnimationState;
 		zOffset: number = 0.1;
@@ -71,6 +74,11 @@ module spine.threejs {
 		}
 
 		private updateGeometry() {
+			let tempPos = this.tempPos;
+			let tempUv = this.tempUv;
+			let tempLight = this.tempLight;
+			let tempDark = this.tempDark;
+
 			let geometry = <THREE.BufferGeometry>this.geometry;
 			var numVertices = 0;
 			var verticesLength = 0;
@@ -148,16 +156,58 @@ module spine.threejs {
 						clipper.clipTriangles(vertices, numFloats, triangles, triangles.length, uvs, color, null, false);
 						let clippedVertices = clipper.clippedVertices;
 						let clippedTriangles = clipper.clippedTriangles;
+						if (this.vertexEffect != null) {
+							let vertexEffect = this.vertexEffect;
+							let verts = clippedVertices;
+							for (let v = 0, n = clippedVertices.length; v < n; v += vertexSize) {
+								tempPos.x = verts[v];
+								tempPos.y = verts[v + 1];
+								tempLight.setFromColor(color);
+								tempDark.set(0, 0, 0, 0);
+								tempUv.x = verts[v + 6];
+								tempUv.y = verts[v + 7];
+								vertexEffect.transform(tempPos, tempUv, tempLight, tempDark);
+								verts[v] = tempPos.x;
+								verts[v + 1] = tempPos.y;
+								verts[v + 2] = tempLight.r;
+								verts[v + 3] = tempLight.g;
+								verts[v + 4] = tempLight.b;
+								verts[v + 5] = tempLight.a;
+								verts[v + 6] = tempUv.x;
+								verts[v + 7] = tempUv.y;
+							}
+						}
 						batcher.batch(clippedVertices, clippedVertices.length, clippedTriangles, clippedTriangles.length, z);
 					} else {
 						let verts = vertices;
-						for (let v = 2, u = 0, n = numFloats; v < n; v += vertexSize, u += 2) {
-							verts[v] = color.r;
-							verts[v + 1] = color.g;
-							verts[v + 2] = color.b;
-							verts[v + 3] = color.a;
-							verts[v + 4] = uvs[u];
-							verts[v + 5] = uvs[u + 1];
+						if (this.vertexEffect != null) {
+							let vertexEffect = this.vertexEffect;
+							for (let v = 0, u = 0, n = numFloats; v < n; v += vertexSize, u += 2) {
+								tempPos.x = verts[v];
+								tempPos.y = verts[v + 1];
+								tempLight.setFromColor(color);
+								tempDark.set(0, 0, 0, 0);
+								tempUv.x = uvs[u];
+								tempUv.y = uvs[u + 1];
+								vertexEffect.transform(tempPos, tempUv, tempLight, tempDark);
+								verts[v] = tempPos.x;
+								verts[v + 1] = tempPos.y;
+								verts[v + 2] = tempLight.r;
+								verts[v + 3] = tempLight.g;
+								verts[v + 4] = tempLight.b;
+								verts[v + 5] = tempLight.a;
+								verts[v + 6] = tempUv.x;
+								verts[v + 7] = tempUv.y;
+							}
+						} else {
+							for (let v = 2, u = 0, n = numFloats; v < n; v += vertexSize, u += 2) {
+								verts[v] = color.r;
+								verts[v + 1] = color.g;
+								verts[v + 2] = color.b;
+								verts[v + 3] = color.a;
+								verts[v + 4] = uvs[u];
+								verts[v + 5] = uvs[u + 1];
+							}
 						}
 						batcher.batch(vertices, numFloats, triangles, triangles.length, z);
 					}

Some files were not shown because too many files changed in this diff