Did a bit more Collada physics importing work.

Also did a quick workaround to allow different camera UP. This demo stuff really needs to be cleaned up now!
This commit is contained in:
ejcoumans
2006-06-03 02:13:59 +00:00
parent 9414d46266
commit ac11a0c06b
11 changed files with 1608 additions and 990 deletions

View File

@@ -24,7 +24,7 @@ using namespace FUDaeWriter;
FCDPhysicsSceneNode::FCDPhysicsSceneNode(FCDocument* document) : FCDEntity(document, "PhysicsSceneNode")
{
//FIXME: no default values are specified in the 1.4 spec!
gravity.x = 0.f; gravity.y = -9.8f; gravity.z = 0.f;
gravity.x = 0.f; gravity.y = 0.f; gravity.z = -9.8f;
timestep = 1.f;
}

View File

@@ -52,13 +52,13 @@ FUStatus FCDTTranslation::LoadFromXML(xmlNode* node)
}
// Write the <translate> node to the COLLADA xml document
xmlNode* FCDTTranslation::WriteToXML(xmlNode* parentNode) const
{
string content = FUStringConversion::ToString(translation);
xmlNode* transformNode = FUDaeWriter::AddChild(parentNode, DAE_TRANSLATE_ELEMENT, content);
GetDocument()->WriteAnimatedValueToXML(&translation.x, transformNode, "translation");
return transformNode;
}
xmlNode* FCDTTranslation::WriteToXML(xmlNode* parentNode) const
{
string content = FUStringConversion::ToString(translation);
xmlNode* transformNode = FUDaeWriter::AddChild(parentNode, DAE_TRANSLATE_ELEMENT, content);
GetDocument()->WriteAnimatedValueToXML(&translation.x, transformNode, "translation");
return transformNode;
}
FMMatrix44 FCDTTranslation::ToMatrix() const
{
@@ -111,14 +111,14 @@ FUStatus FCDTRotation::LoadFromXML(xmlNode* node)
}
// Write the <rotate> node to the COLLADA xml document
xmlNode* FCDTRotation::WriteToXML(xmlNode* parent) const
{
globalSBuilder.clear();
FUStringConversion::ToString(globalSBuilder, axis); globalSBuilder += ' '; globalSBuilder += angle;
xmlNode* transformNode = FUDaeWriter::AddChild(parent, DAE_ROTATE_ELEMENT, globalSBuilder);
GetDocument()->WriteAnimatedValueToXML(&axis.x, transformNode, "rotation");
return transformNode;
}
xmlNode* FCDTRotation::WriteToXML(xmlNode* parent) const
{
globalSBuilder.clear();
FUStringConversion::ToString(globalSBuilder, axis); globalSBuilder += ' '; globalSBuilder += angle;
xmlNode* transformNode = FUDaeWriter::AddChild(parent, DAE_ROTATE_ELEMENT, globalSBuilder);
GetDocument()->WriteAnimatedValueToXML(&axis.x, transformNode, "rotation");
return transformNode;
}
FMMatrix44 FCDTRotation::ToMatrix() const
{
@@ -174,12 +174,12 @@ FUStatus FCDTScale::LoadFromXML(xmlNode* node)
}
// Write the <scale> node to the COLLADA xml document
xmlNode* FCDTScale::WriteToXML(xmlNode* parentNode) const
{
string content = FUStringConversion::ToString(scale);
xmlNode* transformNode = FUDaeWriter::AddChild(parentNode, DAE_SCALE_ELEMENT, content);
GetDocument()->WriteAnimatedValueToXML(&scale.x, transformNode, "scale");
return transformNode;
xmlNode* FCDTScale::WriteToXML(xmlNode* parentNode) const
{
string content = FUStringConversion::ToString(scale);
xmlNode* transformNode = FUDaeWriter::AddChild(parentNode, DAE_SCALE_ELEMENT, content);
GetDocument()->WriteAnimatedValueToXML(&scale.x, transformNode, "scale");
return transformNode;
}
FMMatrix44 FCDTScale::ToMatrix() const
@@ -225,12 +225,12 @@ FUStatus FCDTMatrix::LoadFromXML(xmlNode* node)
}
// Write the <matrix> node to the COLLADA xml document
xmlNode* FCDTMatrix::WriteToXML(xmlNode* parentNode) const
{
string content = FUStringConversion::ToString(transform);
xmlNode* transformNode = FUDaeWriter::AddChild(parentNode, DAE_MATRIX_ELEMENT, content);
GetDocument()->WriteAnimatedValueToXML(&transform[0][0], transformNode, "transform");
return transformNode;
xmlNode* FCDTMatrix::WriteToXML(xmlNode* parentNode) const
{
string content = FUStringConversion::ToString(transform);
xmlNode* transformNode = FUDaeWriter::AddChild(parentNode, DAE_MATRIX_ELEMENT, content);
GetDocument()->WriteAnimatedValueToXML(&transform[0][0], transformNode, "transform");
return transformNode;
}
FCDAnimated* FCDTMatrix::GetAnimated()
@@ -274,14 +274,14 @@ FUStatus FCDTLookAt::LoadFromXML(xmlNode* lookAtNode)
}
// Write the <lookat> node to the COLLADA xml document
xmlNode* FCDTLookAt::WriteToXML(xmlNode* parentNode) const
{
globalSBuilder.clear();
FUStringConversion::ToString(globalSBuilder, position); globalSBuilder += ' ';
FUStringConversion::ToString(globalSBuilder, target); globalSBuilder += ' ';
FUStringConversion::ToString(globalSBuilder, up);
xmlNode* transformNode = FUDaeWriter::AddChild(parentNode, DAE_LOOKAT_ELEMENT, globalSBuilder);
return transformNode;
xmlNode* FCDTLookAt::WriteToXML(xmlNode* parentNode) const
{
globalSBuilder.clear();
FUStringConversion::ToString(globalSBuilder, position); globalSBuilder += ' ';
FUStringConversion::ToString(globalSBuilder, target); globalSBuilder += ' ';
FUStringConversion::ToString(globalSBuilder, up);
xmlNode* transformNode = FUDaeWriter::AddChild(parentNode, DAE_LOOKAT_ELEMENT, globalSBuilder);
return transformNode;
}
FMMatrix44 FCDTLookAt::ToMatrix() const
@@ -346,15 +346,15 @@ FUStatus FCDTSkew::LoadFromXML(xmlNode* skewNode)
}
// Write the <lookat> node to the COLLADA xml document
xmlNode* FCDTSkew::WriteToXML(xmlNode* parentNode) const
{
globalSBuilder.clear();
globalSBuilder.set(angle); globalSBuilder += ' ';
FUStringConversion::ToString(globalSBuilder, rotateAxis); globalSBuilder += ' ';
FUStringConversion::ToString(globalSBuilder, aroundAxis);
xmlNode* transformNode = FUDaeWriter::AddChild(parentNode, DAE_SKEW_ELEMENT, globalSBuilder);
GetDocument()->WriteAnimatedValueToXML(&angle, transformNode, "skew");
return transformNode;
xmlNode* FCDTSkew::WriteToXML(xmlNode* parentNode) const
{
globalSBuilder.clear();
globalSBuilder.set(angle); globalSBuilder += ' ';
FUStringConversion::ToString(globalSBuilder, rotateAxis); globalSBuilder += ' ';
FUStringConversion::ToString(globalSBuilder, aroundAxis);
xmlNode* transformNode = FUDaeWriter::AddChild(parentNode, DAE_SKEW_ELEMENT, globalSBuilder);
GetDocument()->WriteAnimatedValueToXML(&angle, transformNode, "skew");
return transformNode;
}
FMMatrix44 FCDTSkew::ToMatrix() const
@@ -389,30 +389,30 @@ bool FCDTSkew::IsAnimated() const
return GetDocument()->IsValueAnimated(&angle);
}
// Creates a new COLLADA transform, given a transform type.
FCDTransform* FCDTFactory::CreateTransform(FCDocument* document, FCDSceneNode* parent, FCDTransform::Type type)
{
switch (type)
{
case FCDTransform::TRANSLATION: return new FCDTTranslation(document, parent);
case FCDTransform::ROTATION: return new FCDTRotation(document, parent);
case FCDTransform::SCALE: return new FCDTScale(document, parent);
case FCDTransform::SKEW: return new FCDTSkew(document, parent);
case FCDTransform::MATRIX: return new FCDTMatrix(document, parent);
case FCDTransform::LOOKAT: return new FCDTLookAt(document, parent);
default: return NULL;
}
}
// Imports a COLLADA transform, given an XML tree node.
FCDTransform* FCDTFactory::CreateTransform(FCDocument* document, FCDSceneNode* parent, xmlNode* node)
{
FCDTransform* transform = NULL;
if (IsEquivalent(node->name, DAE_ROTATE_ELEMENT)) transform = new FCDTRotation(document, parent);
else if (IsEquivalent(node->name, DAE_TRANSLATE_ELEMENT)) transform = new FCDTTranslation(document, parent);
else if (IsEquivalent(node->name, DAE_SCALE_ELEMENT)) transform = new FCDTScale(document, parent);
else if (IsEquivalent(node->name, DAE_SKEW_ELEMENT)) transform = new FCDTSkew(document, parent);
else if (IsEquivalent(node->name, DAE_MATRIX_ELEMENT)) transform = new FCDTMatrix(document, parent);
else if (IsEquivalent(node->name, DAE_LOOKAT_ELEMENT)) transform = new FCDTLookAt(document, parent);
return transform;
}
// Creates a new COLLADA transform, given a transform type.
FCDTransform* FCDTFactory::CreateTransform(FCDocument* document, FCDSceneNode* parent, FCDTransform::Type type)
{
switch (type)
{
case FCDTransform::TRANSLATION: return new FCDTTranslation(document, parent);
case FCDTransform::ROTATION: return new FCDTRotation(document, parent);
case FCDTransform::SCALE: return new FCDTScale(document, parent);
case FCDTransform::SKEW: return new FCDTSkew(document, parent);
case FCDTransform::MATRIX: return new FCDTMatrix(document, parent);
case FCDTransform::LOOKAT: return new FCDTLookAt(document, parent);
default: return NULL;
}
}
// Imports a COLLADA transform, given an XML tree node.
FCDTransform* FCDTFactory::CreateTransform(FCDocument* document, FCDSceneNode* parent, xmlNode* node)
{
FCDTransform* transform = NULL;
if (IsEquivalent(node->name, DAE_ROTATE_ELEMENT)) transform = new FCDTRotation(document, parent);
else if (IsEquivalent(node->name, DAE_TRANSLATE_ELEMENT)) transform = new FCDTTranslation(document, parent);
else if (IsEquivalent(node->name, DAE_SCALE_ELEMENT)) transform = new FCDTScale(document, parent);
else if (IsEquivalent(node->name, DAE_SKEW_ELEMENT)) transform = new FCDTSkew(document, parent);
else if (IsEquivalent(node->name, DAE_MATRIX_ELEMENT)) transform = new FCDTMatrix(document, parent);
else if (IsEquivalent(node->name, DAE_LOOKAT_ELEMENT)) transform = new FCDTLookAt(document, parent);
return transform;
}

File diff suppressed because it is too large Load Diff