Пример #1
0
        public void CurveMesh()
        {
            if (tessellatedMesh == null)
            {
                throw new Exception("tessellatedMesh not initialized yet, TessellateMesh first");
            }

            if (curvedMesh == null)
            {
                curvedMesh = MeshInfo.pool.Get();
            }

            curvedMesh.Initialize(tessellatedMesh);

            //if (Curved3DShaderManager.IsWorkable())
            //{
            //    Curved3DShaderManager.Instance.Dispatch(style, tessellatedMesh.positions, tessellatedMesh.normals, tessellatedMesh.tangents, curvedMesh.positions, curvedMesh.normals, curvedMesh.tangents, radiusInverse, centerPos, centerRot);
            //}
            //else
            {
                Vector3    pos;
                Quaternion rot;
                for (int i = 0, imax = tessellatedMesh.positions.Count; i < imax; ++i)
                {
                    Curved3D.Transform(style, tessellatedMesh.positions[i], Quaternion.identity, radiusInverse, centerPos, centerRot, out pos, out rot);

                    curvedMesh.positions.Add(pos);
                    curvedMesh.normals.Add(rot * tessellatedMesh.normals[i]);
                    curvedMesh.tangents.Add((Vector4)(rot * tessellatedMesh.tangents[i]) + new Vector4(0f, 0f, 0f, tessellatedMesh.tangents[i].w));
                }
            }
        }
Пример #2
0
        // invoke by Curved3DCanvas
        public override void OnLayoutComplete()
        {
            if (curvedCanvas == null && m_helper != null)
            {
                return;
            }

            switch (curvedCanvas.style)
            {
            case CurveStyle.Flat:
            case CurveStyle.Cylinder:
            case CurveStyle.UVSphere:
            {
                m_helper.style          = curvedCanvas.style;
                m_helper.centerPos      = transform.InverseTransformPoint(curvedCanvas.worldCenterPos);
                m_helper.centerRot      = curvedCanvas.worldCenterRot * Quaternion.Inverse(transform.rotation);
                m_helper.radius         = curvedCanvas.radius;
                m_helper.fagmentSizeSqr = curvedCanvas.fragmentSizeSqr;

                break;
            }

            default:
            {
                m_helper.style = CurveStyle.DontCurve;

                break;
            }
            }

            if (m_helper.styleChanged || m_helper.radiusChanged || m_helper.centerPosChanged || m_helper.centerRotChanged)
            {
                if (transform.childCount > 0)
                {
                    Vector3    pos;
                    Quaternion rot;
                    Curved3D.Transform(m_helper.style, Vector3.zero, Quaternion.identity, m_helper.radiusInverse, m_helper.centerPos, m_helper.centerRot, out pos, out rot);

                    for (int i = transform.childCount - 1; i >= 0; --i)
                    {
                        var child = transform.GetChild(i);

                        child.localPosition = pos;
                        child.localRotation = rot;
                    }
                }

                m_helper.Reset();
            }
        }
Пример #3
0
        public void TessellateMesh()
        {
            if (populatedMesh == null)
            {
                throw new Exception("populatedMesh not initialized yet, SetPopulateMesh first");
            }

            if (tessellatedMesh == null)
            {
                tessellatedMesh = MeshInfo.pool.Get();
            }

            tessellatedMesh.Initialize();
            tessellatedMesh.CopyFrom(populatedMesh);
            Curved3D.Tessellate(tessellatedMesh, fagmentSizeSqr);
        }