private void SubdivideYOnly(ref List <CubemapSkyboxVertex> destArray, ref CubemapSkyboxVertex v1, ref CubemapSkyboxVertex v2, ref CubemapSkyboxVertex v3) { float d12 = Mathf.Abs(v2.y - v1.y); float d23 = Mathf.Abs(v2.y - v3.y); float d31 = Mathf.Abs(v3.y - v1.y); CubemapSkyboxVertex top, va, vb; if (d12 < d23 && d12 < d31) { top = v3; va = v1; vb = v2; } else if (d23 < d12 && d23 < d31) { top = v1; va = v2; vb = v3; } else { top = v2; va = v3; vb = v1; } CubemapSkyboxVertex v12 = SubDivVert(ref top, ref va); CubemapSkyboxVertex v13 = SubDivVert(ref top, ref vb); destArray.Add(top); destArray.Add(v12); destArray.Add(v13); Vector3 a = new Vector3(v13.x - va.x, v13.y - va.y, v13.z - va.z); Vector3 b = new Vector3(v12.x - vb.x, v12.y - vb.y, v12.z - vb.z); if (a.sqrMagnitude > b.sqrMagnitude) { destArray.Add(v12); destArray.Add(va); destArray.Add(vb); destArray.Add(v13); destArray.Add(v12); destArray.Add(vb); } else { destArray.Add(v13); destArray.Add(v12); destArray.Add(va); destArray.Add(v13); destArray.Add(va); destArray.Add(vb); } }
private CubemapSkyboxVertex SubDivVert(ref CubemapSkyboxVertex v1, ref CubemapSkyboxVertex v2) { CubemapSkyboxVertex res; Vector3 p1 = new Vector3(v1.x, v1.y, v1.z); Vector3 p2 = new Vector3(v2.x, v2.y, v2.z); Vector3 h = Vector3.Normalize(Vector3.Lerp(p1, p2, 0.5f)); res.x = res.tu = h.x; res.y = res.tv = h.y; res.z = res.tw = h.z; res.color = Color.white; return(res); }
private void Subdivide(ref List <CubemapSkyboxVertex> destArray, ref CubemapSkyboxVertex v1, ref CubemapSkyboxVertex v2, ref CubemapSkyboxVertex v3) { CubemapSkyboxVertex v12 = SubDivVert(ref v1, ref v2); CubemapSkyboxVertex v23 = SubDivVert(ref v2, ref v3); CubemapSkyboxVertex v13 = SubDivVert(ref v1, ref v3); destArray.Add(v1); destArray.Add(v12); destArray.Add(v13); destArray.Add(v12); destArray.Add(v2); destArray.Add(v23); destArray.Add(v23); destArray.Add(v13); destArray.Add(v12); destArray.Add(v3); destArray.Add(v13); destArray.Add(v23); }