Esempio n. 1
0
        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);
                }
            }
        }
Esempio n. 2
0
 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;
 }
Esempio n. 3
0
        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;
        }
Esempio n. 4
0
        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);
                }
            }
        }