Improve matrix::getScale() to return the absolute scale values when the matrix contains a rotation. This still isn't perfect, but it's an improvement. New unit test added. git-svn-id: svn://svn.code.sf.net/p/irrlicht/code/trunk@2114 dfc29bdd-3216-0410-991c-e03cc46cb475master
parent
0e147df2e0
commit
98766ca5ac
|
@ -665,10 +665,30 @@ namespace core
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//! Returns the absolute values of the scales of the matrix.
|
||||||
|
/**
|
||||||
|
Note that this always returns the absolute (positive) values. Unfortunately it
|
||||||
|
does not appear to be possible to extract any original negative values. The best
|
||||||
|
that we could do would be to arbitrarily make one scale negative if one or three
|
||||||
|
of them were negative.
|
||||||
|
FIXME - return the original values.
|
||||||
|
*/
|
||||||
template <class T>
|
template <class T>
|
||||||
inline vector3d<T> CMatrix4<T>::getScale() const
|
inline vector3d<T> CMatrix4<T>::getScale() const
|
||||||
{
|
{
|
||||||
|
// See http://www.robertblum.com/articles/2005/02/14/decomposing-matrices
|
||||||
|
|
||||||
|
// Deal with the 0 rotation case first
|
||||||
|
// Prior to Irrlicht 1.6, we always returned this value.
|
||||||
|
if(core::iszero(M[1]) && core::iszero(M[2]) &&
|
||||||
|
core::iszero(M[4]) && core::iszero(M[6]) &&
|
||||||
|
core::iszero(M[8]) && core::iszero(M[9]))
|
||||||
return vector3d<T>(M[0], M[5], M[10]);
|
return vector3d<T>(M[0], M[5], M[10]);
|
||||||
|
|
||||||
|
// We have to do the full calculation.
|
||||||
|
return vector3d<T>(sqrtf(M[0] * M[0] + M[1] * M[1] + M[2] * M[2]),
|
||||||
|
sqrtf(M[4] * M[4] + M[5] * M[5] + M[6] * M[6]),
|
||||||
|
sqrtf(M[8] * M[8] + M[9] * M[9] + M[10] * M[10]));
|
||||||
}
|
}
|
||||||
|
|
||||||
template <class T>
|
template <class T>
|
||||||
|
|
|
@ -16,15 +16,13 @@
|
||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
||||||
// This is an MSVC pragma to link against the Irrlicht library.
|
//! Defines a test
|
||||||
// Other builds must link against it in the project files.
|
|
||||||
#if defined(_MSC_VER)
|
|
||||||
#pragma comment(lib, "Irrlicht.lib")
|
|
||||||
#endif // _MSC_VER
|
|
||||||
|
|
||||||
typedef struct _STestDefinition
|
typedef struct _STestDefinition
|
||||||
{
|
{
|
||||||
|
//! The test entry point function
|
||||||
bool(*testSignature)(void);
|
bool(*testSignature)(void);
|
||||||
|
|
||||||
|
//! A descriptive name for the test
|
||||||
const char * testName;
|
const char * testName;
|
||||||
} STestDefinition;
|
} STestDefinition;
|
||||||
|
|
||||||
|
@ -52,6 +50,7 @@ int main(int argumentCount, char * arguments[])
|
||||||
tests.push_back(newTest);\
|
tests.push_back(newTest);\
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Use an STL vector so that we don't rely on Irrlicht.
|
||||||
std::vector<STestDefinition> tests;
|
std::vector<STestDefinition> tests;
|
||||||
|
|
||||||
// Note that to interactively debug a test, you will generally want to move it
|
// Note that to interactively debug a test, you will generally want to move it
|
||||||
|
@ -88,6 +87,7 @@ int main(int argumentCount, char * arguments[])
|
||||||
TEST(vectorPositionDimension2d);
|
TEST(vectorPositionDimension2d);
|
||||||
TEST(writeImageToFile);
|
TEST(writeImageToFile);
|
||||||
TEST(flyCircleAnimator);
|
TEST(flyCircleAnimator);
|
||||||
|
TEST(relativeTransformations);
|
||||||
|
|
||||||
const unsigned int numberOfTests = tests.size();
|
const unsigned int numberOfTests = tests.size();
|
||||||
|
|
||||||
|
@ -128,7 +128,7 @@ int main(int argumentCount, char * arguments[])
|
||||||
closeTestLog();
|
closeTestLog();
|
||||||
char runNextTest[256];
|
char runNextTest[256];
|
||||||
(void)sprintf(runNextTest, "\"%s\" %d %d", arguments[0], testToRun, fails);
|
(void)sprintf(runNextTest, "\"%s\" %d %d", arguments[0], testToRun, fails);
|
||||||
fails = system(runNextTest);
|
fails = system(runNextTest); // Spawn the next test in a new process.
|
||||||
}
|
}
|
||||||
|
|
||||||
if(1 == testToRun)
|
if(1 == testToRun)
|
||||||
|
@ -154,6 +154,8 @@ int main(int argumentCount, char * arguments[])
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
closeTestLog();
|
closeTestLog();
|
||||||
|
|
||||||
|
(void)system("tests.log");
|
||||||
}
|
}
|
||||||
|
|
||||||
return fails;
|
return fails;
|
||||||
|
|
|
@ -1,2 +1,2 @@
|
||||||
Test suite pass at GMT Wed Jan 21 08:35:20 2009
|
Test suite pass at GMT Wed Jan 21 14:53:52 2009
|
||||||
|
|
||||||
|
|
|
@ -55,6 +55,7 @@
|
||||||
<Unit filename="matrixOps.cpp" />
|
<Unit filename="matrixOps.cpp" />
|
||||||
<Unit filename="md2Animation.cpp" />
|
<Unit filename="md2Animation.cpp" />
|
||||||
<Unit filename="planeMatrix.cpp" />
|
<Unit filename="planeMatrix.cpp" />
|
||||||
|
<Unit filename="relativeTransformations.cpp" />
|
||||||
<Unit filename="sceneCollisionManager.cpp" />
|
<Unit filename="sceneCollisionManager.cpp" />
|
||||||
<Unit filename="sceneNodeAnimator.cpp" />
|
<Unit filename="sceneNodeAnimator.cpp" />
|
||||||
<Unit filename="softwareDevice.cpp" />
|
<Unit filename="softwareDevice.cpp" />
|
||||||
|
|
|
@ -241,6 +241,10 @@
|
||||||
RelativePath=".\planeMatrix.cpp"
|
RelativePath=".\planeMatrix.cpp"
|
||||||
>
|
>
|
||||||
</File>
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath=".\relativeTransformations.cpp"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath=".\sceneCollisionManager.cpp"
|
RelativePath=".\sceneCollisionManager.cpp"
|
||||||
>
|
>
|
||||||
|
|
|
@ -7,304 +7,5 @@
|
||||||
RootNamespace="tests"
|
RootNamespace="tests"
|
||||||
TargetFrameworkVersion="196613"
|
TargetFrameworkVersion="196613"
|
||||||
>
|
>
|
||||||
<Platforms>
|
<xi:include href="tests_vc_all.xml"/>
|
||||||
<Platform
|
|
||||||
Name="Win32"
|
|
||||||
/>
|
|
||||||
</Platforms>
|
|
||||||
<ToolFiles>
|
|
||||||
</ToolFiles>
|
|
||||||
<Configurations>
|
|
||||||
<Configuration
|
|
||||||
Name="Debug|Win32"
|
|
||||||
OutputDirectory="$(SolutionDir)$(ConfigurationName)"
|
|
||||||
IntermediateDirectory="$(ConfigurationName)"
|
|
||||||
ConfigurationType="1"
|
|
||||||
CharacterSet="2"
|
|
||||||
>
|
|
||||||
<Tool
|
|
||||||
Name="VCPreBuildEventTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCCustomBuildTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCXMLDataGeneratorTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCWebServiceProxyGeneratorTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCMIDLTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCCLCompilerTool"
|
|
||||||
Optimization="0"
|
|
||||||
AdditionalIncludeDirectories="..\include"
|
|
||||||
MinimalRebuild="true"
|
|
||||||
BasicRuntimeChecks="3"
|
|
||||||
RuntimeLibrary="3"
|
|
||||||
WarningLevel="3"
|
|
||||||
DebugInformationFormat="4"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCManagedResourceCompilerTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCResourceCompilerTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCPreLinkEventTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCLinkerTool"
|
|
||||||
AdditionalDependencies="..\lib\Win32-visualstudio\Irrlicht.lib"
|
|
||||||
OutputFile="..\bin\Win32-VisualStudio\$(ProjectName).exe"
|
|
||||||
GenerateDebugInformation="true"
|
|
||||||
TargetMachine="1"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCALinkTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCManifestTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCXDCMakeTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCBscMakeTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCFxCopTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCAppVerifierTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCPostBuildEventTool"
|
|
||||||
/>
|
|
||||||
</Configuration>
|
|
||||||
<Configuration
|
|
||||||
Name="Release|Win32"
|
|
||||||
OutputDirectory="$(SolutionDir)$(ConfigurationName)"
|
|
||||||
IntermediateDirectory="$(ConfigurationName)"
|
|
||||||
ConfigurationType="1"
|
|
||||||
CharacterSet="2"
|
|
||||||
WholeProgramOptimization="1"
|
|
||||||
>
|
|
||||||
<Tool
|
|
||||||
Name="VCPreBuildEventTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCCustomBuildTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCXMLDataGeneratorTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCWebServiceProxyGeneratorTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCMIDLTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCCLCompilerTool"
|
|
||||||
Optimization="2"
|
|
||||||
EnableIntrinsicFunctions="true"
|
|
||||||
AdditionalIncludeDirectories="..\include"
|
|
||||||
RuntimeLibrary="2"
|
|
||||||
EnableFunctionLevelLinking="true"
|
|
||||||
WarningLevel="3"
|
|
||||||
DebugInformationFormat="3"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCManagedResourceCompilerTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCResourceCompilerTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCPreLinkEventTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCLinkerTool"
|
|
||||||
AdditionalDependencies="..\lib\Win32-visualstudio\Irrlicht.lib"
|
|
||||||
OutputFile="..\bin\Win32-VisualStudio\$(ProjectName).exe"
|
|
||||||
GenerateDebugInformation="true"
|
|
||||||
OptimizeReferences="2"
|
|
||||||
EnableCOMDATFolding="2"
|
|
||||||
TargetMachine="1"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCALinkTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCManifestTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCXDCMakeTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCBscMakeTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCFxCopTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCAppVerifierTool"
|
|
||||||
/>
|
|
||||||
<Tool
|
|
||||||
Name="VCPostBuildEventTool"
|
|
||||||
/>
|
|
||||||
</Configuration>
|
|
||||||
</Configurations>
|
|
||||||
<References>
|
|
||||||
</References>
|
|
||||||
<Files>
|
|
||||||
<Filter
|
|
||||||
Name="Source Files"
|
|
||||||
Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
|
|
||||||
UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
|
|
||||||
>
|
|
||||||
<File
|
|
||||||
RelativePath=".\b3dAnimation.cpp"
|
|
||||||
>
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath=".\burningsVideo.cpp"
|
|
||||||
>
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath=".\collisionResponseAnimator.cpp"
|
|
||||||
>
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath=".\cursorSetVisible.cpp"
|
|
||||||
>
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath=".\disambiguateTextures.cpp"
|
|
||||||
>
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath=".\drawPixel.cpp"
|
|
||||||
>
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath=".\drawRectOutline.cpp"
|
|
||||||
>
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath=".\exports.cpp"
|
|
||||||
>
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath=".\fast_atof.cpp"
|
|
||||||
>
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath=".\flyCircleAnimator.cpp"
|
|
||||||
>
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath=".\guiDisabledMenu.cpp"
|
|
||||||
>
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath=".\irrCoreEquals.cpp"
|
|
||||||
>
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath=".\line2dIntersectWith.cpp"
|
|
||||||
>
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath=".\main.cpp"
|
|
||||||
>
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath=".\makeColorKeyTexture.cpp"
|
|
||||||
>
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath=".\matrixOps.cpp"
|
|
||||||
>
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath=".\md2Animation.cpp"
|
|
||||||
>
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath=".\planeMatrix.cpp"
|
|
||||||
>
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath=".\sceneCollisionManager.cpp"
|
|
||||||
>
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath=".\sceneNodeAnimator.cpp"
|
|
||||||
>
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath=".\softwareDevice.cpp"
|
|
||||||
>
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath=".\terrainSceneNode.cpp"
|
|
||||||
>
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath=".\testDimension2d.cpp"
|
|
||||||
>
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath=".\testUtils.cpp"
|
|
||||||
>
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath=".\testVector2d.cpp"
|
|
||||||
>
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath=".\testVector3d.cpp"
|
|
||||||
>
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath=".\textureRenderStates.cpp"
|
|
||||||
>
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath=".\transparentAlphaChannelRef.cpp"
|
|
||||||
>
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath=".\vectorPositionDimension2d.cpp"
|
|
||||||
>
|
|
||||||
</File>
|
|
||||||
<File
|
|
||||||
RelativePath=".\writeImageToFile.cpp"
|
|
||||||
>
|
|
||||||
</File>
|
|
||||||
</Filter>
|
|
||||||
<Filter
|
|
||||||
Name="Header Files"
|
|
||||||
Filter="h;hpp;hxx;hm;inl;inc;xsd"
|
|
||||||
UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
|
|
||||||
>
|
|
||||||
<File
|
|
||||||
RelativePath=".\testUtils.h"
|
|
||||||
>
|
|
||||||
</File>
|
|
||||||
</Filter>
|
|
||||||
<Filter
|
|
||||||
Name="Resource Files"
|
|
||||||
Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav"
|
|
||||||
UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"
|
|
||||||
>
|
|
||||||
</Filter>
|
|
||||||
</Files>
|
|
||||||
<Globals>
|
|
||||||
</Globals>
|
|
||||||
</VisualStudioProject>
|
</VisualStudioProject>
|
||||||
|
|
Loading…
Reference in New Issue