This commit is contained in:
Daveo 2001-03-07 23:20:09 +00:00
parent f54041ef04
commit db53ce744a
18 changed files with 193 additions and 162 deletions

View file

@ -43,6 +43,9 @@ protected:
} ;
#define ASSERT(x) if (!(x)) GObject::Error(ERR_FATAL,"%s %s %i\n",#x,__FILE__,__LINE__);
//***************************************************************************
GString CheckFileString(const char * Str);
bool CheckPlusMinus(const char * Str);

View file

@ -14,11 +14,6 @@
#include "PsxTypes.h"
#include <algorithm>
//***************************************************************************
//vector<GString> CFaceStore::TexList;
//CTexGrab CFaceStore::FaceStoreTexGrab;
//CTexGrab *CFaceStore::TexGrab=&FaceStoreTexGrab;
//***************************************************************************
Vector3 normalise(Vector3 &v)
{
@ -108,53 +103,52 @@ CFace F;
}
F.TexName=Tex;
// F.Mat = AddTex(Tex);
// F.Normal = crossProduct( F.vtx[0], F.vtx[1], F.vtx[2] );
// F.Avail = true;
// F.ID=ID;
F.Mat = -1;
return(AddFace(F));
}
//***************************************************************************
CFace &CFaceStore::AddFace(CFace &Face)
CFace &CFaceStore::AddFace(CFace &F,bool ProcessTexFlag)
{
int ListSize=FaceList.size();
FaceList.resize(ListSize+1);
CFace &F = FaceList[ListSize];
F=Face;
// Process Vtx's
for (int i=0; i<3; i++)
{
F.pts[i]=AddVtx(F.vtx[i]*Scale);
F.pts[i]=AddVtx(F.vtx[i]);
}
F.Mat=AddTex(Face.TexName);
if (ProcessTexFlag && F.Mat==-1)
{
F.Mat=AddTex(F.TexName);
}
F.Normal = crossProduct( F.vtx[0], F.vtx[1], F.vtx[2] );
F.Avail = true;
FaceList[ListSize]=F;
return(F);
}
//***************************************************************************
void CFaceStore::AddFaces(vector<CFace> &Faces)
void CFaceStore::AddFaces(vector<CFace> &Faces,bool ProcessTexFlag)
{
int ListSize=Faces.size();
for (int i=0 ;i<ListSize ;i++)
{
AddFace(Faces[i]);
AddFace(Faces[i],ProcessTexFlag);
}
}
//***************************************************************************
void CFaceStore::AddFaces(CFaceStore &Faces)
void CFaceStore::AddFaces(CFaceStore &Faces,bool ProcessTexFlag)
{
int ListSize=Faces.GetFaceCount();
for (int i=0 ;i<ListSize ;i++)
{
AddFace(Faces[i]);
AddFace(Faces[i],ProcessTexFlag);
}
}
@ -189,30 +183,28 @@ CFace &F = FaceList[ListSize];
//***************************************************************************
int CFaceStore::AddTex(GString const &TexName)
{
static GString LastTex;
static int LastIdx=-1;
vector<FileInfo> const &TexList=TexGrab->GetTexInfoList();
int ListSize=TexList.size();
GString Filename=TexName;
Filename.Upper();
for (int i=0; i<ListSize; i++)
GString Filename=TexName;
Filename.Lower();
LastTex=Filename;
for (LastIdx=0; LastIdx<ListSize; LastIdx++)
{
if (TexList[i].Name==Filename) return(TexList[i].TexGrabId);
GString const &ListName=TexList[LastIdx].GetActualFileName();
if (ListName==Filename) return(LastIdx);
}
// Does file exist
if (!FindFile(TexName))
GObject::Error(ERR_FATAL,"Texture not found %s!!\n",TexName);
TexList.resize(ListSize+1);
sFaceTexList &New=TexList[ListSize];
New.Name=Filename;
// printf("Add Tex %s\n",TexName);
New.TexGrabId=TexGrab->AddFile(Filename);
return(New.TexGrabId);
TexGrab->AddFile(Filename);
LastIdx=ListSize;
return(ListSize);
}
//***************************************************************************
@ -255,6 +247,7 @@ void CFaceStore::SetupUV(CFace const &In, sTri &Out)
{
vector<sTexOutInfo> &TexInfo=TexGrab->GetTexInfo();
sTexOutInfo &ThisTex=TexInfo[In.Mat];
ASSERT(In.Mat<TexInfo.size());
int W = ThisTex.w - 1;
int H = ThisTex.h - 1;
@ -326,9 +319,9 @@ int CFaceStore::AddVtx(Vector3 &InVtx)
int ListSize=OutVtxList.size();
sVtx ThisVtx;
ThisVtx.vx=round(InVtx.x);
ThisVtx.vy=round(InVtx.y);
ThisVtx.vz=round(InVtx.z);
ThisVtx.vx=round(InVtx.x*Scale);
ThisVtx.vy=round(InVtx.y*Scale);
ThisVtx.vz=round(InVtx.z*Scale);
for (int i=0; i<ListSize; i++)
{

View file

@ -15,15 +15,33 @@
using namespace std;
//***************************************************************************
/*
struct sFaceTexList
{
GString Name;
int TexGrabId;
};
*/
//***************************************************************************
class CFace
{
public:
// int PntCount;
int Mat;
Vector3 vtx[4];
int pts[4];
int idx[4];
sUV uvs[4];
int vis[4];
Vector3 Normal;
bool Avail;
int ID;
GString TexName;
};
/*
class CFace
{
public:
CFace()
{
@ -34,6 +52,7 @@ public:
vis.resize(3);
}
// int PntCount;
int Mat;
vector<Vector3> vtx;
vector<int> pts;
@ -46,6 +65,7 @@ public:
GString TexName;
};
*/
//***************************************************************************
#ifndef sTriFace
struct sTriFace
@ -67,9 +87,9 @@ public:
~CFaceStore(){};
CFace &AddFace(vector<Vector3> const &P, const sGinTri &T, const sUVTri &uv,GString const &Tex,int ID=0);
CFace &AddFace(CFace &F);
void AddFaces(vector<CFace>&Faces);
void AddFaces(CFaceStore &Faces);
CFace &AddFace(CFace &F,bool TexFlag=true);
void AddFaces(vector<CFace>&Faces,bool TexFlag=true);
void AddFaces(CFaceStore &Faces,bool TexFlag=true);
CFace &AddFace(sTriFace &Face,int ID=0);
@ -135,7 +155,7 @@ private:
int MaxStrip;
vector<CFace> FaceList;
vector<sFaceTexList> TexList;
// vector<sFaceTexList> TexList;
CTexGrab FaceStoreTexGrab,*TexGrab;
vector<CFace> TriFaceList;

View file

@ -138,7 +138,13 @@ int Idx=MyFiles.AddMemFrame(UpperName,Frame);
return(Idx);
}
vector<FileInfo> const &CTexGrab::GetTexInfoList()
{
return(MyFiles.GetFileInfoVector());
}
/*
/*===========================================================================
end */

View file

@ -84,6 +84,8 @@ public:
void SetTPage(int Base,int W,int H) {m_PageBase=Base; m_WidthPages=W; m_HeightPages=H; m_PagePlacements=true;}
void ForceOffsets(int XOfs,int YOfs) {MyFiles.SetXOff(XOfs); MyFiles.SetYOff(YOfs); MyFiles.SetForceOffsets(true);}
vector<FileInfo> const &CTexGrab::GetTexInfoList();
std::vector<sTexOutInfo> &GetTexInfo() {return(TexInfo);}

View file

@ -42,7 +42,7 @@ RSC=rc.exe
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
# ADD CPP /nologo /MD /W3 /GX /O2 /I "..\libs\glib" /I "..\libs\maths" /I "..\libs\davelib" /I "..\libs\ginlib" /I "..\libs\texgrab" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
# ADD CPP /nologo /MD /W3 /GX /O2 /I "..\libs\glib" /I "..\libs\maths" /I "..\libs\davelib" /I "..\libs\ginlib" /I "..\libs\texgrab" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /FR /YX /FD /c
# ADD BASE RSC /l 0x809 /d "NDEBUG"
# ADD RSC /l 0x809 /d "NDEBUG"
BSC32=bscmake.exe