// Use this for initialization public static coorMark create(Vector3 pos, Vector3 right, Vector3 forward, Vector3 up, int id) { GameObject obj = new GameObject(); obj.name = "coorMark"; Mesh mesh = new Mesh(); List <Vector3> vertice = new List <Vector3> (); List <Color32> colors = new List <Color32> (); List <int> inds = new List <int> (); float scaleMark = 1f; vertice.Add(new Vector3(0, 0, 0)); colors.Add(new Color32(255, 0, 0, 255)); vertice.Add(new Vector3(scaleMark, 0, 0)); //right colors.Add(new Color32(255, 0, 0, 255)); vertice.Add(new Vector3(0, 0, 0)); colors.Add(new Color32(0, 255, 0, 255)); vertice.Add(new Vector3(0, scaleMark, 0)); //up colors.Add(new Color32(0, 255, 0, 255)); vertice.Add(new Vector3(0, 0, 0)); colors.Add(new Color32(0, 0, 255, 255)); vertice.Add(new Vector3(0, 0, scaleMark)); //forward colors.Add(new Color32(0, 0, 255, 255)); inds.Add(0); inds.Add(1); inds.Add(2); inds.Add(3); inds.Add(4); inds.Add(5); mesh.SetVertices(vertice); mesh.SetColors(colors); mesh.SetIndices(inds.ToArray(), MeshTopology.Lines, 0); Shader mShader = Resources.Load("pointShader") as Shader; obj.AddComponent <MeshFilter> ().mesh = mesh; obj.AddComponent <MeshRenderer> ().material.shader = mShader; coorMark mark = obj.AddComponent <coorMark> (); BoxCollider collider = obj.AddComponent <BoxCollider> (); //Debug.LogError (forward); //obj.transform.right = right; //obj.transform.forward = forward; //obj.transform.up = up; Matrix4x4 temp = new Matrix4x4(); temp.SetColumn(0, new Vector4(right.x, right.y, right.z, 0)); temp.SetColumn(1, new Vector4(up.x, up.y, up.z, 0)); temp.SetColumn(2, new Vector4(forward.x, forward.y, forward.z, 0)); temp.SetColumn(3, new Vector4(0, 0, 0, 1)); Quaternion quat = util.QuaternionFromMatrix(temp); obj.transform.eulerAngles = quat.eulerAngles; obj.transform.position = pos; collider.center = new Vector3(0, 0, 0); collider.size = new Vector3(0.2f, 0.2f, 0.2f); mark.keyFrameId = id; return(mark); }
public void addSegments(List <RoadSeg> info) { List <Vector3> roadP1List = new List <Vector3> (); List <Vector3> roadP2List = new List <Vector3> (); for (int i = 0; i < info.Count - 1; i++) { Vector3 trajVec = info[i + 1].pos - info [i].pos; Vector3 roadWidthVec = Vector3.Cross(trajVec, info [i].normal); roadWidthVec.Normalize(); Vector3 roadC = info[i].pos; Vector3 roadEdgeP1 = roadC + roadWidthVec * info[i].hWidthL; Vector3 roadEdgeP2 = roadC + -roadWidthVec * info[i].hWidthR; roadP1List.Add(roadEdgeP1); roadP2List.Add(roadEdgeP2); coorMark mark = coorMark.create(info [i].pos, roadWidthVec, info [i].normal, trajVec, i); mark.transform.SetParent(transform); } // vertices.Clear (); // uv.Clear(); // triang.Clear(); int startIndex = vertices.Count; vertices.Add(roadP1List [0]); uv.Add(new Vector2(1f, 0f)); vertices.Add(roadP2List [0]); uv.Add(new Vector2(0f, 1f)); for (int i = 0; i < info.Count - 2; i++) { vertices.Add(roadP1List [i + 1]); uv.Add(new Vector2(1f, 0f)); vertices.Add(roadP2List [i + 1]); uv.Add(new Vector2(0f, 1f)); triang.Add(startIndex + i * 2 + 2); triang.Add(startIndex + i * 2 + 1); triang.Add(startIndex + i * 2 + 0); //double sides displaying triang.Add(startIndex + i * 2 + 0); triang.Add(startIndex + i * 2 + 1); triang.Add(startIndex + i * 2 + 2); triang.Add(startIndex + i * 2 + 1); triang.Add(startIndex + i * 2 + 2); triang.Add(startIndex + i * 2 + 3); //double sides displaying triang.Add(startIndex + i * 2 + 3); triang.Add(startIndex + i * 2 + 2); triang.Add(startIndex + i * 2 + 1); } Vector3[] vertBuf = vertices.ToArray(); int[] triangBuf = triang.ToArray(); Vector2[] uvBuf = uv.ToArray(); Mesh mesh = GetComponent <MeshFilter> ().mesh; //Mesh mesh = new Mesh(); mesh.vertices = vertBuf; mesh.triangles = triangBuf; mesh.uv = uvBuf; //GetComponent<MeshFilter> ().sharedMesh = mesh; //Debug.Log (vertBuf.Length); lookAtPoint = vertices [vertices.Count - 1]; }