Make coord transfor for hs1 files optional (#5687)
* Make coord transfor for hs1 files optional * Add config switch for HS1 transformation transformationpull/5697/head
parent
104a70f845
commit
e63d3ed8e7
|
@ -63,7 +63,8 @@ struct HL1ImportSettings {
|
||||||
read_bone_controllers(false),
|
read_bone_controllers(false),
|
||||||
read_hitboxes(false),
|
read_hitboxes(false),
|
||||||
read_textures(false),
|
read_textures(false),
|
||||||
read_misc_global_info(false) {
|
read_misc_global_info(false),
|
||||||
|
transform_coord_system(true) {
|
||||||
}
|
}
|
||||||
|
|
||||||
bool read_animations;
|
bool read_animations;
|
||||||
|
@ -76,6 +77,7 @@ struct HL1ImportSettings {
|
||||||
bool read_hitboxes;
|
bool read_hitboxes;
|
||||||
bool read_textures;
|
bool read_textures;
|
||||||
bool read_misc_global_info;
|
bool read_misc_global_info;
|
||||||
|
bool transform_coord_system;
|
||||||
};
|
};
|
||||||
|
|
||||||
} // namespace HalfLife
|
} // namespace HalfLife
|
||||||
|
|
|
@ -99,7 +99,7 @@ MDLImporter::MDLImporter() :
|
||||||
// ------------------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------------------
|
||||||
// Returns whether the class can handle the format of the given file.
|
// Returns whether the class can handle the format of the given file.
|
||||||
bool MDLImporter::CanRead(const std::string &pFile, IOSystem *pIOHandler, bool /*checkSig*/) const {
|
bool MDLImporter::CanRead(const std::string &pFile, IOSystem *pIOHandler, bool /*checkSig*/) const {
|
||||||
static const uint32_t tokens[] = {
|
static constexpr uint32_t tokens[] = {
|
||||||
AI_MDL_MAGIC_NUMBER_LE_HL2a,
|
AI_MDL_MAGIC_NUMBER_LE_HL2a,
|
||||||
AI_MDL_MAGIC_NUMBER_LE_HL2b,
|
AI_MDL_MAGIC_NUMBER_LE_HL2b,
|
||||||
AI_MDL_MAGIC_NUMBER_LE_GS7,
|
AI_MDL_MAGIC_NUMBER_LE_GS7,
|
||||||
|
@ -138,6 +138,7 @@ void MDLImporter::SetupProperties(const Importer *pImp) {
|
||||||
mHL1ImportSettings.read_bone_controllers = pImp->GetPropertyBool(AI_CONFIG_IMPORT_MDL_HL1_READ_BONE_CONTROLLERS, true);
|
mHL1ImportSettings.read_bone_controllers = pImp->GetPropertyBool(AI_CONFIG_IMPORT_MDL_HL1_READ_BONE_CONTROLLERS, true);
|
||||||
mHL1ImportSettings.read_hitboxes = pImp->GetPropertyBool(AI_CONFIG_IMPORT_MDL_HL1_READ_HITBOXES, true);
|
mHL1ImportSettings.read_hitboxes = pImp->GetPropertyBool(AI_CONFIG_IMPORT_MDL_HL1_READ_HITBOXES, true);
|
||||||
mHL1ImportSettings.read_misc_global_info = pImp->GetPropertyBool(AI_CONFIG_IMPORT_MDL_HL1_READ_MISC_GLOBAL_INFO, true);
|
mHL1ImportSettings.read_misc_global_info = pImp->GetPropertyBool(AI_CONFIG_IMPORT_MDL_HL1_READ_MISC_GLOBAL_INFO, true);
|
||||||
|
mHL1ImportSettings.transform_coord_system = pImp->GetPropertyBool(AI_CONFIG_IMPORT_MDL_HL1_TRANSFORM_COORD_SYSTEM);
|
||||||
}
|
}
|
||||||
|
|
||||||
// ------------------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------------------
|
||||||
|
@ -146,6 +147,20 @@ const aiImporterDesc *MDLImporter::GetInfo() const {
|
||||||
return &desc;
|
return &desc;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ------------------------------------------------------------------------------------------------
|
||||||
|
static void transformCoordinateSystem(const aiScene *pScene) {
|
||||||
|
if (pScene == nullptr) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
pScene->mRootNode->mTransformation = aiMatrix4x4(
|
||||||
|
0.f, -1.f, 0.f, 0.f,
|
||||||
|
0.f, 0.f, 1.f, 0.f,
|
||||||
|
-1.f, 0.f, 0.f, 0.f,
|
||||||
|
0.f, 0.f, 0.f, 1.f
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
// ------------------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------------------
|
||||||
// Imports the given file into the given scene structure.
|
// Imports the given file into the given scene structure.
|
||||||
void MDLImporter::InternReadFile(const std::string &pFile,
|
void MDLImporter::InternReadFile(const std::string &pFile,
|
||||||
|
@ -246,18 +261,16 @@ void MDLImporter::InternReadFile(const std::string &pFile,
|
||||||
". Magic word (", ai_str_toprintable((const char *)&iMagicWord, sizeof(iMagicWord)), ") is not known");
|
". Magic word (", ai_str_toprintable((const char *)&iMagicWord, sizeof(iMagicWord)), ") is not known");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (is_half_life){
|
if (is_half_life && mHL1ImportSettings.transform_coord_system) {
|
||||||
// Now rotate the whole scene 90 degrees around the z and x axes to convert to internal coordinate system
|
// Now rotate the whole scene 90 degrees around the z and x axes to convert to internal coordinate system
|
||||||
pScene->mRootNode->mTransformation = aiMatrix4x4(
|
transformCoordinateSystem(pScene);
|
||||||
0.f, -1.f, 0.f, 0.f,
|
} else {
|
||||||
0.f, 0.f, 1.f, 0.f,
|
|
||||||
-1.f, 0.f, 0.f, 0.f,
|
|
||||||
0.f, 0.f, 0.f, 1.f);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
// Now rotate the whole scene 90 degrees around the x axis to convert to internal coordinate system
|
// Now rotate the whole scene 90 degrees around the x axis to convert to internal coordinate system
|
||||||
pScene->mRootNode->mTransformation = aiMatrix4x4(1.f, 0.f, 0.f, 0.f,
|
pScene->mRootNode->mTransformation = aiMatrix4x4(
|
||||||
0.f, 0.f, 1.f, 0.f, 0.f, -1.f, 0.f, 0.f, 0.f, 0.f, 0.f, 1.f);
|
1.f, 0.f, 0.f, 0.f,
|
||||||
|
0.f, 0.f, 1.f, 0.f,
|
||||||
|
0.f, -1.f, 0.f, 0.f,
|
||||||
|
0.f, 0.f, 0.f, 1.f);
|
||||||
}
|
}
|
||||||
|
|
||||||
DeleteBufferAndCleanup();
|
DeleteBufferAndCleanup();
|
||||||
|
|
|
@ -724,6 +724,12 @@ enum aiComponent
|
||||||
*/
|
*/
|
||||||
#define AI_CONFIG_IMPORT_MDL_HL1_READ_ANIMATION_EVENTS "IMPORT_MDL_HL1_READ_ANIMATION_EVENTS"
|
#define AI_CONFIG_IMPORT_MDL_HL1_READ_ANIMATION_EVENTS "IMPORT_MDL_HL1_READ_ANIMATION_EVENTS"
|
||||||
|
|
||||||
|
// ---------------------------------------------------------------------------
|
||||||
|
/** @brief Set whether you want to convert the HS1 coordinate system in a special way.
|
||||||
|
* The default value is true (S1)
|
||||||
|
* Property type: bool
|
||||||
|
*/
|
||||||
|
#define AI_CONFIG_IMPORT_MDL_HL1_TRANSFORM_COORD_SYSTEM "TRANSFORM COORDSYSTEM FOR HS! MODELS"
|
||||||
// ---------------------------------------------------------------------------
|
// ---------------------------------------------------------------------------
|
||||||
/** @brief Set whether the MDL (HL1) importer will read blend controllers.
|
/** @brief Set whether the MDL (HL1) importer will read blend controllers.
|
||||||
* \note This property requires AI_CONFIG_IMPORT_MDL_HL1_READ_ANIMATIONS to be set to true.
|
* \note This property requires AI_CONFIG_IMPORT_MDL_HL1_READ_ANIMATIONS to be set to true.
|
||||||
|
|
Loading…
Reference in New Issue