Merge pull request #4940 from ockeymm123/master
fix regression in join vertices post process.pull/4963/head^2
commit
a14696b9ec
|
@ -55,13 +55,6 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||
#include <unordered_map>
|
||||
|
||||
using namespace Assimp;
|
||||
// ------------------------------------------------------------------------------------------------
|
||||
// Constructor to be privately used by Importer
|
||||
JoinVerticesProcess::JoinVerticesProcess() = default;
|
||||
|
||||
// ------------------------------------------------------------------------------------------------
|
||||
// Destructor, private as well
|
||||
JoinVerticesProcess::~JoinVerticesProcess() = default;
|
||||
|
||||
// ------------------------------------------------------------------------------------------------
|
||||
// Returns whether the processing step is present in the given flag field.
|
||||
|
@ -251,6 +244,9 @@ private:
|
|||
unsigned mNumUVChannels;
|
||||
unsigned mNumColorChannels;
|
||||
};
|
||||
|
||||
static constexpr size_t JOINED_VERTICES_MARK = 0x80000000u;
|
||||
|
||||
// now start the JoinVerticesProcess
|
||||
int JoinVerticesProcess::ProcessMesh( aiMesh* pMesh, unsigned int meshIndex) {
|
||||
static_assert( AI_MAX_NUMBER_OF_COLOR_SETS == 8, "AI_MAX_NUMBER_OF_COLOR_SETS == 8");
|
||||
|
@ -357,7 +353,8 @@ int JoinVerticesProcess::ProcessMesh( aiMesh* pMesh, unsigned int meshIndex) {
|
|||
}
|
||||
} else{
|
||||
// if the vertex is already there just find the replace index that is appropriate to it
|
||||
replaceIndex[a] = it->second;
|
||||
// mark it with JOINED_VERTICES_MARK
|
||||
replaceIndex[a] = it->second | JOINED_VERTICES_MARK;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -386,7 +383,7 @@ int JoinVerticesProcess::ProcessMesh( aiMesh* pMesh, unsigned int meshIndex) {
|
|||
for( unsigned int a = 0; a < pMesh->mNumFaces; a++) {
|
||||
aiFace& face = pMesh->mFaces[a];
|
||||
for( unsigned int b = 0; b < face.mNumIndices; b++) {
|
||||
face.mIndices[b] = replaceIndex[face.mIndices[b]] & ~0x80000000;
|
||||
face.mIndices[b] = replaceIndex[face.mIndices[b]] & ~JOINED_VERTICES_MARK;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -400,17 +397,8 @@ int JoinVerticesProcess::ProcessMesh( aiMesh* pMesh, unsigned int meshIndex) {
|
|||
for ( unsigned int b = 0; b < bone->mNumWeights; b++ ) {
|
||||
const aiVertexWeight& ow = bone->mWeights[ b ];
|
||||
// if the vertex is a unique one, translate it
|
||||
if ( !( replaceIndex[ ow.mVertexId ] & 0x80000000 ) ) {
|
||||
bool weightAlreadyExists = false;
|
||||
for (std::vector<aiVertexWeight>::iterator vit = newWeights.begin(); vit != newWeights.end(); ++vit) {
|
||||
if (vit->mVertexId == replaceIndex[ow.mVertexId]) {
|
||||
weightAlreadyExists = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (weightAlreadyExists) {
|
||||
continue;
|
||||
}
|
||||
// filter out joined vertices by JOINED_VERTICES_MARK.
|
||||
if ( !( replaceIndex[ ow.mVertexId ] & JOINED_VERTICES_MARK ) ) {
|
||||
aiVertexWeight nw;
|
||||
nw.mVertexId = replaceIndex[ ow.mVertexId ];
|
||||
nw.mWeight = ow.mWeight;
|
||||
|
|
|
@ -64,8 +64,13 @@ namespace Assimp
|
|||
*/
|
||||
class ASSIMP_API JoinVerticesProcess : public BaseProcess {
|
||||
public:
|
||||
JoinVerticesProcess();
|
||||
~JoinVerticesProcess();
|
||||
// -------------------------------------------------------------------
|
||||
/// @brief The default class constructor.
|
||||
JoinVerticesProcess() = default;
|
||||
|
||||
// -------------------------------------------------------------------
|
||||
/// @brief The default class destructor.
|
||||
~JoinVerticesProcess() = default;
|
||||
|
||||
// -------------------------------------------------------------------
|
||||
/** Returns whether the processing step is present in the given flag field.
|
||||
|
|
Loading…
Reference in New Issue