Ejemplo n.º 1
0
        public void RecalculateTangents(TangentsPrecision precision)
        {
            if (precision == TangentsPrecision.Precise)
            {
                m_meshTarget.RecalculateTangents();
                m_tangentsPredeformed.LockList(l => {
                    m_meshTarget.GetTangents(l);
                });

                if (m_skinned)
                {
                    npApplySkinning(ref m_npSkinData,
                                    null, null, m_tangentsPredeformed,
                                    null, null, m_tangents);
                }
            }
            else
            {
                if (m_skinned)
                {
                    npModelData tmp = m_npModelData;
                    tmp.vertices = m_pointsPredeformed;
                    tmp.normals  = m_normalsPredeformed;
                    npGenerateTangents(ref tmp, m_tangentsPredeformed);
                    npApplySkinning(ref m_npSkinData,
                                    null, null, m_tangentsPredeformed,
                                    null, null, m_tangents);
                }
                else
                {
                    npGenerateTangents(ref m_npModelData, m_tangents);
                }
                m_meshTarget.SetTangents(m_tangentsPredeformed);
            }

            if (m_cbTangents != null)
            {
                m_cbTangents.SetData(m_tangents);
            }
        }
        void RecalculateTangentsInternal(TangentsPrecision precision, bool updateMesh = true)
        {
            if (m_forceDisableRecalculation)
            {
                return;
            }

            if (precision == TangentsPrecision.Precise)
            {
                m_meshTarget.RecalculateTangents();
                m_tangentsPredeformed.LockList(l =>
                {
                    m_meshTarget.GetTangents(l);
                });
            }
            else
            {
                npMeshData tmp = m_npModelData;
                tmp.vertices = m_pointsPredeformed;
                tmp.normals  = m_normalsPredeformed;
                npGenerateTangents(ref tmp, m_tangentsPredeformed);
            }

            if (m_skinned)
            {
                npApplySkinning(ref m_npSkinData,
                                IntPtr.Zero, IntPtr.Zero, m_tangentsPredeformed,
                                IntPtr.Zero, IntPtr.Zero, m_tangents);
            }

            if (updateMesh)
            {
                m_meshTarget.SetTangents(m_tangentsPredeformed.List);
            }
            m_cbTangentsDirty = true;
        }