How do i use lines to calculate triangles on mesh??
Hello i would like to know how to code these two things to my catmull code(which is below).
(1). How would i be able to draw lines like this in Pic1(SEG1), and then using those calculations than create a mesh like in Pic1(SEG2), would anyone know how to do do this?
-Pic1
(2). How do i create calculate a point in the center and draw lines to it(and around the circle) like in Pic2(SEG1), then also using those calculations than to create a mesh like in Pic2(SEG2), would anyone know how to do do this?
-Pic2
Here is my catmull code.
using UnityEngine; using System.Collections; using System.Collections.Generic;
[RequireComponent(typeof(MeshFilter), typeof(MeshRenderer))] public class CatmullSpline : MonoBehaviour {
public List<Transform> controlPointsList = new List<Transform>(); public bool isLooping = true; public int SEGMENT_COUNT; void OnDrawGizmos() { for (int i = 0; i < controlPointsList.Count; i++) { if ((i == 0 || i == controlPointsList.Count - 2 || i == controlPointsList.Count - 1) && !isLooping) { continue; } DisplayCatmullRomSpline(i); } Gizmos.color = Color.white; for (int i = 0; i < controlPointsList.Count; i++) { Gizmos.DrawWireSphere(controlPointsList[i].position, 0.3f); } } Vector3 ReturnCatmullRom(float t, Vector3 p0, Vector3 p1, Vector3 p2, Vector3 p3) { Vector3 a = 0.5f * (2f * p1); Vector3 b = 0.5f * (p2 - p0); Vector3 c = 0.5f * (2f * p0 - 5f * p1 + 4f * p2 - p3); Vector3 d = 0.5f * (-p0 + 3f * p1 - 3f * p2 + p3); Vector3 pos = a + (b * t) + (c * t * t) + (d * t * t * t); return pos; } void DisplayCatmullRomSpline(int pos) { Vector3 p0 = controlPointsList[ClampListPos(pos - 1)].position; Vector3 p1 = controlPointsList[pos].position; Vector3 p2 = controlPointsList[ClampListPos(pos + 1)].position; Vector3 p3 = controlPointsList[ClampListPos(pos + 2)].position; Vector3 lastPos = Vector3.zero; for (float i = 0; i < SEGMENT_COUNT; i++) { float t = (float)i / SEGMENT_COUNT; Vector3 newPos = ReturnCatmullRom(t, p0, p1, p2, p3); if (t == 0) { lastPos = newPos; continue; } Gizmos.color = Color.white; Gizmos.DrawLine(lastPos, newPos); Gizmos.color = Color.yellow; var tan = ReturnCatmullRomTangent(t, p0, p1, p2, p3); Gizmos.DrawLine(newPos, newPos + tan * 3); Gizmos.DrawSphere(newPos, 0.3f); lastPos = newPos; } Gizmos.DrawLine(lastPos, p2); } int ClampListPos(int pos) { if (pos < 0) { pos = controlPointsList.Count - 1; } if (pos > controlPointsList.Count) { pos = 1; } else if (pos > controlPointsList.Count - 1) { pos = 0; } return pos; } public Vector3 ReturnCatmullRomTangent(float t, Vector3 p0, Vector3 p1, Vector3 p2, Vector3 p3) { Vector3 b = 0.5f * (p2 - p0); Vector3 c = (2f * p0 - 5f * p1 + 4f * p2 - p3); Vector3 d = 1.5f * (-p0 + 3f * p1 - 3f * p2 + p3); Vector3 tangent = b + c * t + d * t * t; return tangent.normalized; } }
the center point would be just taking the position of all the points and getting the average. as for the zig-zag approach youll have to figure out an algorithm that works with your code to reference the nodes you want. You wouldnt create the "lines" or edges of the triangles, youll have to look in to mesh creation tutorials. The best I know of (easy to understand and thoroughly explained) is here: http://catlikecoding.com/unity/tutorials/procedural-grid/
Well @b1gr4yn i implemented the things in but i am getting an error NullReferenceException: Object reference not set to an instance of an object
Here is what i have done.
Your answer
Follow this Question
Related Questions
Hiding part of mesh 0 Answers
Can someone please help me with mesh extrusion 0 Answers
How do i calculate mesh on a spline?? 0 Answers
How do i add lines to end Cubes?? 1 Answer
How to add manual generated color ? 0 Answers