mirror of
https://github.com/TorqueGameEngines/Torque3D.git
synced 2026-01-19 20:24:49 +00:00
test cases
apply transform to root before importing scene
This commit is contained in:
parent
742b341bcd
commit
dcedcdd6f8
|
|
@ -71,8 +71,8 @@ MatrixF AssimpAppNode::getTransform(F32 time)
|
|||
// no parent (ie. root level) => scale by global shape <unit>
|
||||
mLastTransform.identity();
|
||||
mLastTransform.scale(ColladaUtils::getOptions().unit * ColladaUtils::getOptions().formatScaleFactor);
|
||||
if (!isBounds())
|
||||
convertMat(mLastTransform);
|
||||
/*if (!isBounds())
|
||||
convertMat(mLastTransform);*/
|
||||
}
|
||||
|
||||
// If this node is animated in the active sequence, fetch the animated transform
|
||||
|
|
@ -272,9 +272,11 @@ void AssimpAppNode::convertMat(MatrixF& outMat)
|
|||
|
||||
case UPAXISTYPE_Y_UP:
|
||||
// rotate 180 around Y-axis, then 90 around X-axis
|
||||
rot(0, 0) = -1.0f;
|
||||
rot(1, 1) = 0.0f; rot(2, 1) = 1.0f;
|
||||
rot(1, 2) = 1.0f; rot(2, 2) = 0.0f;
|
||||
rot(0, 0) = 1.0f;
|
||||
rot(1, 1) = 0.0f;
|
||||
rot(1, 2) = -1.0f;
|
||||
rot(2, 1) = 1.0f;
|
||||
rot(2, 2) = 0.0f;
|
||||
|
||||
// pre-multiply the transform by the rotation matrix
|
||||
outMat.mulL(rot);
|
||||
|
|
|
|||
|
|
@ -182,10 +182,9 @@ void AssimpShapeLoader::enumerateScene()
|
|||
Con::printf("[ASSIMP] Attempting to load file: %s", shapePath.getFullPath().c_str());
|
||||
|
||||
// Define post-processing steps
|
||||
U32 ppsteps = aiProcess_Triangulate | aiProcess_ConvertToLeftHanded & ~aiProcess_FlipWindingOrder;
|
||||
U32 ppsteps = aiProcess_Triangulate | /*aiProcess_PreTransformVertices |*/ aiProcess_ConvertToLeftHanded & ~aiProcess_MakeLeftHanded;
|
||||
|
||||
const auto& options = ColladaUtils::getOptions();
|
||||
if (options.reverseWindingOrder) ppsteps |= aiProcess_FlipWindingOrder;
|
||||
if (options.calcTangentSpace) ppsteps |= aiProcess_CalcTangentSpace;
|
||||
if (options.joinIdenticalVerts) ppsteps |= aiProcess_JoinIdenticalVertices;
|
||||
if (options.removeRedundantMats) ppsteps |= aiProcess_RemoveRedundantMaterials;
|
||||
|
|
@ -210,7 +209,14 @@ void AssimpShapeLoader::enumerateScene()
|
|||
#ifdef TORQUE_DEBUG
|
||||
aiEnableVerboseLogging(true);
|
||||
#endif
|
||||
|
||||
|
||||
/*mImporter.SetPropertyInteger(AI_CONFIG_PP_PTV_KEEP_HIERARCHY, 1);
|
||||
mImporter.SetPropertyInteger(AI_CONFIG_PP_PTV_ADD_ROOT_TRANSFORMATION, 1);
|
||||
mImporter.SetPropertyMatrix(AI_CONFIG_PP_PTV_ROOT_TRANSFORMATION, aiMatrix4x4(1, 0, 0, 0,
|
||||
0, 0, -1, 0,
|
||||
0, 1, 0, 0,
|
||||
0, 0, 0, 1));*/
|
||||
|
||||
// Read the file
|
||||
mScene = mImporter.ReadFile(shapePath.getFullPath().c_str(), ppsteps);
|
||||
|
||||
|
|
@ -248,6 +254,9 @@ void AssimpShapeLoader::enumerateScene()
|
|||
}
|
||||
}
|
||||
|
||||
if (fileExt == String::ToString("glb"))
|
||||
ColladaUtils::getOptions().upAxis = UPAXISTYPE_X_UP;
|
||||
|
||||
for (U32 i = 0; i < mScene->mNumTextures; ++i) {
|
||||
extractTexture(i, mScene->mTextures[i]);
|
||||
}
|
||||
|
|
@ -261,6 +270,29 @@ void AssimpShapeLoader::enumerateScene()
|
|||
// Setup LOD checks
|
||||
detectDetails();
|
||||
|
||||
|
||||
aiMatrix4x4 sceneRoot;
|
||||
|
||||
if (ColladaUtils::getOptions().upAxis == UPAXISTYPE_X_UP) {
|
||||
sceneRoot = aiMatrix4x4(1, 0, 0, 0,
|
||||
0, 0, 1, 0,
|
||||
0, 1, 0, 0,
|
||||
0, 0, 0, 1);
|
||||
}
|
||||
|
||||
if (ColladaUtils::getOptions().upAxis == UPAXISTYPE_Z_UP) {
|
||||
sceneRoot = aiMatrix4x4(1, 0, 0, 0,
|
||||
0, 0, -1, 0,
|
||||
0, 1, 0, 0,
|
||||
0, 0, 0, 1);
|
||||
}
|
||||
|
||||
if (ColladaUtils::getOptions().upAxis == UPAXISTYPE_Y_UP) {
|
||||
sceneRoot = aiMatrix4x4::RotationX(AI_MATH_PI / 2, sceneRoot);
|
||||
}
|
||||
|
||||
applyTransformation(mScene->mRootNode, sceneRoot);
|
||||
|
||||
// Process the scene graph
|
||||
AssimpAppNode* rootNode = new AssimpAppNode(mScene, mScene->mRootNode, 0);
|
||||
if (!processNode(rootNode)) {
|
||||
|
|
@ -273,7 +305,7 @@ void AssimpShapeLoader::enumerateScene()
|
|||
if (!boundsNode) {
|
||||
aiNode* reqNode = new aiNode("bounds");
|
||||
mScene->mRootNode->addChildren(1, &reqNode);
|
||||
reqNode->mTransformation = mScene->mRootNode->mTransformation;
|
||||
//reqNode->mTransformation = mScene->mRootNode->mTransformation;
|
||||
AssimpAppNode* appBoundsNode = new AssimpAppNode(mScene, reqNode);
|
||||
if (!processNode(appBoundsNode)) {
|
||||
delete appBoundsNode;
|
||||
|
|
@ -305,6 +337,11 @@ void AssimpShapeLoader::configureImportUnits() {
|
|||
}
|
||||
options.unit = static_cast<F32>(unitScaleFactor);
|
||||
}
|
||||
|
||||
int upAxis = UPAXISTYPE_Z_UP;
|
||||
if (getMetaInt("UpAxis", upAxis)) {
|
||||
options.upAxis = static_cast<domUpAxisType>(upAxis);
|
||||
}
|
||||
}
|
||||
|
||||
void AssimpShapeLoader::processAssimpNode(const aiNode* node, const aiScene* scene, AssimpAppNode* parentNode)
|
||||
|
|
|
|||
Loading…
Reference in a new issue