|
@@ -69,6 +69,7 @@ GenVertexNormalsProcess::~GenVertexNormalsProcess() = default;
|
|
bool GenVertexNormalsProcess::IsActive(unsigned int pFlags) const {
|
|
bool GenVertexNormalsProcess::IsActive(unsigned int pFlags) const {
|
|
force_ = (pFlags & aiProcess_ForceGenNormals) != 0;
|
|
force_ = (pFlags & aiProcess_ForceGenNormals) != 0;
|
|
flippedWindingOrder_ = (pFlags & aiProcess_FlipWindingOrder) != 0;
|
|
flippedWindingOrder_ = (pFlags & aiProcess_FlipWindingOrder) != 0;
|
|
|
|
+ leftHanded_ = (pFlags & aiProcess_MakeLeftHanded) != 0;
|
|
return (pFlags & aiProcess_GenSmoothNormals) != 0;
|
|
return (pFlags & aiProcess_GenSmoothNormals) != 0;
|
|
}
|
|
}
|
|
|
|
|
|
@@ -141,8 +142,8 @@ bool GenVertexNormalsProcess::GenMeshVertexNormals(aiMesh *pMesh, unsigned int m
|
|
const aiVector3D *pV1 = &pMesh->mVertices[face.mIndices[0]];
|
|
const aiVector3D *pV1 = &pMesh->mVertices[face.mIndices[0]];
|
|
const aiVector3D *pV2 = &pMesh->mVertices[face.mIndices[1]];
|
|
const aiVector3D *pV2 = &pMesh->mVertices[face.mIndices[1]];
|
|
const aiVector3D *pV3 = &pMesh->mVertices[face.mIndices[face.mNumIndices - 1]];
|
|
const aiVector3D *pV3 = &pMesh->mVertices[face.mIndices[face.mNumIndices - 1]];
|
|
- if (flippedWindingOrder_)
|
|
|
|
- std::swap( pV2, pV3 );
|
|
|
|
|
|
+ if (flippedWindingOrder_ != leftHanded_) // Boolean XOR
|
|
|
|
+ std::swap(pV2, pV3);
|
|
const aiVector3D vNor = ((*pV2 - *pV1) ^ (*pV3 - *pV1)).NormalizeSafe();
|
|
const aiVector3D vNor = ((*pV2 - *pV1) ^ (*pV3 - *pV1)).NormalizeSafe();
|
|
|
|
|
|
for (unsigned int i = 0; i < face.mNumIndices; ++i) {
|
|
for (unsigned int i = 0; i < face.mNumIndices; ++i) {
|