public static Vector3 ProjectOnQuadTangentialToPlanet(Vector3 center, Vector2 point) { Vector3 a = default(Vector3); Vector3 a2 = default(Vector3); WorldRendererUtility.GetTangentsToPlanet(center, out a, out a2, false); return(point.x * a + point.y * a2); }
public static void PrintQuadTangentialToPlanet(Vector3 pos, Vector3 posForTangents, float size, float altOffset, LayerSubMesh subMesh, bool counterClockwise = false, bool randomizeRotation = false, bool printUVs = true) { Vector3 a = default(Vector3); Vector3 a2 = default(Vector3); WorldRendererUtility.GetTangentsToPlanet(posForTangents, out a, out a2, randomizeRotation); Vector3 normalized = posForTangents.normalized; float d = (float)(size * 0.5); Vector3 item = pos - a * d - a2 * d + normalized * altOffset; Vector3 item2 = pos - a * d + a2 * d + normalized * altOffset; Vector3 item3 = pos + a * d + a2 * d + normalized * altOffset; Vector3 item4 = pos + a * d - a2 * d + normalized * altOffset; int count = subMesh.verts.Count; subMesh.verts.Add(item); subMesh.verts.Add(item2); subMesh.verts.Add(item3); subMesh.verts.Add(item4); if (printUVs) { subMesh.uvs.Add(new Vector2(0f, 0f)); subMesh.uvs.Add(new Vector2(0f, 1f)); subMesh.uvs.Add(new Vector2(1f, 1f)); subMesh.uvs.Add(new Vector2(1f, 0f)); } if (counterClockwise) { subMesh.tris.Add(count + 2); subMesh.tris.Add(count + 1); subMesh.tris.Add(count); subMesh.tris.Add(count + 3); subMesh.tris.Add(count + 2); subMesh.tris.Add(count); } else { subMesh.tris.Add(count); subMesh.tris.Add(count + 1); subMesh.tris.Add(count + 2); subMesh.tris.Add(count); subMesh.tris.Add(count + 2); subMesh.tris.Add(count + 3); } }