From 3b8aef48901c3e77742d21b48349a33f34b02b53 Mon Sep 17 00:00:00 2001 From: NathanSweet Date: Tue, 8 Oct 2013 19:34:45 +0200 Subject: [PATCH] Much better normals calculation. --- spine-tk2d/Assets/Spine/SkeletonComponent.cs | 22 ++++++++++--------- spine-unity/Assets/Spine/SkeletonComponent.cs | 22 ++++++++++--------- 2 files changed, 24 insertions(+), 20 deletions(-) diff --git a/spine-tk2d/Assets/Spine/SkeletonComponent.cs b/spine-tk2d/Assets/Spine/SkeletonComponent.cs index db2a4ba8b..bd2bf1c34 100644 --- a/spine-tk2d/Assets/Spine/SkeletonComponent.cs +++ b/spine-tk2d/Assets/Spine/SkeletonComponent.cs @@ -55,7 +55,6 @@ public class SkeletonComponent : MonoBehaviour { private Material[] sharedMaterials = new Material[0]; private List submeshMaterials = new List(); private List submeshes = new List(); - private Vector4[] tangents = new Vector4[0]; public virtual void Clear () { GetComponent().mesh = null; @@ -192,6 +191,7 @@ public class SkeletonComponent : MonoBehaviour { vertexIndex += 4; } + mesh.vertices = vertices; mesh.colors32 = colors; mesh.uv = uvs; @@ -201,16 +201,18 @@ public class SkeletonComponent : MonoBehaviour { for (int i = 0; i < submeshCount; ++i) mesh.SetTriangles(submeshes[i].indexes, i); - if (calculateNormals) { - mesh.RecalculateNormals(); + if (newTriangles && calculateNormals) { + Vector3[] normals = new Vector3[vertexCount]; + Vector3 normal = new Vector3(0, 0, -1); + for (int i = 0; i < vertexCount; i++) + normals[i] = normal; + mesh.normals = normals; + if (calculateTangents) { - Vector4[] tangents = this.tangents; - int count = mesh.normals.Length; - if (tangents.Length != count) { - this.tangents = tangents = new Vector4[count]; - for (int i = 0; i < count; i++) - tangents[i] = new Vector4(1, 0, 0, 1); - } + Vector4[] tangents = new Vector4[vertexCount]; + Vector3 tangent = new Vector3(0, 0, 1); + for (int i = 0; i < vertexCount; i++) + tangents[i] = tangent; mesh.tangents = tangents; } } diff --git a/spine-unity/Assets/Spine/SkeletonComponent.cs b/spine-unity/Assets/Spine/SkeletonComponent.cs index b841ba687..8df5b5c8d 100644 --- a/spine-unity/Assets/Spine/SkeletonComponent.cs +++ b/spine-unity/Assets/Spine/SkeletonComponent.cs @@ -55,7 +55,6 @@ public class SkeletonComponent : MonoBehaviour { private Material[] sharedMaterials = new Material[0]; private List submeshMaterials = new List(); private List submeshes = new List(); - private Vector4[] tangents = new Vector4[0]; public virtual void Clear () { GetComponent().mesh = null; @@ -192,6 +191,7 @@ public class SkeletonComponent : MonoBehaviour { vertexIndex += 4; } + mesh.vertices = vertices; mesh.colors32 = colors; mesh.uv = uvs; @@ -201,16 +201,18 @@ public class SkeletonComponent : MonoBehaviour { for (int i = 0; i < submeshCount; ++i) mesh.SetTriangles(submeshes[i].indexes, i); - if (calculateNormals) { - mesh.RecalculateNormals(); + if (newTriangles && calculateNormals) { + Vector3[] normals = new Vector3[vertexCount]; + Vector3 normal = new Vector3(0, 0, -1); + for (int i = 0; i < vertexCount; i++) + normals[i] = normal; + mesh.normals = normals; + if (calculateTangents) { - Vector4[] tangents = this.tangents; - int count = mesh.normals.Length; - if (tangents.Length != count) { - this.tangents = tangents = new Vector4[count]; - for (int i = 0; i < count; i++) - tangents[i] = new Vector4(1, 0, 0, 1); - } + Vector4[] tangents = new Vector4[vertexCount]; + Vector3 tangent = new Vector3(0, 0, 1); + for (int i = 0; i < vertexCount; i++) + tangents[i] = tangent; mesh.tangents = tangents; } }