public void ReadVerts(byte[] memory) { UnknownList l = new UnknownList(); l.size = BitConverter.ToInt32(memory, readerpos); l.count = BitConverter.ToInt32(memory, readerpos + 4); readerpos += 8; int len = l.size * l.count; l.data = new byte[len]; for (int i = 0; i < len; i++) { l.data[i] = memory[readerpos + i]; } Vertices = new List <Vector3>(); for (int i = 0; i < l.count; i++) { float f1 = BitConverter.ToSingle(memory, readerpos); float f2 = BitConverter.ToSingle(memory, readerpos + 4); float f3 = BitConverter.ToSingle(memory, readerpos + 8); Vertices.Add(new Vector3(f1, f2, f3)); readerpos += l.size; } Verts v = new Verts(); v.Points = Vertices; Mesh.Vertices = v; }
internal sealed override void AddTo(UnityEngine.UI.VertexHelper helper) { if (Verts != null && Indices != null) { helper.AddUIVertexStream(Verts.Select(Map).ToList(), Indices.ToList()); } }
// ========================================= // ============= Build by Shape ============ public void BuildFromExtents(MeshExtents box) { Verts.Add(new Vector3(box.Min.X, box.Min.Y, box.Max.Z)); Verts.Add(new Vector3(box.Max.X, box.Min.Y, box.Max.Z)); Verts.Add(new Vector3(box.Max.X, box.Max.Y, box.Max.Z)); Verts.Add(new Vector3(box.Min.X, box.Max.Y, box.Max.Z)); Verts.Add(new Vector3(box.Min.X, box.Min.Y, box.Min.Z)); Verts.Add(new Vector3(box.Max.X, box.Min.Y, box.Min.Z)); Verts.Add(new Vector3(box.Max.X, box.Max.Y, box.Min.Z)); Verts.Add(new Vector3(box.Min.X, box.Max.Y, box.Min.Z)); UVs.Add(new Vector2(0.0001f, 0.9999f)); UVs.Add(new Vector2(0.9999f, 0.9999f)); UVs.Add(new Vector2(0.9999f, 0.9999f)); UVs.Add(new Vector2(0.0001f, 0.9999f)); UVs.Add(new Vector2(0.0001f, 0.0001f)); UVs.Add(new Vector2(0.9999f, 0.0001f)); UVs.Add(new Vector2(0.9999f, 0.0001f)); UVs.Add(new Vector2(0.0001f, 0.0001f)); AddFace(3, 4, 0); AddFace(0, 2, 3); AddFace(0, 1, 2); AddFace(1, 5, 6); AddFace(1, 6, 2); AddFace(3, 7, 4); AddFace(2, 7, 3); AddFace(2, 6, 7); AddFace(0, 5, 1); AddFace(4, 7, 6); AddFace(0, 4, 5); AddFace(4, 6, 5); }
private void Clean() { for (int i = Verts.Count - 1; i >= 0; i--) { for (int j = 0; j < i; j++) { var a = Verts[i]; var b = Verts[j]; if (a == b) { Verts.RemoveAt(i); foreach (var f in Faces) { if (f.Vert1 == i) { f.Vert1 = j; } if (f.Vert2 == i) { f.Vert2 = j; } if (f.Vert3 == i) { f.Vert3 = j; } } break; } } } }
/// <summary> /// Converrts RawMeshData into a Mesh object /// </summary> /// <returns></returns> public Mesh ToMesh() { Mesh res = new Mesh(); res.vertices = Verts.ToArray(); res.triangles = Utils.ToTris(Tris); res.RecalculateNormals(); return(res); }
private void UpdateVertsAndUVs() { Mesh.Clear(); for (int i = 0; i < Config.VertsPerLoop; i++) { Verts.Add(LoopOrientMatrix * LoopVerts[i]); UVs.Add(new Vector2((float)i / (Config.VertsPerLoop - 1), Mathf.Clamp01(currentSegmentLength / Config.SegmentLength))); } Mesh.SetVertices(Verts); Mesh.SetUVs(0, UVs); }
// ========================================= // ============ Build by Values ============ public void AddFace(Vector3 v1, Vector3 v2, Vector3 v3) { if (!Verts.Contains(v1)) { Verts.Add(v1); } if (!Verts.Contains(v2)) { Verts.Add(v2); } if (!Verts.Contains(v3)) { Verts.Add(v3); } AddFace(Verts.IndexOf(v1), Verts.IndexOf(v2), Verts.IndexOf(v3), 0); }
public void Optimise() { List <C2Vertex> points = new List <C2Vertex>(); List <Vector3> verts = new List <Vector3>(); List <Vector2> uvs = new List <Vector2>(); for (int i = 0; i < Verts.Count; i++) { C2Vertex p = new C2Vertex(Verts[i], UVs[i]); //Console.WriteLine("Vert " + i); int newID = points.IndexOf(p); //int newID = verts.IndexOf(Verts[i]); if (newID == -1) { //Console.WriteLine("Adding " + p.ToString()); points.Add(p); verts.Add(Verts[i]); uvs.Add(UVs[i]); newID = verts.Count - 1; } for (int j = 0; j < Faces.Count; j++) { Faces[j].ReplaceVertID(i, newID); } } //Console.WriteLine("Reduced Vert count from " + Verts.Count + " to " + verts.Count); //Console.WriteLine("Reduced UV count from " + UVs.Count + " to " + uvs.Count); Verts.Clear(); for (int i = 0; i < verts.Count; i++) { Verts.Add(verts[i]); } UVs.Clear(); for (int i = 0; i < uvs.Count; i++) { UVs.Add(uvs[i]); } }
private void StartTubeSegment() { currentSegmentLength = 0; Verts.Clear(); Tris.Clear(); UVs.Clear(); CurrentSegment = new GameObject(); CurrentSegment.AddComponent <MeshFilter>(); CurrentSegment.AddComponent <MeshRenderer>(); Mesh = CurrentSegment.GetComponent <MeshFilter>().mesh; Mesh.MarkDynamic(); CurrentSegment.GetComponent <Renderer>().material = Material; Mesh.indexFormat = UnityEngine.Rendering.IndexFormat.UInt32; UpdateVertsAndUVs(); Mesh.RecalculateNormals(); LoopCount = 1; }
public void AddFace(Vector3 v1, Vector3 v2, Vector3 v3, Vector2 uv1, Vector2 uv2, Vector2 uv3, int matID) { int iv1, iv2, iv3, iuv1, iuv2, iuv3; Verts.Add(v1); iv1 = Verts.Count - 1; Verts.Add(v2); iv2 = Verts.Count - 1; Verts.Add(v3); iv3 = Verts.Count - 1; UVs.Add(uv1); iuv1 = UVs.Count - 1; UVs.Add(uv2); iuv2 = UVs.Count - 1; UVs.Add(uv3); iuv3 = UVs.Count - 1; AddFace(iv1, iv2, iv3, iuv1, iuv2, iuv3, matID); }
public ushort CreateFreshSubMesh(ushort vertsToReserve, ushort trisToReserve) { // create custom List<> implementation with NativeArray that supports growth without assignment! SubMesh subMesh = new SubMesh((ushort)Verts.Count, (ushort)Tris.Count, vertsToReserve, trisToReserve); lastVert += vertsToReserve; lastTri += trisToReserve; SubMeshes.Add(subMesh); for (int i = 0; i < vertsToReserve; i++) { Verts.Add(Vector3.zero); // this is multiple assignment! BAD! Normals.Add(Vector3.up); TextureUVs.Add(Vector2.zero); SubmaterialUVs.Add(Vector2.zero); } for (int i = 0; i < trisToReserve; i++) { Tris.Add(0); // more evil multiple assignment! } return((ushort)(SubMeshes.Count + SubMeshBaseIdx - 1)); }
static Immediate() { TinyGizmo.OnRender = (PrimType, Verts) => { Vector3[] Positions = Verts.Select((V) => V.Position.XYZ()).ToArray(); Vector4[] Colors = Verts.Select((V) => V.Color).ToArray(); if (PrimType == Im3dPrimitiveType.Triangles) { Triangles(Positions, Colors); } else if (PrimType == Im3dPrimitiveType.Lines) { Lines(Positions, Colors, Verts.Select((V) => V.Position.W).ToArray()); } else { Points(Positions, Colors, Verts.Select((V) => V.Position.W).ToArray()); } }; TinyGizmo.GizmoInit(); }
public void addVert(Position vert) { Verts.Add(vert); }
public void ReadVerts(byte[] memory) { TreeNode res = new TreeNode("Vertices pos: 0x" + readerpos.ToString("X4")); UnknownList l = new UnknownList(); l.size = BitConverter.ToInt32(memory, readerpos); l.count = BitConverter.ToInt32(memory, readerpos + 4); readerpos += 8; int len = l.size * l.count; l.data = new byte[len]; for (int i = 0; i < len; i++) l.data[i] = memory[readerpos + i]; res.Nodes.Add(new TreeNode("Size : " + l.size.ToString())); res.Nodes.Add(new TreeNode("Count : " + l.count.ToString())); TreeNode t = new TreeNode("Data"); Vertices = new List<Vector3>(); for (int i = 0; i < l.count; i++) { float f1 = BitConverter.ToSingle(memory, readerpos); float f2 = BitConverter.ToSingle(memory, readerpos + 4); float f3 = BitConverter.ToSingle(memory, readerpos + 8); Vertices.Add(new Vector3(f1, f2, f3)); string s = f1 + " " + f2 + " " + f3; readerpos += l.size; t.Nodes.Add(new TreeNode("#" + i.ToString("D4") + " : " + s)); } res.Nodes.Add(t); Verts v = new Verts(); v.Points = Vertices; v.t = res; Mesh.Vertices = v; }
public void AddListVertex(float x, float y, float z) { Verts.Add(new Vector3(x, y, z)); }
// ============= Build by List ============= public void AddListVertex(Vector3 v) { Verts.Add(v); }
public void ReadVerts(byte[] memory) { UnknownList l = new UnknownList(); l.size = BitConverter.ToInt32(memory, readerpos); l.count = BitConverter.ToInt32(memory, readerpos + 4); readerpos += 8; int len = l.size * l.count; l.data = new byte[len]; for (int i = 0; i < len; i++) l.data[i] = memory[readerpos + i]; Vertices = new List<Vector3>(); for (int i = 0; i < l.count; i++) { float f1 = BitConverter.ToSingle(memory, readerpos); float f2 = BitConverter.ToSingle(memory, readerpos + 4); float f3 = BitConverter.ToSingle(memory, readerpos + 8); Vertices.Add(new Vector3(f1, f2, f3)); readerpos += l.size; } Verts v = new Verts(); v.Points = Vertices; Mesh.Vertices = v; }