mirror of
https://github.com/EsotericSoftware/spine-runtimes.git
synced 2026-02-10 17:18:44 +08:00
Removed Mesh Generation Samples.
This commit is contained in:
parent
46ee116ee3
commit
fdf07aed92
@ -1,9 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 1a61c8f6e11823c488856e3c7ce9edc7
|
||||
folderAsset: yes
|
||||
timeCreated: 1455160403
|
||||
licenseType: Free
|
||||
DefaultImporter:
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@ -1,238 +0,0 @@
|
||||
/******************************************************************************
|
||||
* Spine Runtimes Software License
|
||||
* Version 2.3
|
||||
*
|
||||
* Copyright (c) 2013-2015, Esoteric Software
|
||||
* All rights reserved.
|
||||
*
|
||||
* You are granted a perpetual, non-exclusive, non-sublicensable and
|
||||
* non-transferable license to use, install, execute and perform the Spine
|
||||
* Runtimes Software (the "Software") and derivative works solely for personal
|
||||
* or internal use. Without the written permission of Esoteric Software (see
|
||||
* Section 2 of the Spine Software License Agreement), you may not (a) modify,
|
||||
* translate, adapt or otherwise create derivative works, improvements of the
|
||||
* Software or develop new applications using the Software or (b) remove,
|
||||
* delete, alter or obscure any trademarks or any copyright, trademark, patent
|
||||
* or other intellectual property or proprietary rights notices on or in the
|
||||
* Software, including any copy thereof. Redistributions in binary or source
|
||||
* form must include this license and terms.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY ESOTERIC SOFTWARE "AS IS" AND ANY EXPRESS OR
|
||||
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
|
||||
* EVENT SHALL ESOTERIC SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
||||
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
|
||||
* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
|
||||
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
|
||||
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*****************************************************************************/
|
||||
#if (UNITY_5_0 || UNITY_5_1 || UNITY_4_0 || UNITY_4_1 || UNITY_4_2 || UNITY_4_3 || UNITY_4_4 || UNITY_4_5 || UNITY_4_6 || UNITY_4_7)
|
||||
#define PREUNITY_5_2
|
||||
#endif
|
||||
|
||||
using UnityEngine;
|
||||
using System.Collections.Generic;
|
||||
|
||||
#if !(PREUNITY_5_2)
|
||||
namespace Spine.Unity.MeshGeneration {
|
||||
/// <summary>This is for testing and educational purposes only. This takes about 10 times longer to render than the Arrays implementations.</summary>
|
||||
public class VertexHelperSpineMeshGenerator : ISimpleMeshGenerator {
|
||||
|
||||
public float scale = 1f;
|
||||
public float Scale { get { return scale; } set { scale = value; } }
|
||||
|
||||
public bool premultiplyAlpha = true;
|
||||
public bool PremultiplyAlpha { get { return premultiplyAlpha; } set { premultiplyAlpha = value; } }
|
||||
|
||||
public int CurrentVertexCount { get { return this.positions.Count; } }
|
||||
|
||||
private Mesh lastGeneratedMesh;
|
||||
public Mesh LastGeneratedMesh { get { return lastGeneratedMesh; } }
|
||||
|
||||
public Mesh GenerateMesh (Skeleton skeleton) {
|
||||
skeletonColor.r = skeleton.r;
|
||||
skeletonColor.g = skeleton.g;
|
||||
skeletonColor.b = skeleton.b;
|
||||
skeletonColor.a = skeleton.a;
|
||||
|
||||
ClearBuffers();
|
||||
var drawOrderItems = skeleton.drawOrder.Items;
|
||||
for (int i = 0, n = skeleton.drawOrder.Count; i < n; i++) {
|
||||
AddSlot(drawOrderItems[i]);
|
||||
}
|
||||
|
||||
Mesh currentMesh = doubleBufferedMesh.GetNextMesh();
|
||||
FillMesh(currentMesh);
|
||||
lastGeneratedMesh = currentMesh;
|
||||
return currentMesh;
|
||||
}
|
||||
|
||||
#region Internals
|
||||
private DoubleBufferedMesh doubleBufferedMesh = new DoubleBufferedMesh();
|
||||
protected Color skeletonColor = Color.white;
|
||||
protected List<Vector3> positions = new List<Vector3>();
|
||||
//protected List<Color> colors = new List<Color>(); // 5.3 mesh.SetColors(Color) is broken in UI.
|
||||
protected List<Color32> colors32 = new List<Color32>();
|
||||
protected List<Vector2> uvs = new List<Vector2>();
|
||||
protected List<int> indices = new List<int>();
|
||||
protected List<Vector3> normals = new List<Vector3>();
|
||||
|
||||
// Buffers
|
||||
protected float[] tempVertices = new float[8];
|
||||
|
||||
static readonly Vector3 DefaultNormal = Vector3.back;
|
||||
const float Z = 0f;
|
||||
|
||||
protected void FillMesh (Mesh mesh) {
|
||||
mesh.Clear();
|
||||
|
||||
if (positions.Count > 65000)
|
||||
throw new System.ArgumentException("Mesh cannot have more than 65000 vertices."); // Limitation based on UnityEngine.UI.VertexHelper
|
||||
|
||||
mesh.SetVertices(positions);
|
||||
//mesh.SetColors(colors); // 5.3 mesh.SetColors(Color) is broken in UI.
|
||||
mesh.SetColors(colors32);
|
||||
mesh.SetUVs(0, uvs);
|
||||
mesh.SetNormals(normals);
|
||||
mesh.SetTriangles(indices, 0);
|
||||
mesh.RecalculateBounds();
|
||||
}
|
||||
|
||||
protected void ClearBuffers () {
|
||||
positions.Clear();
|
||||
//colors.Clear(); // 5.3 mesh.SetColors(Color) is broken.
|
||||
colors32.Clear();
|
||||
uvs.Clear();
|
||||
indices.Clear();
|
||||
normals.Clear();
|
||||
}
|
||||
|
||||
protected void AddVert (Vector3 position, Color color, Vector2 uv) {
|
||||
positions.Add(position);
|
||||
//colors.Add(color); // 5.3 mesh.SetColors(Color) is broken in UI.
|
||||
Color32 c; c.r = (byte)(color.r * 255); c.g = (byte)(color.g * 255); c.b = (byte)(color.b * 255); c.a = (byte)(color.a * 255);
|
||||
colors32.Add(c);
|
||||
uvs.Add(uv);
|
||||
normals.Add(DefaultNormal);
|
||||
}
|
||||
|
||||
protected void AddTriangle (int id0, int id1, int id2) {
|
||||
indices.Add(id0);
|
||||
indices.Add(id1);
|
||||
indices.Add(id2);
|
||||
}
|
||||
|
||||
protected void AddSlot (Slot slot) {
|
||||
var a = slot.attachment;
|
||||
|
||||
var regionAttachment = a as RegionAttachment;
|
||||
if (regionAttachment != null) {
|
||||
AddAttachment(slot, regionAttachment);
|
||||
return;
|
||||
}
|
||||
|
||||
var meshAttachment = a as MeshAttachment;
|
||||
if (meshAttachment != null) {
|
||||
AddAttachment(slot, meshAttachment);
|
||||
return;
|
||||
}
|
||||
|
||||
var skinnedMeshAttachment = a as WeightedMeshAttachment;
|
||||
if (skinnedMeshAttachment != null) {
|
||||
AddAttachment(slot, skinnedMeshAttachment);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
// RegionAttachment
|
||||
protected void AddAttachment (Slot slot, RegionAttachment attachment) {
|
||||
var tempVertices = this.tempVertices;
|
||||
attachment.ComputeWorldVertices(slot.bone, tempVertices);
|
||||
|
||||
float[] regionUVs = attachment.uvs;
|
||||
|
||||
Color color = skeletonColor;
|
||||
color.r = color.r * attachment.r * slot.r;
|
||||
color.g = color.g * attachment.g * slot.g;
|
||||
color.b = color.b * attachment.b * slot.b;
|
||||
color.a = color.a * attachment.a * slot.a;
|
||||
if (premultiplyAlpha) {
|
||||
color.r *= color.a; color.g *= color.a; color.b *= color.a;
|
||||
if (slot.data.blendMode == BlendMode.additive) color.a = 0;
|
||||
}
|
||||
|
||||
int fv = positions.Count; // first vertex index
|
||||
AddVert(new Vector3(tempVertices[RegionAttachment.X1] * scale, tempVertices[RegionAttachment.Y1] * scale), color, new Vector2(regionUVs[RegionAttachment.X1], regionUVs[RegionAttachment.Y1]));
|
||||
AddVert(new Vector3(tempVertices[RegionAttachment.X4] * scale, tempVertices[RegionAttachment.Y4] * scale), color, new Vector2(regionUVs[RegionAttachment.X4], regionUVs[RegionAttachment.Y4]));
|
||||
AddVert(new Vector3(tempVertices[RegionAttachment.X2] * scale, tempVertices[RegionAttachment.Y2] * scale), color, new Vector2(regionUVs[RegionAttachment.X2], regionUVs[RegionAttachment.Y2]));
|
||||
AddVert(new Vector3(tempVertices[RegionAttachment.X3] * scale, tempVertices[RegionAttachment.Y3] * scale), color, new Vector2(regionUVs[RegionAttachment.X3], regionUVs[RegionAttachment.Y3]));
|
||||
|
||||
AddTriangle(fv, fv+2, fv+1);
|
||||
AddTriangle(fv+2, fv+3, fv+1);
|
||||
}
|
||||
|
||||
// MeshAttachment
|
||||
protected void AddAttachment (Slot slot, MeshAttachment attachment) {
|
||||
var tempVertices = this.tempVertices;
|
||||
var meshUVs = attachment.uvs;
|
||||
int meshVertexCount = attachment.vertices.Length;
|
||||
|
||||
if (tempVertices.Length < meshVertexCount)
|
||||
this.tempVertices = tempVertices = new float[meshVertexCount];
|
||||
attachment.ComputeWorldVertices(slot, tempVertices);
|
||||
|
||||
Color color = skeletonColor;
|
||||
color.r = color.r * attachment.r * slot.r;
|
||||
color.g = color.g * attachment.g * slot.g;
|
||||
color.b = color.b * attachment.b * slot.b;
|
||||
color.a = color.a * attachment.a * slot.a;
|
||||
if (premultiplyAlpha) {
|
||||
color.r *= color.a; color.g *= color.a; color.b *= color.a;
|
||||
if (slot.data.blendMode == BlendMode.additive) color.a = 0;
|
||||
}
|
||||
|
||||
int fv = positions.Count; // first vertex index
|
||||
for (int ii = 0; ii < meshVertexCount; ii += 2)
|
||||
AddVert(new Vector3(tempVertices[ii], tempVertices[ii + 1]) * scale, color, new Vector2(meshUVs[ii], meshUVs[ii + 1]));
|
||||
|
||||
var attachmentTriangles = attachment.triangles;
|
||||
for (int ii = 0, n = attachmentTriangles.Length; ii < n; ii++)
|
||||
indices.Add(attachmentTriangles[ii] + fv);
|
||||
}
|
||||
|
||||
// SkinnedMeshAttachment
|
||||
protected void AddAttachment (Slot slot, WeightedMeshAttachment attachment) {
|
||||
var tempVertices = this.tempVertices;
|
||||
float[] meshUVs = attachment.uvs;
|
||||
|
||||
int meshVertexCount = attachment.uvs.Length;
|
||||
if (tempVertices.Length < meshVertexCount)
|
||||
this.tempVertices = tempVertices = new float[meshVertexCount];
|
||||
attachment.ComputeWorldVertices(slot, tempVertices);
|
||||
|
||||
Color color = skeletonColor;
|
||||
color.r = color.r * attachment.r * slot.r;
|
||||
color.g = color.g * attachment.g * slot.g;
|
||||
color.b = color.b * attachment.b * slot.b;
|
||||
color.a = color.a * attachment.a * slot.a;
|
||||
if (premultiplyAlpha) {
|
||||
color.r *= color.a; color.g *= color.a; color.b *= color.a;
|
||||
if (slot.data.blendMode == BlendMode.additive) color.a = 0;
|
||||
}
|
||||
|
||||
int fv = positions.Count; // first vertex index
|
||||
for (int ii = 0; ii < meshVertexCount; ii += 2)
|
||||
AddVert(new Vector3(tempVertices[ii], tempVertices[ii + 1]) * scale, color, new Vector2(meshUVs[ii], meshUVs[ii + 1]));
|
||||
|
||||
var attachmentTriangles = attachment.triangles;
|
||||
for (int ii = 0, n = attachmentTriangles.Length; ii < n; ii++)
|
||||
indices.Add(attachmentTriangles[ii] + fv);
|
||||
}
|
||||
#endregion
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
#endif
|
||||
@ -1,12 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 90314614996d9074ab6de408d0baa004
|
||||
timeCreated: 1455147712
|
||||
licenseType: Free
|
||||
MonoImporter:
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
Loading…
x
Reference in New Issue
Block a user