mirror of
https://github.com/EsotericSoftware/spine-runtimes.git
synced 2026-03-26 22:49:01 +08:00
Much better normals calculation.
This commit is contained in:
parent
fe40a2f2e6
commit
3b8aef4890
@ -55,7 +55,6 @@ public class SkeletonComponent : MonoBehaviour {
|
|||||||
private Material[] sharedMaterials = new Material[0];
|
private Material[] sharedMaterials = new Material[0];
|
||||||
private List<Material> submeshMaterials = new List<Material>();
|
private List<Material> submeshMaterials = new List<Material>();
|
||||||
private List<Submesh> submeshes = new List<Submesh>();
|
private List<Submesh> submeshes = new List<Submesh>();
|
||||||
private Vector4[] tangents = new Vector4[0];
|
|
||||||
|
|
||||||
public virtual void Clear () {
|
public virtual void Clear () {
|
||||||
GetComponent<MeshFilter>().mesh = null;
|
GetComponent<MeshFilter>().mesh = null;
|
||||||
@ -192,6 +191,7 @@ public class SkeletonComponent : MonoBehaviour {
|
|||||||
|
|
||||||
vertexIndex += 4;
|
vertexIndex += 4;
|
||||||
}
|
}
|
||||||
|
|
||||||
mesh.vertices = vertices;
|
mesh.vertices = vertices;
|
||||||
mesh.colors32 = colors;
|
mesh.colors32 = colors;
|
||||||
mesh.uv = uvs;
|
mesh.uv = uvs;
|
||||||
@ -201,16 +201,18 @@ public class SkeletonComponent : MonoBehaviour {
|
|||||||
for (int i = 0; i < submeshCount; ++i)
|
for (int i = 0; i < submeshCount; ++i)
|
||||||
mesh.SetTriangles(submeshes[i].indexes, i);
|
mesh.SetTriangles(submeshes[i].indexes, i);
|
||||||
|
|
||||||
if (calculateNormals) {
|
if (newTriangles && calculateNormals) {
|
||||||
mesh.RecalculateNormals();
|
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) {
|
if (calculateTangents) {
|
||||||
Vector4[] tangents = this.tangents;
|
Vector4[] tangents = new Vector4[vertexCount];
|
||||||
int count = mesh.normals.Length;
|
Vector3 tangent = new Vector3(0, 0, 1);
|
||||||
if (tangents.Length != count) {
|
for (int i = 0; i < vertexCount; i++)
|
||||||
this.tangents = tangents = new Vector4[count];
|
tangents[i] = tangent;
|
||||||
for (int i = 0; i < count; i++)
|
|
||||||
tangents[i] = new Vector4(1, 0, 0, 1);
|
|
||||||
}
|
|
||||||
mesh.tangents = tangents;
|
mesh.tangents = tangents;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -55,7 +55,6 @@ public class SkeletonComponent : MonoBehaviour {
|
|||||||
private Material[] sharedMaterials = new Material[0];
|
private Material[] sharedMaterials = new Material[0];
|
||||||
private List<Material> submeshMaterials = new List<Material>();
|
private List<Material> submeshMaterials = new List<Material>();
|
||||||
private List<Submesh> submeshes = new List<Submesh>();
|
private List<Submesh> submeshes = new List<Submesh>();
|
||||||
private Vector4[] tangents = new Vector4[0];
|
|
||||||
|
|
||||||
public virtual void Clear () {
|
public virtual void Clear () {
|
||||||
GetComponent<MeshFilter>().mesh = null;
|
GetComponent<MeshFilter>().mesh = null;
|
||||||
@ -192,6 +191,7 @@ public class SkeletonComponent : MonoBehaviour {
|
|||||||
|
|
||||||
vertexIndex += 4;
|
vertexIndex += 4;
|
||||||
}
|
}
|
||||||
|
|
||||||
mesh.vertices = vertices;
|
mesh.vertices = vertices;
|
||||||
mesh.colors32 = colors;
|
mesh.colors32 = colors;
|
||||||
mesh.uv = uvs;
|
mesh.uv = uvs;
|
||||||
@ -201,16 +201,18 @@ public class SkeletonComponent : MonoBehaviour {
|
|||||||
for (int i = 0; i < submeshCount; ++i)
|
for (int i = 0; i < submeshCount; ++i)
|
||||||
mesh.SetTriangles(submeshes[i].indexes, i);
|
mesh.SetTriangles(submeshes[i].indexes, i);
|
||||||
|
|
||||||
if (calculateNormals) {
|
if (newTriangles && calculateNormals) {
|
||||||
mesh.RecalculateNormals();
|
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) {
|
if (calculateTangents) {
|
||||||
Vector4[] tangents = this.tangents;
|
Vector4[] tangents = new Vector4[vertexCount];
|
||||||
int count = mesh.normals.Length;
|
Vector3 tangent = new Vector3(0, 0, 1);
|
||||||
if (tangents.Length != count) {
|
for (int i = 0; i < vertexCount; i++)
|
||||||
this.tangents = tangents = new Vector4[count];
|
tangents[i] = tangent;
|
||||||
for (int i = 0; i < count; i++)
|
|
||||||
tangents[i] = new Vector4(1, 0, 0, 1);
|
|
||||||
}
|
|
||||||
mesh.tangents = tangents;
|
mesh.tangents = tangents;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user