diff --git a/Utils/Libs/GLib/Glib.dsp b/Utils/Libs/GLib/Glib.dsp index 11c06cc6c..405e2f136 100644 --- a/Utils/Libs/GLib/Glib.dsp +++ b/Utils/Libs/GLib/Glib.dsp @@ -40,8 +40,9 @@ RSC=rc.exe # PROP Output_Dir "lib\Release" # PROP Intermediate_Dir "lib\Release" # PROP Target_Dir "" +MTL=midl.exe # ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c -# ADD CPP /nologo /MD /W3 /Gi- /GX /O2 /I "include" /I "include\pc" /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /FR /YX /FD /c +# ADD CPP /nologo /MD /W3 /GX /O2 /I "include" /I "include\pc" /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /FR"Release/" /Fp"Release/Glib.pch" /YX /Fo"Release/" /Fd"Release/" /FD /c # ADD BASE RSC /l 0x809 /d "NDEBUG" # ADD RSC /l 0x809 /d "NDEBUG" BSC32=bscmake.exe @@ -49,7 +50,7 @@ BSC32=bscmake.exe # ADD BSC32 /nologo LIB32=link.exe -lib # ADD BASE LIB32 /nologo -# ADD LIB32 /nologo +# ADD LIB32 /nologo /out:"Release\Glib.lib" !ELSEIF "$(CFG)" == "GLib - Win32 Debug" @@ -63,8 +64,9 @@ LIB32=link.exe -lib # PROP Output_Dir "lib\debug" # PROP Intermediate_Dir "lib\debug" # PROP Target_Dir "" +MTL=midl.exe # ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c -# ADD CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I "include" /I "include\pc" /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /D "__GL_DEBUG__" /FR /YX /FD /GZ /c +# ADD CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /D "__GL_DEBUG__" /FR"debug/" /Fp"debug/Glib.pch" /YX /Fo"debug/" /Fd"debug/" /FD /GZ /c # ADD BASE RSC /l 0x809 /d "_DEBUG" # ADD RSC /l 0x809 /d "_DEBUG" BSC32=bscmake.exe @@ -72,7 +74,7 @@ BSC32=bscmake.exe # ADD BSC32 /nologo LIB32=link.exe -lib # ADD BASE LIB32 /nologo -# ADD LIB32 /nologo +# ADD LIB32 /nologo /out:"debug\Glib.lib" !ENDIF diff --git a/Utils/Libs/GinLib/animheader.h b/Utils/Libs/GinLib/animheader.h index f31367a36..b75ab751c 100644 --- a/Utils/Libs/GinLib/animheader.h +++ b/Utils/Libs/GinLib/animheader.h @@ -11,11 +11,12 @@ ===========================================================================*/ -#pragma warning( disable : 4786 ) #ifndef __ANIMHEADER_H__ #define __ANIMHEADER_H__ +#pragma warning( disable : 4786 ) + /*---------------------------------------------------------------------- Includes -------- */ diff --git a/Utils/Libs/GinLib/ginlib.dsp b/Utils/Libs/GinLib/ginlib.dsp index a3e1a7d65..09f5edc96 100644 --- a/Utils/Libs/GinLib/ginlib.dsp +++ b/Utils/Libs/GinLib/ginlib.dsp @@ -40,6 +40,7 @@ RSC=rc.exe # PROP Output_Dir "Release" # PROP Intermediate_Dir "Release" # PROP Target_Dir "" +MTL=midl.exe # ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c # ADD CPP /nologo /MD /W3 /GX /O2 /I "..\glib\include" /I "..\glib\include\pc" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c # ADD BASE RSC /l 0x809 /d "NDEBUG" @@ -63,8 +64,9 @@ LIB32=link.exe -lib # PROP Output_Dir "Debug" # PROP Intermediate_Dir "Debug" # PROP Target_Dir "" +MTL=midl.exe # ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /GZ /c -# ADD CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I "..\glib\include" /I "..\glib\include\pc" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /Fr /YX /FD /GZ /c +# ADD CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I "..\glib" /I "..\maths" /I "..\davelib" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /Fr /YX /FD /GZ /c # ADD BASE RSC /l 0x809 /d "_DEBUG" # ADD RSC /l 0x809 /d "_DEBUG" BSC32=bscmake.exe @@ -101,10 +103,6 @@ SOURCE=.\mapread.cpp # End Source File # Begin Source File -SOURCE=.\Maths.cpp -# End Source File -# Begin Source File - SOURCE=.\repread.cpp # End Source File # Begin Source File @@ -137,10 +135,6 @@ SOURCE=.\mapread.h # End Source File # Begin Source File -SOURCE=.\Maths.h -# End Source File -# Begin Source File - SOURCE=.\repread.h # End Source File # Begin Source File diff --git a/Utils/Libs/GinLib/gintex.cpp b/Utils/Libs/GinLib/gintex.cpp index 174093a17..8f977d437 100644 --- a/Utils/Libs/GinLib/gintex.cpp +++ b/Utils/Libs/GinLib/gintex.cpp @@ -2,8 +2,10 @@ #include #include "gintex.h" -#include "Maths.h" +#include "vector3.h" +#include "matrix4x4.h" +#include "quat.h" using namespace std; @@ -94,7 +96,7 @@ void CMesh::Load(Gifstream & In) Chunk[i].MatId = s16(In.Get16()); Chunk[i].NumFace = s16(In.Get16()); Chunk[i].MeshNum = In.Get32(); - Chunk[i].Attrib = In.Get32(); + Chunk[i].Attrib = In.Get32(); Chunk[i].Normals = In.Get32(); Chunk[i].Vcol = In.Get32(); Chunk[i].Tex = In.Get32(); @@ -110,12 +112,12 @@ Mod4Chunk ThisChunk; In.read((char*)&ThisChunk.nCurObj , sizeof(long)); In.read(ThisChunk.Name, 32); In.read((char*)&ThisChunk.Radius, sizeof(float)); - In.read((char*)&ThisChunk.CentreX, sizeof(float)); - In.read((char*)&ThisChunk.CentreY, sizeof(float)); - In.read((char*)&ThisChunk.CentreZ, sizeof(float)); - In.read((char*)&ThisChunk.ApX, sizeof(float)); - In.read((char*)&ThisChunk.ApY, sizeof(float)); - In.read((char*)&ThisChunk.ApZ, sizeof(float)); + In.read((char*)&ThisChunk.Centre.x, sizeof(float)); + In.read((char*)&ThisChunk.Centre.y, sizeof(float)); + In.read((char*)&ThisChunk.Centre.z, sizeof(float)); + In.read((char*)&ThisChunk.Ap.x, sizeof(float)); + In.read((char*)&ThisChunk.Ap.y, sizeof(float)); + In.read((char*)&ThisChunk.Ap.z, sizeof(float)); Chunk.push_back(ThisChunk); } @@ -168,7 +170,7 @@ CNode ThisNode; In.Align(4); In.read(ThisNode.Name, 32); - In.read((char*)&ThisNode.XPos, 4); +/* In.read((char*)&ThisNode.XPos, 4); In.read((char*)&ThisNode.YPos, 4); In.read((char*)&ThisNode.ZPos, 4); @@ -185,7 +187,25 @@ CNode ThisNode; In.read((char*)&ThisNode.Yapu, 4); In.read((char*)&ThisNode.Zapu, 4); In.read((char*)&ThisNode.Wapu, 4); - +*/ + In.read((char*)&ThisNode.Pos.x, 4); + In.read((char*)&ThisNode.Pos.y, 4); + In.read((char*)&ThisNode.Pos.z, 4); + + In.read((char*)&ThisNode.Ang.x, 4); + In.read((char*)&ThisNode.Ang.y, 4); + In.read((char*)&ThisNode.Ang.z, 4); + In.read((char*)&ThisNode.Ang.w, 4); + + In.read((char*)&ThisNode.apk.x, 4); + In.read((char*)&ThisNode.apk.y, 4); + In.read((char*)&ThisNode.apk.z, 4); + + In.read((char*)&ThisNode.apu.x, 4); + In.read((char*)&ThisNode.apu.y, 4); + In.read((char*)&ThisNode.apu.z, 4); + In.read((char*)&ThisNode.apu.w, 4); + int ChildCount= In.Get32(); SceneTree[0].AddChild( SceneTree,ThisNode,Parent); @@ -219,9 +239,9 @@ int WeightCount; { ThisNode.Weights[Weight].VertNo=In.Get32(); In.read((char*)&ThisNode.Weights[Weight].Weight, 4); - In.read((char*)&ThisNode.Weights[Weight].X, 4); - In.read((char*)&ThisNode.Weights[Weight].Y, 4); - In.read((char*)&ThisNode.Weights[Weight].Z, 4); + In.read((char*)&ThisNode.Weights[Weight].Pos.x, 4); + In.read((char*)&ThisNode.Weights[Weight].Pos.y, 4); + In.read((char*)&ThisNode.Weights[Weight].Pos.z, 4); } } @@ -257,7 +277,7 @@ CNode ThisNode; ThisNode.Anim.resize(FrameCount); for (int Frame=0;Frame &VersionChunk=GinFile.GetVersionChunk(); @@ -503,50 +559,23 @@ std::vector const &GinTree=GT->GetTree(); { CNode *ThisNode=&SceneTree[Node]; int ParentIdx=ThisNode->ParentIdx; - ThisNode->Mtx=Identity; + ThisNode->Mtx.Identity(); // Build Node Mtx's if (ParentIdx!=-1) { - // LocalMtx -TMATRIX ThisMtx,ParentMtx; +Matrix4x4 ThisMtx; CNode *ParentNode=&SceneTree[ParentIdx]; - - ParentMtx=ParentNode->Mtx; - -TQUAT ThisQ(ThisNode->XAng,ThisNode->YAng,ThisNode->ZAng,ThisNode->WAng); - ThisQ.QuatToMat(&ThisMtx); - ThisMtx.SetPosition(ThisNode->XPos,ThisNode->YPos,ThisNode->ZPos); - ThisNode->Mtx=ParentMtx*ThisMtx; + ThisMtx.Identity(); + ThisNode->Ang.ToMatrix(ThisMtx); + ThisMtx.SetTranslation(ThisNode->Pos); + ThisNode->Mtx=ThisMtx*ParentNode->Mtx; // WorldMtx ThisNode->WorldMtx=GetWorldMatrix(SceneTree,ParentIdx); } } -/* - for (Node=0;NodeMtx; - -TQUAT ThisQ(ThisNode.XAng,ThisNode.YAng,ThisNode.ZAng,ThisNode.WAng); - ThisQ.QuatToMat(&ThisMtx); - ThisMtx.t[0]=ThisNode.XPos; ThisMtx.t[1]=ThisNode.YPos; ThisMtx.t[2]=ThisNode.ZPos; - SceneTree[Node].Mtx=ParentMtx*ThisMtx; - } - } -*/ - //----------------------------------------------------------------------------- // Load Materials @@ -681,8 +710,6 @@ int PropCount=UserPropChunk.size(); int Size=Prop.size()-1; if (Size>0) { - // ThisNode->UserProp.resize(Size); - // for (int c=0;cUserProp[c]=Prop[c]; char *PropPtr=(char*)&Prop[0]; ThisNode->UserProp.Import(PropPtr); @@ -752,26 +779,18 @@ int CScene::loadPoints( int CurMod, vector &Points ,CNode *Th if (T->GetModNum() == CurMod) { - std::vector const & ThesePts=T->GetPts(); + std::vector const & ThesePts=T->GetPts(); int Size= ThesePts.size(); ThisNode->Pts.resize(Size); ThisNode->RelPts.resize(Size); - -TMATRIX IMtx=ThisNode->Mtx; - IMtx.inverse(ThisNode->Mtx); +Matrix4x4 IMtx=ThisNode->Mtx; + IMtx.Invert(); for (int g=0;gPts[g] = ThesePts[g]; -/*Rel Pnt*/ -//TVECTOR InVtx(ThesePts[g].x,ThesePts[g].y,ThesePts[g].z); -TVECTOR InVtx=ThesePts[g];//(ThesePts[g].x,ThesePts[g].y,ThesePts[g].z); -TVECTOR OutVtx=IMtx*InVtx; -// ThisNode->RelPts[g].x = OutVtx.GetX(); -// ThisNode->RelPts[g].y = OutVtx.GetY(); -// ThisNode->RelPts[g].z = OutVtx.GetZ(); - ThisNode->RelPts[g]=OutVtx; +/*Rel Pnt*/ ThisNode->RelPts[g]=IMtx*ThesePts[g]; } return (Size); } @@ -907,64 +926,63 @@ void CScene::GetNonSharedTextures(vector const & SharedTextures,vector< /*****************************************************************************/ /*****************************************************************************/ -TMATRIX GetWorldMatrix(std::vector const &Tree,int Idx) +Matrix4x4 GetWorldMatrix(std::vector const &Tree,int Idx) { -CNode ThisNode=Tree[Idx]; -int ParentIdx=ThisNode.ParentIdx; -TMATRIX ParentMtx=Identity; +CNode ThisNode=Tree[Idx]; +int ParentIdx=ThisNode.ParentIdx; +Matrix4x4 ParentMtx, ThisMtx, PosMtx, RotMtx, StrMtx, SclMtx, IStrMtx; - if (ParentIdx!=-1) ParentMtx=GetWorldMatrix(Tree,ParentIdx); + ParentMtx.Identity(); -TMATRIX ThisMtx=Identity; -TMATRIX PosMtx=Identity; -TMATRIX RotMtx=Identity; -TMATRIX StrMtx=Identity; -TMATRIX SclMtx=Identity; -TMATRIX IStrMtx=Identity; + if (ParentIdx!=-1) ParentMtx=GetWorldMatrix(Tree,ParentIdx); + + +// ThisMtx.Identity(); +// PosMtx.Identity(); +// RotMtx.Identity(); +// StrMtx.Identity(); +// SclMtx.Identity(); +// IStrMtx.Identity(); // Pos - PosMtx=Identity; - PosMtx.SetPosition(ThisNode.XPos,ThisNode.YPos,ThisNode.ZPos); + PosMtx.Identity(); + PosMtx.SetTranslation(ThisNode.Pos); + // Rot -TQUAT RotQ(ThisNode.XAng,ThisNode.YAng,ThisNode.ZAng,ThisNode.WAng); - RotQ.QuatToMat(&RotMtx); + ThisNode.Ang.ToMatrix(RotMtx); + // Stretch -TQUAT StrQ(ThisNode.Xapu,ThisNode.Yapu,ThisNode.Zapu,ThisNode.Wapu); - StrQ.QuatToMat(&StrMtx); - IStrMtx=StrMtx.inverse(); + ThisNode.apu.ToMatrix(StrMtx); + IStrMtx=StrMtx; + IStrMtx.Invert(); // Scale - SclMtx=Identity; - SclMtx.ApplyScaleXYZ(ThisNode.Xapk,ThisNode.Yapk,ThisNode.Zapk); + SclMtx.Identity(); + SclMtx.ApplyScale(ThisNode.apk); ThisMtx= PosMtx*RotMtx*StrMtx*SclMtx*IStrMtx; - + return(ParentMtx*ThisMtx); } //---------------------------------------------------------------------------- -TVECTOR GetWorldPos(std::vector const &Tree,int Idx) +Vector3 GetWorldPos(std::vector const &Tree,int Idx) { CNode ThisNode=Tree[Idx]; -TVECTOR ThisPos(ThisNode.XPos,ThisNode.YPos,ThisNode.ZPos); -TMATRIX WorldMtx=GetWorldMatrix(Tree,ThisNode.ParentIdx); +//Vector3 ThisPos(ThisNode.XPos,ThisNode.YPos,ThisNode.ZPos); +Matrix4x4 WorldMtx=GetWorldMatrix(Tree,ThisNode.ParentIdx); // if (WorldMtx!=ThisNode.WorldMtx) printf("!!!"); - return(WorldMtx*ThisPos); + return(WorldMtx*ThisNode.Pos); } //---------------------------------------------------------------------------- -TVECTOR GetWorldPos(TMATRIX &WorldMtx,TVECTOR &ThisPos) +Vector3 GetWorldPos(Matrix4x4 &WorldMtx,Vector3 &ThisPos) { return(WorldMtx*ThisPos); } -TVECTOR CNode::GetWorldPos(TVECTOR &Pos) +Vector3 CNode::GetWorldPos(Vector3 &Pos) { return(::GetWorldPos(WorldMtx,Pos)); } - -TQUAT CNode::GetWorldAng(TQUAT &Q) -{ - return(TQUAT(0,0,0,0)); -} diff --git a/Utils/Libs/GinLib/gintex.h b/Utils/Libs/GinLib/gintex.h index 9e599dca8..86dbf9b3d 100644 --- a/Utils/Libs/GinLib/gintex.h +++ b/Utils/Libs/GinLib/gintex.h @@ -10,7 +10,10 @@ #include #include "ginio.h" -#include "maths.h" +#include "vector3.h" +#include "matrix4x4.h" +#include "quat.h" + #include "IniClass.h" @@ -94,8 +97,8 @@ struct Mod4Chunk long nCurObj; char Name[32]; float Radius; - float CentreX,CentreY,CentreZ; - float ApX,ApY,ApZ; + Vector3 Centre; + Vector3 Ap; }; class CMod4: public GinChunk @@ -130,13 +133,6 @@ protected: /*****************************************************************************/ /*** Vtx Chunk ***************************************************************/ /*****************************************************************************/ -/*struct vec -{ - float x,y,z; - vec() {x = y = z = 0.f;} - vec(float _x, float _y, float _z) {x = _x; y = _y;z = _z;} -}; -*/ class CPts4: public GinChunk { virtual char const * GetName(void) const {return("PTS4");} @@ -148,23 +144,21 @@ class CPts4: public GinChunk Pnts.resize(nv); for (int i = 0; i< nv ;i++) { - float x,y,z; - In.read((char*)&x, 4); - In.read((char*)&y, 4); - In.read((char*)&z, 4); - Pnts[i] = TVECTOR(x,y,z); + In.read((char*)&Pnts[i].x, 4); + In.read((char*)&Pnts[i].y, 4); + In.read((char*)&Pnts[i].z, 4); } } public: - std::vector const & GetPts(void) const {return(Pnts);} + std::vector const & GetPts(void) const {return(Pnts);} int GetModNum(void) const {return ModNum;} protected: int ModNum; - std::vector Pnts; + std::vector Pnts; }; /*****************************************************************************/ @@ -248,13 +242,9 @@ class CVcol: public GinChunk { for (int j=0; j<3; j++) { - float r,g,b; - In.read((char*)&r, 4); - In.read((char*)&g, 4); - In.read((char*)&b, 4); - Tris[i].p[j].r = r; - Tris[i].p[j].g = g; - Tris[i].p[j].b = b; + In.read((char*)&Tris[i].p[j].r, 4); + In.read((char*)&Tris[i].p[j].g, 4); + In.read((char*)&Tris[i].p[j].b, 4); } } } @@ -311,11 +301,8 @@ class CUVtri: public GinChunk { for (int j=0; j<3; j++) { - float u,v; - In.read((char*)&u, 4); - In.read((char*)&v, 4); - Tris[i].p[j].u = u; - Tris[i].p[j].v = v; + In.read((char*)&Tris[i].p[j].u, 4); + In.read((char*)&Tris[i].p[j].v, 4); } } } @@ -339,15 +326,16 @@ struct sGinWeight { long VertNo; float Weight; - float X,Y,Z; +// float X,Y,Z; + Vector3 Pos; }; struct sGinAnim { - int Frame; - float XPos,YPos,ZPos; - float XAng,YAng,ZAng,WAng; - float kX,kY,kZ; - float uX,uY,uZ,uW; + int Frame; + Vector3 Pos; + Quaternion Ang; + Vector3 apk; + Quaternion apu; }; class CNode @@ -389,18 +377,13 @@ public: } } - TVECTOR GetWorldPos(TVECTOR &Pos);// {return(WorldMtx*Pos);} - TVECTOR GetWorldPos(float X,float Y,float Z) {return(GetWorldPos(TVECTOR (X,Y,Z)));} - TVECTOR GetWorldPos() {return(GetWorldPos(TVECTOR (XPos,YPos,ZPos)));} - - TQUAT GetWorldAng(TQUAT &Q);// {return(WorldMtx*Pos);} - TQUAT GetWorldAng(float X,float Y,float Z,float W) {return(GetWorldAng(TQUAT (X,Y,Z,W)));} - TQUAT GetWorldAng() {return(GetWorldAng(TQUAT (XAng,YAng,ZAng,WAng)));} + Vector3 GetWorldPos(Vector3 &Pos); + Quaternion GetWorldAng(Quaternion &Q); int GetChildCount() {return(ChildList.size());} int GetPruneChildCount() {return(PruneChildList.size());} - std::vector const &GetPts() const {return(Pts);} - std::vector const &GetRelPts() const {return(RelPts);} + std::vector const &GetPts() const {return(Pts);} + std::vector const &GetRelPts() const {return(RelPts);} std::vector const &GetTris() const {return(Tris);} std::vector const &GetVColTris() const {return(VColTris);} std::vector const &GetUVTris() const {return(UVTris);} @@ -416,19 +399,19 @@ public: int PruneIdx,PruneParentIdx; char Name[32]; - float XPos,YPos,ZPos; - float XAng,YAng,ZAng,WAng; - float Xapk,Yapk,Zapk; - float Xapu,Yapu,Zapu,Wapu; + Vector3 Pos; + Quaternion Ang; + Vector3 apk; + Quaternion apu; int Active; - TMATRIX Mtx,WorldMtx; + Matrix4x4 Mtx,WorldMtx; CIni UserProp; std::vector ChildList; std::vector PruneChildList; std::vector Weights; - std::vector Pts; - std::vector RelPts; + std::vector Pts; + std::vector RelPts; std::vector Tris; std::vector VColTris; std::vector UVTris; @@ -492,10 +475,9 @@ class CAnimTree: public GinChunk public: std::vector const & GetTree(void) const{return(AnimTree);} -// int GetFrameCount() {return(FrameCount);} protected: -// int FrameCount; + std::vector AnimTree; }; @@ -555,8 +537,8 @@ protected: /*****************************************************************************/ struct sCam { - std::vector CamPos; - std::vector Target; + std::vector CamPos; + std::vector Target; } ; class CCamera: public GinChunk @@ -570,19 +552,15 @@ class CCamera: public GinChunk ThisCam.Target.resize(FrameCount); for (Frame = 0; Frame< FrameCount;Frame++) { - float x,y,z; - In.read((char*)&x, 4); - In.read((char*)&y, 4); - In.read((char*)&z, 4); - ThisCam.CamPos[Frame] = TVECTOR(x,y,z); + In.read((char*)&ThisCam.CamPos[Frame].x, 4); + In.read((char*)&ThisCam.CamPos[Frame].y, 4); + In.read((char*)&ThisCam.CamPos[Frame].z, 4); } for (Frame = 0; Frame< FrameCount;Frame++) { - float x,y,z; - In.read((char*)&x, 4); - In.read((char*)&y, 4); - In.read((char*)&z, 4); - ThisCam.Target[Frame]= TVECTOR(x,y,z); + In.read((char*)&ThisCam.Target[Frame].x, 4); + In.read((char*)&ThisCam.Target[Frame].y, 4); + In.read((char*)&ThisCam.Target[Frame].z, 4); } } @@ -772,9 +750,9 @@ protected: }; /*****************************************************************************/ -TMATRIX GetWorldMatrix(std::vector const &Tree,int Idx); -TVECTOR GetWorldPos(std::vector const &Tree,int Idx); -TVECTOR GetWorldPos(TMATRIX &WorldMtx,TVECTOR &ThisPos); +Matrix4x4 GetWorldMatrix(std::vector const &Tree,int Idx); +Vector3 GetWorldPos(std::vector const &Tree,int Idx); +Vector3 GetWorldPos(Matrix4x4 &WorldMtx,Vector3 &ThisPos); #endif