|
@@ -111,7 +111,22 @@ PbrtExporter::PbrtExporter(
|
|
mScene(pScene),
|
|
mScene(pScene),
|
|
mIOSystem(pIOSystem),
|
|
mIOSystem(pIOSystem),
|
|
mPath(path),
|
|
mPath(path),
|
|
- mFile(file) {
|
|
|
|
|
|
+ mFile(file),
|
|
|
|
+ mRootTransform(
|
|
|
|
+ // rotates the (already left-handed) CRS -90 degrees around the x axis in order to
|
|
|
|
+ // make +Z 'up' and +Y 'towards viewer', as in default in pbrt
|
|
|
|
+ 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 //
|
|
|
|
+ ) {
|
|
|
|
+
|
|
|
|
+ mRootTransform = aiMatrix4x4(
|
|
|
|
+ -1.f, 0, 0.f, 0.f, //
|
|
|
|
+ 0.0f, -1.f, 0.f, 0.f, //
|
|
|
|
+ 0.f, 0.f, 1.f, 0.f, //
|
|
|
|
+ 0.f, 0.f, 0.f, 1.f //
|
|
|
|
+ ) * mRootTransform;
|
|
// Export embedded textures.
|
|
// Export embedded textures.
|
|
if (mScene->mNumTextures > 0)
|
|
if (mScene->mNumTextures > 0)
|
|
if (!mIOSystem->CreateDirectory("textures"))
|
|
if (!mIOSystem->CreateDirectory("textures"))
|
|
@@ -260,7 +275,7 @@ aiMatrix4x4 PbrtExporter::GetNodeTransform(const aiString &name) const {
|
|
node = node->mParent;
|
|
node = node->mParent;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
- return m;
|
|
|
|
|
|
+ return mRootTransform * m;
|
|
}
|
|
}
|
|
|
|
|
|
std::string PbrtExporter::TransformAsString(const aiMatrix4x4 &m) {
|
|
std::string PbrtExporter::TransformAsString(const aiMatrix4x4 &m) {
|
|
@@ -327,7 +342,7 @@ void PbrtExporter::WriteCamera(int i) {
|
|
|
|
|
|
if (!cameraActive)
|
|
if (!cameraActive)
|
|
mOutput << "# ";
|
|
mOutput << "# ";
|
|
- mOutput << "Scale -1 1 1\n"; // right handed -> left handed
|
|
|
|
|
|
+ mOutput << "Scale 1 1 1\n";
|
|
if (!cameraActive)
|
|
if (!cameraActive)
|
|
mOutput << "# ";
|
|
mOutput << "# ";
|
|
mOutput << "LookAt "
|
|
mOutput << "LookAt "
|
|
@@ -383,8 +398,8 @@ void PbrtExporter::WriteWorldDefinition() {
|
|
}
|
|
}
|
|
|
|
|
|
mOutput << "# Geometry\n\n";
|
|
mOutput << "# Geometry\n\n";
|
|
- aiMatrix4x4 worldFromObject;
|
|
|
|
- WriteGeometricObjects(mScene->mRootNode, worldFromObject, meshUses);
|
|
|
|
|
|
+
|
|
|
|
+ WriteGeometricObjects(mScene->mRootNode, mRootTransform, meshUses);
|
|
}
|
|
}
|
|
|
|
|
|
void PbrtExporter::WriteTextures() {
|
|
void PbrtExporter::WriteTextures() {
|