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; }