This commit is contained in:
Daveo 2000-12-04 16:46:07 +00:00
parent 1c5c1b4011
commit 4813d8262e
5 changed files with 180 additions and 187 deletions

View File

@ -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

View File

@ -11,11 +11,12 @@
===========================================================================*/
#pragma warning( disable : 4786 )
#ifndef __ANIMHEADER_H__
#define __ANIMHEADER_H__
#pragma warning( disable : 4786 )
/*----------------------------------------------------------------------
Includes
-------- */

View File

@ -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

View File

@ -2,8 +2,10 @@
#include <gfname.hpp>
#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<FrameCount;Frame++)
{
In.read((char*)&ThisNode.Anim[Frame].XPos, 4);
/* In.read((char*)&ThisNode.Anim[Frame].XPos, 4);
In.read((char*)&ThisNode.Anim[Frame].YPos, 4);
In.read((char*)&ThisNode.Anim[Frame].ZPos, 4);
@ -274,6 +294,25 @@ CNode ThisNode;
In.read((char*)&ThisNode.Anim[Frame].uY, 4);
In.read((char*)&ThisNode.Anim[Frame].uZ, 4);
In.read((char*)&ThisNode.Anim[Frame].uW, 4);
*/
In.read((char*)&ThisNode.Anim[Frame].Pos.x, 4);
In.read((char*)&ThisNode.Anim[Frame].Pos.y, 4);
In.read((char*)&ThisNode.Anim[Frame].Pos.z, 4);
In.read((char*)&ThisNode.Anim[Frame].Ang.x, 4);
In.read((char*)&ThisNode.Anim[Frame].Ang.y, 4);
In.read((char*)&ThisNode.Anim[Frame].Ang.z, 4);
In.read((char*)&ThisNode.Anim[Frame].Ang.w, 4);
In.read((char*)&ThisNode.Anim[Frame].apk.x, 4);
In.read((char*)&ThisNode.Anim[Frame].apk.y, 4);
In.read((char*)&ThisNode.Anim[Frame].apk.z, 4);
In.read((char*)&ThisNode.Anim[Frame].apu.x, 4);
In.read((char*)&ThisNode.Anim[Frame].apu.y, 4);
In.read((char*)&ThisNode.Anim[Frame].apu.z, 4);
In.read((char*)&ThisNode.Anim[Frame].apu.w, 4);
}
int ChildCount= In.Get32();
@ -308,7 +347,7 @@ int KeyCount;
for (int Frame=0;Frame<KeyCount;Frame++)
{
ThisNode.KeyAnim[Frame].Frame=In.Get32();
In.read((char*)&ThisNode.KeyAnim[Frame].XPos, 4);
/* In.read((char*)&ThisNode.KeyAnim[Frame].XPos, 4);
In.read((char*)&ThisNode.KeyAnim[Frame].YPos, 4);
In.read((char*)&ThisNode.KeyAnim[Frame].ZPos, 4);
@ -325,6 +364,25 @@ int KeyCount;
In.read((char*)&ThisNode.KeyAnim[Frame].uY, 4);
In.read((char*)&ThisNode.KeyAnim[Frame].uZ, 4);
In.read((char*)&ThisNode.KeyAnim[Frame].uW, 4);
*/
In.read((char*)&ThisNode.KeyAnim[Frame].Pos.x, 4);
In.read((char*)&ThisNode.KeyAnim[Frame].Pos.y, 4);
In.read((char*)&ThisNode.KeyAnim[Frame].Pos.z, 4);
In.read((char*)&ThisNode.KeyAnim[Frame].Ang.x, 4);
In.read((char*)&ThisNode.KeyAnim[Frame].Ang.y, 4);
In.read((char*)&ThisNode.KeyAnim[Frame].Ang.z, 4);
In.read((char*)&ThisNode.KeyAnim[Frame].Ang.w, 4);
In.read((char*)&ThisNode.KeyAnim[Frame].apk.x, 4);
In.read((char*)&ThisNode.KeyAnim[Frame].apk.y, 4);
In.read((char*)&ThisNode.KeyAnim[Frame].apk.z, 4);
In.read((char*)&ThisNode.KeyAnim[Frame].apu.x, 4);
In.read((char*)&ThisNode.KeyAnim[Frame].apu.y, 4);
In.read((char*)&ThisNode.KeyAnim[Frame].apu.z, 4);
In.read((char*)&ThisNode.KeyAnim[Frame].apu.w, 4);
}
int ChildCount= In.Get32();
@ -375,14 +433,14 @@ int ChildCount=ThisNode.GetChildCount();
/*****************************************************************************/
int IsAnimDiff(sGinAnim const &Frm0,sGinAnim const &Frm1)
{
if (Frm0.XPos!=Frm1.XPos) return(1);
if (Frm0.YPos!=Frm1.YPos) return(1);
if (Frm0.ZPos!=Frm1.ZPos) return(1);
if (Frm0.Pos.x!=Frm1.Pos.x) return(1);
if (Frm0.Pos.y!=Frm1.Pos.y) return(1);
if (Frm0.Pos.z!=Frm1.Pos.z) return(1);
if (Frm0.XAng!=Frm1.XAng) return(1);
if (Frm0.YAng!=Frm1.YAng) return(1);
if (Frm0.ZAng!=Frm1.ZAng) return(1);
if (Frm0.WAng!=Frm1.WAng) return(1);
if (Frm0.Ang.x!=Frm1.Ang.x) return(1);
if (Frm0.Ang.y!=Frm1.Ang.y) return(1);
if (Frm0.Ang.z!=Frm1.Ang.z) return(1);
if (Frm0.Ang.w!=Frm1.Ang.w) return(1);
return(0);
}
@ -397,8 +455,8 @@ int StartKey=0,EndKey=KeyNode.KeyAnim.size();
{
sGinAnim ForceKey;
ForceKey.Frame=0;
ForceKey.XPos=OutNode.XPos; ForceKey.YPos=OutNode.YPos; ForceKey.ZPos=OutNode.ZPos;
ForceKey.XAng=OutNode.XAng; ForceKey.YAng=OutNode.YAng; ForceKey.ZAng=OutNode.ZAng; ForceKey.WAng=OutNode.WAng;
ForceKey.Pos.x=OutNode.Pos.x; ForceKey.Pos.y=OutNode.Pos.y; ForceKey.Pos.z=OutNode.Pos.z;
ForceKey.Ang.x=OutNode.Ang.x; ForceKey.Ang.y=OutNode.Ang.y; ForceKey.Ang.z=OutNode.Ang.z; ForceKey.Ang.w=OutNode.Ang.w;
OutNode.KeyAnim.push_back(ForceKey);
OutNode.ShrunkKeyAnim.push_back(ForceKey);
EndKey=0;
@ -465,8 +523,6 @@ void CScene::Load(const char *Name)
Gin4File GinFile;
FileName=Name;
MTH_Init();
GinFile.Load(Name);
std::vector<GinChunk const *> &VersionChunk=GinFile.GetVersionChunk();
@ -503,50 +559,23 @@ std::vector<CNode> 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;Node<NodeCount;Node++)
{
CNode GinNode=GinTree[Node];
SceneTree[0].AddChild(SceneTree,GinNode,GinNode.ParentIdx);
// Build Node Mtx's
CNode ThisNode=SceneTree[Node];
SceneTree[Node].Mtx=Identity;
if (GinNode.ParentIdx!=-1)
{
TMATRIX ThisMtx,ParentMtx;
CNode *ParentNode=&SceneTree[ThisNode.ParentIdx];
ParentMtx=ParentNode->Mtx;
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;c<Size;c++) ThisNode->UserProp[c]=Prop[c];
char *PropPtr=(char*)&Prop[0];
ThisNode->UserProp.Import(PropPtr);
@ -752,26 +779,18 @@ int CScene::loadPoints( int CurMod, vector<GinChunk const *> &Points ,CNode *Th
if (T->GetModNum() == CurMod)
{
std::vector<TVECTOR> const & ThesePts=T->GetPts();
std::vector<Vector3> 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;g<Size;g++)
{
/*Abs Pnt*/ ThisNode->Pts[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<GString> const & SharedTextures,vector<
/*****************************************************************************/
/*****************************************************************************/
TMATRIX GetWorldMatrix(std::vector<CNode> const &Tree,int Idx)
Matrix4x4 GetWorldMatrix(std::vector<CNode> 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<CNode> const &Tree,int Idx)
Vector3 GetWorldPos(std::vector<CNode> 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));
}

View File

@ -10,7 +10,10 @@
#include <vector>
#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<TVECTOR> const & GetPts(void) const {return(Pnts);}
std::vector<Vector3> const & GetPts(void) const {return(Pnts);}
int GetModNum(void) const {return ModNum;}
protected:
int ModNum;
std::vector<TVECTOR> Pnts;
std::vector<Vector3> 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<TVECTOR> const &GetPts() const {return(Pts);}
std::vector<TVECTOR> const &GetRelPts() const {return(RelPts);}
std::vector<Vector3> const &GetPts() const {return(Pts);}
std::vector<Vector3> const &GetRelPts() const {return(RelPts);}
std::vector<sGinTri> const &GetTris() const {return(Tris);}
std::vector<sVColTri> const &GetVColTris() const {return(VColTris);}
std::vector<sUVTri> 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<int> ChildList;
std::vector<int> PruneChildList;
std::vector<sGinWeight> Weights;
std::vector<TVECTOR> Pts;
std::vector<TVECTOR> RelPts;
std::vector<Vector3> Pts;
std::vector<Vector3> RelPts;
std::vector<sGinTri> Tris;
std::vector<sVColTri> VColTris;
std::vector<sUVTri> UVTris;
@ -492,10 +475,9 @@ class CAnimTree: public GinChunk
public:
std::vector<CNode> const & GetTree(void) const{return(AnimTree);}
// int GetFrameCount() {return(FrameCount);}
protected:
// int FrameCount;
std::vector<CNode> AnimTree;
};
@ -555,8 +537,8 @@ protected:
/*****************************************************************************/
struct sCam
{
std::vector<TVECTOR> CamPos;
std::vector<TVECTOR> Target;
std::vector<Vector3> CamPos;
std::vector<Vector3> 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<CNode> const &Tree,int Idx);
TVECTOR GetWorldPos(std::vector<CNode> const &Tree,int Idx);
TVECTOR GetWorldPos(TMATRIX &WorldMtx,TVECTOR &ThisPos);
Matrix4x4 GetWorldMatrix(std::vector<CNode> const &Tree,int Idx);
Vector3 GetWorldPos(std::vector<CNode> const &Tree,int Idx);
Vector3 GetWorldPos(Matrix4x4 &WorldMtx,Vector3 &ThisPos);
#endif