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:
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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
Reference in New Issue
Block a user