[ts][threejs] Added VertexEffect to SkeletonMesh

This commit is contained in:
badlogic 2017-06-21 16:32:12 +02:00
parent b685e490c1
commit 8d4a14b200
7 changed files with 184 additions and 24 deletions

View File

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

View File

@ -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 one or more lines are too long

View File

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

View File

@ -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 one or more lines are too long

View File

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