private void CalculateProjectedUV(Matrix4x4 a_DecalsToProjectorMatrix, UVRectangle a_UVRectangle, List <Vector2> a_UVs, int a_LowerIndex, int a_UpperIndex) { Vector2 lowerLeftUV = a_UVRectangle.lowerLeftUV; Vector2 size = a_UVRectangle.Size; while (a_UVs.Count < a_LowerIndex) { a_UVs.Add(Vector2.zero); } for (int i = a_LowerIndex; i <= a_UpperIndex; i++) { Vector3 v = base.Vertices[i]; v = a_DecalsToProjectorMatrix.MultiplyPoint3x4(v); Vector2 item = new Vector2(v.x, v.z); item.x = lowerLeftUV.x + ((item.x + 0.5f) * size.x); item.y = lowerLeftUV.y + ((item.y + 0.5f) * size.y); if (i < a_UVs.Count) { a_UVs[i] = item; } else { a_UVs.Add(item); } } }
public UVRectangle(UVRectangle a_Other) { this.name = "UVRectangle"; this.lowerLeftUV = Vector2.zero; this.upperRightUV = Vector3.one; this.name = string.Copy(a_Other.name); this.lowerLeftUV = a_Other.lowerLeftUV; this.upperRightUV = a_Other.upperRightUV; }
private void CalculateProjectedUV2(GenericDecalProjectorBase a_Projector) { Matrix4x4 matrixx = a_Projector.WorldToProjectorMatrix * this.m_Decals.CachedTransform.localToWorldMatrix; UVRectangle rectangle = this.m_Decals.CurrentUv2Rectangles[a_Projector.UV2RectangleIndex]; List <Vector2> list = base.m_UV2s; int decalsMeshLowerVertexIndex = a_Projector.DecalsMeshLowerVertexIndex; int decalsMeshUpperVertexIndex = a_Projector.DecalsMeshUpperVertexIndex; if (this.m_Decals.CurrentUVMode == UVMode.Project) { this.CalculateProjectedUV(matrixx, rectangle, list, decalsMeshLowerVertexIndex, decalsMeshUpperVertexIndex); } else { this.CalculateWrappedProjectionUV(matrixx, rectangle, list, decalsMeshLowerVertexIndex, decalsMeshUpperVertexIndex); } a_Projector.IsUV2ProjectionCalculated = true; }
private void CalculateWrappedProjectionUV(Matrix4x4 a_DecalsToProjectorMatrix, UVRectangle a_UVRectangle, List <Vector2> a_UVs, int a_LowerIndex, int a_UpperIndex) { Vector2 lowerLeftUV = a_UVRectangle.lowerLeftUV; Vector2 size = a_UVRectangle.Size; while (a_UVs.Count < a_LowerIndex) { a_UVs.Add(Vector2.zero); } for (int i = a_LowerIndex; i <= a_UpperIndex; i++) { Vector3 vector3 = a_DecalsToProjectorMatrix.MultiplyPoint3x4(base.Vertices[i]); Vector3 vector4 = a_DecalsToProjectorMatrix.MultiplyVector(base.Normals[i]); Vector2 item = new Vector2(vector3.x, vector3.z); item -= vector3.y * new Vector2(vector4.x, vector4.z); item.x = Mathf.Clamp(item.x, -0.5f, 0.5f); item.y = Mathf.Clamp(item.y, -0.5f, 0.5f); item.x = lowerLeftUV.x + ((item.x + 0.5f) * size.x); item.y = lowerLeftUV.y + ((item.y + 0.5f) * size.y); if (i < a_UVs.Count) { a_UVs[i] = item; } else { a_UVs.Add(item); } } }