void CTexelNormalMethod::GenerateTexel(size_t iTexel, CConversionMeshInstance* pMeshInstance, CConversionFace* pFace, CConversionVertex* pV1, CConversionVertex* pV2, CConversionVertex* pV3, raytrace::CTraceResult* tr, const Vector& vecUVPosition, raytrace::CRaytracer* pTracer) { CConversionFace* pHitFace = tr->m_pMeshInstance->GetMesh()->GetFace(tr->m_iFace); Vector vecHitNormal = pHitFace->GetNormal(tr->m_vecHit, tr->m_pMeshInstance); // Build rotation matrix Matrix4x4 mObjectToTangent; Vector t = pFace->GetBaseVector(vecUVPosition, 0, pMeshInstance); Vector b = pFace->GetBaseVector(vecUVPosition, 1, pMeshInstance); Vector n = pFace->GetBaseVector(vecUVPosition, 2, pMeshInstance); mObjectToTangent.SetForwardVector(t); mObjectToTangent.SetUpVector(b); mObjectToTangent.SetRightVector(n); mObjectToTangent.InvertRT(); Vector vecTangentNormal = mObjectToTangent*vecHitNormal; m_pGenerator->GetParallelizer()->LockData(); m_avecNormalValues[iTexel] += vecTangentNormal; m_pGenerator->MarkTexelUsed(iTexel); m_pGenerator->GetParallelizer()->UnlockData(); }