mirror of
https://github.com/MaSzyna-EU07/maszyna.git
synced 2026-07-22 16:19:19 +02:00
coś było źle
This commit is contained in:
196
Model3d.cpp
196
Model3d.cpp
@@ -7,8 +7,8 @@ obtain one at
|
|||||||
http://mozilla.org/MPL/2.0/.
|
http://mozilla.org/MPL/2.0/.
|
||||||
*/
|
*/
|
||||||
/*
|
/*
|
||||||
MaSzyna EU07 locomotive simulator
|
MaSzyna EU07 locomotive simulator
|
||||||
Copyright (C) 2001-2004 Marcin Wozniak, Maciej Czapkiewicz and others
|
Copyright (C) 2001-2004 Marcin Wozniak, Maciej Czapkiewicz and others
|
||||||
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@@ -27,7 +27,7 @@ http://mozilla.org/MPL/2.0/.
|
|||||||
using namespace Mtable;
|
using namespace Mtable;
|
||||||
|
|
||||||
double TSubModel::fSquareDist = 0;
|
double TSubModel::fSquareDist = 0;
|
||||||
size_t TSubModel::iInstance; // numer renderowanego egzemplarza obiektu
|
int TSubModel::iInstance; // numer renderowanego egzemplarza obiektu
|
||||||
texture_manager::size_type *TSubModel::ReplacableSkinId = NULL;
|
texture_manager::size_type *TSubModel::ReplacableSkinId = NULL;
|
||||||
int TSubModel::iAlpha = 0x30300030; // maska do testowania flag tekstur wymiennych
|
int TSubModel::iAlpha = 0x30300030; // maska do testowania flag tekstur wymiennych
|
||||||
TModel3d *TSubModel::pRoot; // Ra: tymczasowo wskaźnik na model widoczny z submodelu
|
TModel3d *TSubModel::pRoot; // Ra: tymczasowo wskaźnik na model widoczny z submodelu
|
||||||
@@ -104,8 +104,8 @@ void TSubModel::FirstInit()
|
|||||||
fNearAttenEnd = 80;
|
fNearAttenEnd = 80;
|
||||||
bUseNearAtten = false;
|
bUseNearAtten = false;
|
||||||
iFarAttenDecay = 0;
|
iFarAttenDecay = 0;
|
||||||
fFarDecayRadius = 100;
|
fFarDecayRadius = 100.0f;
|
||||||
fCosFalloffAngle = 0.5; // 120°?
|
fCosFalloffAngle = 0.5f; // 120°?
|
||||||
fCosHotspotAngle = 0.3f; // 145°?
|
fCosHotspotAngle = 0.3f; // 145°?
|
||||||
fCosViewAngle = 0;
|
fCosViewAngle = 0;
|
||||||
fSquareMaxDist = 10000 * 10000; // 10km
|
fSquareMaxDist = 10000 * 10000; // 10km
|
||||||
@@ -152,7 +152,7 @@ void TSubModel::TextureNameSet(const char *n)
|
|||||||
if (iFlags & 0x0200)
|
if (iFlags & 0x0200)
|
||||||
{ // tylko jeżeli submodel zosta utworzony przez new
|
{ // tylko jeżeli submodel zosta utworzony przez new
|
||||||
delete[] pTexture; // usunięcie poprzedniej
|
delete[] pTexture; // usunięcie poprzedniej
|
||||||
size_t i = strlen(n);
|
int i = strlen(n);
|
||||||
if (i)
|
if (i)
|
||||||
{ // utworzenie nowej
|
{ // utworzenie nowej
|
||||||
pTexture = new char[i + 1];
|
pTexture = new char[i + 1];
|
||||||
@@ -169,7 +169,7 @@ void TSubModel::NameSet(const char *n)
|
|||||||
if (iFlags & 0x0200)
|
if (iFlags & 0x0200)
|
||||||
{ // tylko jeżeli submodel zosta utworzony przez new
|
{ // tylko jeżeli submodel zosta utworzony przez new
|
||||||
delete[] pName; // usunięcie poprzedniej
|
delete[] pName; // usunięcie poprzedniej
|
||||||
size_t i = strlen(n);
|
int i = strlen(n);
|
||||||
if (i)
|
if (i)
|
||||||
{ // utworzenie nowej
|
{ // utworzenie nowej
|
||||||
pName = new char[i + 1];
|
pName = new char[i + 1];
|
||||||
@@ -205,8 +205,8 @@ int TSubModel::SeekFaceNormal(unsigned int *Masks, int f, unsigned int dwMask, f
|
|||||||
return -1; // nie znaleziono stycznego wierzchołka
|
return -1; // nie znaleziono stycznego wierzchołka
|
||||||
}
|
}
|
||||||
|
|
||||||
float emm1[] = {1, 1, 1, 0};
|
float emm1[] = { 1, 1, 1, 0 };
|
||||||
float emm2[] = {0, 0, 0, 1};
|
float emm2[] = { 0, 0, 0, 1 };
|
||||||
|
|
||||||
inline double readIntAsDouble(cParser &parser, int base = 255)
|
inline double readIntAsDouble(cParser &parser, int base = 255)
|
||||||
{
|
{
|
||||||
@@ -231,9 +231,9 @@ inline void readColor(cParser &parser, int &color)
|
|||||||
/*
|
/*
|
||||||
inline void readMatrix(cParser& parser,matrix4x4& matrix)
|
inline void readMatrix(cParser& parser,matrix4x4& matrix)
|
||||||
{//Ra: wczytanie transforma
|
{//Ra: wczytanie transforma
|
||||||
for (int x=0;x<=3;x++) //wiersze
|
for (int x=0;x<=3;x++) //wiersze
|
||||||
for (int y=0;y<=3;y++) //kolumny
|
for (int y=0;y<=3;y++) //kolumny
|
||||||
parser.getToken(matrix(x)[y]);
|
parser.getToken(matrix(x)[y]);
|
||||||
};
|
};
|
||||||
*/
|
*/
|
||||||
inline void readMatrix(cParser &parser, float4x4 &matrix)
|
inline void readMatrix(cParser &parser, float4x4 &matrix)
|
||||||
@@ -368,8 +368,8 @@ int TSubModel::Load(cParser &parser, TModel3d *Model, int Pos, bool dynamic)
|
|||||||
parser >> discard >> bWire >> discard >> fWireSize >> discard;
|
parser >> discard >> bWire >> discard >> fWireSize >> discard;
|
||||||
Opacity = readIntAsDouble(parser,
|
Opacity = readIntAsDouble(parser,
|
||||||
100.0f); // wymagane jest 0 dla szyb, 100 idzie w nieprzezroczyste
|
100.0f); // wymagane jest 0 dla szyb, 100 idzie w nieprzezroczyste
|
||||||
if (Opacity > 1.0f)
|
if (Opacity > 1.0)
|
||||||
Opacity *= 0.01f; // w 2013 był błąd i aby go obejść, trzeba było wpisać 10000.0
|
Opacity *= 0.01; // w 2013 był błąd i aby go obejść, trzeba było wpisać 10000.0
|
||||||
if ((Global::iConvertModels & 1) == 0) // dla zgodności wstecz
|
if ((Global::iConvertModels & 1) == 0) // dla zgodności wstecz
|
||||||
Opacity = 0.0; // wszystko idzie w przezroczyste albo zależnie od tekstury
|
Opacity = 0.0; // wszystko idzie w przezroczyste albo zależnie od tekstury
|
||||||
if (!parser.expectToken("map:"))
|
if (!parser.expectToken("map:"))
|
||||||
@@ -411,7 +411,7 @@ int TSubModel::Load(cParser &parser, TModel3d *Model, int Pos, bool dynamic)
|
|||||||
TextureNameSet(texture.c_str());
|
TextureNameSet(texture.c_str());
|
||||||
if (texture.find_first_of("/\\") == texture.npos)
|
if (texture.find_first_of("/\\") == texture.npos)
|
||||||
texture.insert(0, Global::asCurrentTexturePath.c_str());
|
texture.insert(0, Global::asCurrentTexturePath.c_str());
|
||||||
TextureID = TextureManager.GetTextureId( texture, szTexturePath );
|
TextureID = TextureManager.GetTextureId(texture, szTexturePath);
|
||||||
// TexAlpha=TTexturesManager::GetAlpha(TextureID);
|
// TexAlpha=TTexturesManager::GetAlpha(TextureID);
|
||||||
// iFlags|=TexAlpha?0x20:0x10; //0x10-nieprzezroczysta, 0x20-przezroczysta
|
// iFlags|=TexAlpha?0x20:0x10; //0x10-nieprzezroczysta, 0x20-przezroczysta
|
||||||
if (Opacity < 1.0) // przezroczystość z tekstury brana tylko dla Opacity
|
if (Opacity < 1.0) // przezroczystość z tekstury brana tylko dla Opacity
|
||||||
@@ -603,7 +603,7 @@ int TSubModel::Load(cParser &parser, TModel3d *Model, int Pos, bool dynamic)
|
|||||||
parser >> Vertices[i].Point.x >> Vertices[i].Point.y >> Vertices[i].Point.z >>
|
parser >> Vertices[i].Point.x >> Vertices[i].Point.y >> Vertices[i].Point.z >>
|
||||||
j // zakodowany kolor
|
j // zakodowany kolor
|
||||||
>> discard;
|
>> discard;
|
||||||
Vertices[i].Normal.x = ((j)&0xFF) / 255.0; // R
|
Vertices[i].Normal.x = ((j) & 0xFF) / 255.0; // R
|
||||||
Vertices[i].Normal.y = ((j >> 8) & 0xFF) / 255.0; // G
|
Vertices[i].Normal.y = ((j >> 8) & 0xFF) / 255.0; // G
|
||||||
Vertices[i].Normal.z = ((j >> 16) & 0xFF) / 255.0; // B
|
Vertices[i].Normal.z = ((j >> 16) & 0xFF) / 255.0; // B
|
||||||
}
|
}
|
||||||
@@ -1220,7 +1220,7 @@ void TSubModel::RenderAlphaDL()
|
|||||||
if (eType == TP_TEXT)
|
if (eType == TP_TEXT)
|
||||||
{ // tekst renderujemy w specjalny sposób, zamiast
|
{ // tekst renderujemy w specjalny sposób, zamiast
|
||||||
// submodeli z łańcucha Child
|
// submodeli z łańcucha Child
|
||||||
size_t i, j = pasText->size();
|
int i, j = pasText->size();
|
||||||
TSubModel *p;
|
TSubModel *p;
|
||||||
if (!smLetter)
|
if (!smLetter)
|
||||||
{ // jeśli nie ma tablicy, to ją stworzyć; miejsce
|
{ // jeśli nie ma tablicy, to ją stworzyć; miejsce
|
||||||
@@ -1288,12 +1288,12 @@ void TSubModel::RenderVBO()
|
|||||||
if (Global::fLuminance < fLight)
|
if (Global::fLuminance < fLight)
|
||||||
{
|
{
|
||||||
glMaterialfv(GL_FRONT, GL_EMISSION, f4Diffuse); // zeby swiecilo na kolorowo
|
glMaterialfv(GL_FRONT, GL_EMISSION, f4Diffuse); // zeby swiecilo na kolorowo
|
||||||
glDrawArrays(eType, (GLint)iVboPtr,
|
glDrawArrays(eType, iVboPtr,
|
||||||
iNumVerts); // narysuj naraz wszystkie trójkąty z VBO
|
iNumVerts); // narysuj naraz wszystkie trójkąty z VBO
|
||||||
glMaterialfv(GL_FRONT, GL_EMISSION, emm2);
|
glMaterialfv(GL_FRONT, GL_EMISSION, emm2);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
glDrawArrays(eType, (GLint)iVboPtr,
|
glDrawArrays(eType, iVboPtr,
|
||||||
iNumVerts); // narysuj naraz wszystkie trójkąty z VBO
|
iNumVerts); // narysuj naraz wszystkie trójkąty z VBO
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1351,15 +1351,15 @@ void TSubModel::RenderVBO()
|
|||||||
TextureManager.Bind(0); // nie teksturować
|
TextureManager.Bind(0); // nie teksturować
|
||||||
// glColor3f(f4Diffuse[0],f4Diffuse[1],f4Diffuse[2]);
|
// glColor3f(f4Diffuse[0],f4Diffuse[1],f4Diffuse[2]);
|
||||||
// glColorMaterial(GL_FRONT,GL_EMISSION);
|
// glColorMaterial(GL_FRONT,GL_EMISSION);
|
||||||
float color[4] = {(float)(f4Diffuse[0] * Distdimm), (float)(f4Diffuse[1] * Distdimm),
|
float color[4] = { (float)(f4Diffuse[0] * Distdimm), (float)(f4Diffuse[1] * Distdimm),
|
||||||
(float)(f4Diffuse[2] * Distdimm, 0)};
|
(float)(f4Diffuse[2] * Distdimm), 0 };
|
||||||
// glColor3f(f4Diffuse[0]*Distdimm,f4Diffuse[1]*Distdimm,f4Diffuse[2]*Distdimm);
|
// glColor3f(f4Diffuse[0]*Distdimm,f4Diffuse[1]*Distdimm,f4Diffuse[2]*Distdimm);
|
||||||
glColorMaterial(GL_FRONT, GL_EMISSION);
|
glColorMaterial(GL_FRONT, GL_EMISSION);
|
||||||
glDisable(GL_LIGHTING); // Tolaris-030603: bo mu punkty swiecace sie
|
glDisable(GL_LIGHTING); // Tolaris-030603: bo mu punkty swiecace sie
|
||||||
// blendowaly
|
// blendowaly
|
||||||
glColor3fv(color); // inaczej są białe
|
glColor3fv(color); // inaczej są białe
|
||||||
glMaterialfv(GL_FRONT, GL_EMISSION, color);
|
glMaterialfv(GL_FRONT, GL_EMISSION, color);
|
||||||
glDrawArrays(GL_POINTS, (GLint)iVboPtr, iNumVerts); // narysuj wierzchołek z
|
glDrawArrays(GL_POINTS, iVboPtr, iNumVerts); // narysuj wierzchołek z
|
||||||
// VBO
|
// VBO
|
||||||
glEnable(GL_LIGHTING);
|
glEnable(GL_LIGHTING);
|
||||||
glColorMaterial(GL_FRONT, GL_AMBIENT_AND_DIFFUSE); // co ma ustawiać glColor
|
glColorMaterial(GL_FRONT, GL_AMBIENT_AND_DIFFUSE); // co ma ustawiać glColor
|
||||||
@@ -1383,7 +1383,7 @@ void TSubModel::RenderVBO()
|
|||||||
// blendowaly
|
// blendowaly
|
||||||
// glMaterialfv(GL_FRONT,GL_EMISSION,f4Diffuse); //zeby swiecilo na
|
// glMaterialfv(GL_FRONT,GL_EMISSION,f4Diffuse); //zeby swiecilo na
|
||||||
// kolorowo
|
// kolorowo
|
||||||
glDrawArrays(GL_POINTS, (GLint)iVboPtr,
|
glDrawArrays(GL_POINTS, iVboPtr,
|
||||||
iNumVerts); // narysuj naraz wszystkie punkty z VBO
|
iNumVerts); // narysuj naraz wszystkie punkty z VBO
|
||||||
glEnable(GL_LIGHTING);
|
glEnable(GL_LIGHTING);
|
||||||
glColorMaterial(GL_FRONT, GL_AMBIENT_AND_DIFFUSE);
|
glColorMaterial(GL_FRONT, GL_AMBIENT_AND_DIFFUSE);
|
||||||
@@ -1459,12 +1459,12 @@ void TSubModel::RenderAlphaVBO()
|
|||||||
if (Global::fLuminance < fLight)
|
if (Global::fLuminance < fLight)
|
||||||
{
|
{
|
||||||
glMaterialfv(GL_FRONT, GL_EMISSION, f4Diffuse); // zeby swiecilo na kolorowo
|
glMaterialfv(GL_FRONT, GL_EMISSION, f4Diffuse); // zeby swiecilo na kolorowo
|
||||||
glDrawArrays(eType, (GLint)iVboPtr,
|
glDrawArrays(eType, iVboPtr,
|
||||||
iNumVerts); // narysuj naraz wszystkie trójkąty z VBO
|
iNumVerts); // narysuj naraz wszystkie trójkąty z VBO
|
||||||
glMaterialfv(GL_FRONT, GL_EMISSION, emm2);
|
glMaterialfv(GL_FRONT, GL_EMISSION, emm2);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
glDrawArrays(eType, (GLint)iVboPtr,
|
glDrawArrays(eType, iVboPtr,
|
||||||
iNumVerts); // narysuj naraz wszystkie trójkąty z VBO
|
iNumVerts); // narysuj naraz wszystkie trójkąty z VBO
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1485,7 +1485,7 @@ void TSubModel::RenderAlphaVBO()
|
|||||||
Next->RenderAlphaVBO();
|
Next->RenderAlphaVBO();
|
||||||
}; // RaRenderAlpha
|
}; // RaRenderAlpha
|
||||||
|
|
||||||
//---------------------------------------------------------------------------
|
//---------------------------------------------------------------------------
|
||||||
|
|
||||||
void TSubModel::RaArrayFill(CVertNormTex *Vert)
|
void TSubModel::RaArrayFill(CVertNormTex *Vert)
|
||||||
{ // wypełnianie tablic VBO
|
{ // wypełnianie tablic VBO
|
||||||
@@ -1541,7 +1541,7 @@ void TSubModel::Info()
|
|||||||
// pName=new char[token.length()+1]; //nie ma sensu skracać tabeli
|
// pName=new char[token.length()+1]; //nie ma sensu skracać tabeli
|
||||||
strcpy(pTexture, t.c_str());
|
strcpy(pTexture, t.c_str());
|
||||||
}
|
}
|
||||||
info->iTextureLen = (int)(t.size() + 1); // przygotowanie do zapisania, z zerem na końcu
|
info->iTextureLen = t.size() + 1; // przygotowanie do zapisania, z zerem na końcu
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@@ -1550,7 +1550,7 @@ void TSubModel::Info()
|
|||||||
if (pName)
|
if (pName)
|
||||||
{
|
{
|
||||||
info->iName = info->iTotalNames++; // przydzielenie numeru nazwy w pliku (od 0)
|
info->iName = info->iTotalNames++; // przydzielenie numeru nazwy w pliku (od 0)
|
||||||
info->iNameLen = (int)(strlen(pName) + 1); // z zerem na końcu
|
info->iNameLen = strlen(pName) + 1; // z zerem na końcu
|
||||||
}
|
}
|
||||||
++info->iCurrent; // przejście do kolejnego obiektu pomocniczego
|
++info->iCurrent; // przejście do kolejnego obiektu pomocniczego
|
||||||
if (Child)
|
if (Child)
|
||||||
@@ -1587,8 +1587,8 @@ void TSubModel::BinInit(TSubModel *s, float4x4 *m, float8 *v, TStringPack *t, TS
|
|||||||
bool dynamic)
|
bool dynamic)
|
||||||
{ // ustawienie wskaźników w submodelu
|
{ // ustawienie wskaźników w submodelu
|
||||||
iVisible = 1; // tymczasowo używane
|
iVisible = 1; // tymczasowo używane
|
||||||
Child = ((size_t)Child > 0) ? s + (size_t)Child : NULL; // zerowy nie może być potomnym
|
Child = ((int)Child > 0) ? s + (int)Child : NULL; // zerowy nie może być potomnym
|
||||||
Next = ((size_t)Next > 0) ? s + (size_t)Next : NULL; // zerowy nie może być następnym
|
Next = ((int)Next > 0) ? s + (int)Next : NULL; // zerowy nie może być następnym
|
||||||
fMatrix = ((iMatrix >= 0) && m) ? m + iMatrix : NULL;
|
fMatrix = ((iMatrix >= 0) && m) ? m + iMatrix : NULL;
|
||||||
// if (n&&(iName>=0)) asName=AnsiString(n->String(iName)); else asName="";
|
// if (n&&(iName>=0)) asName=AnsiString(n->String(iName)); else asName="";
|
||||||
if (n && (iName >= 0))
|
if (n && (iName >= 0))
|
||||||
@@ -1623,7 +1623,7 @@ void TSubModel::BinInit(TSubModel *s, float4x4 *m, float8 *v, TStringPack *t, TS
|
|||||||
std::string tex = pTexture;
|
std::string tex = pTexture;
|
||||||
if (tex.find_last_of("/\\") == std::string::npos)
|
if (tex.find_last_of("/\\") == std::string::npos)
|
||||||
tex.insert(0, Global::asCurrentTexturePath);
|
tex.insert(0, Global::asCurrentTexturePath);
|
||||||
TextureID = TextureManager.GetTextureId( tex, szTexturePath );
|
TextureID = TextureManager.GetTextureId(tex, szTexturePath);
|
||||||
// TexAlpha=TTexturesManager::GetAlpha(TextureID); //zmienna robocza
|
// TexAlpha=TTexturesManager::GetAlpha(TextureID); //zmienna robocza
|
||||||
// ustawienie cyklu przezroczyste/nieprzezroczyste zależnie od własności
|
// ustawienie cyklu przezroczyste/nieprzezroczyste zależnie od własności
|
||||||
// stałej tekstury
|
// stałej tekstury
|
||||||
@@ -1722,15 +1722,15 @@ TModel3d::TModel3d()
|
|||||||
iNumVerts = 0; // nie ma jeszcze wierzchołków
|
iNumVerts = 0; // nie ma jeszcze wierzchołków
|
||||||
};
|
};
|
||||||
/*
|
/*
|
||||||
TModel3d::TModel3d(char *FileName)
|
TModel3d::TModel3d(char *FileName)
|
||||||
{
|
{
|
||||||
// Root=NULL;
|
// Root=NULL;
|
||||||
// Materials=NULL;
|
// Materials=NULL;
|
||||||
// MaterialsCount=0;
|
// MaterialsCount=0;
|
||||||
Root=NULL;
|
Root=NULL;
|
||||||
SubModelsCount=0;
|
SubModelsCount=0;
|
||||||
iFlags=0;
|
iFlags=0;
|
||||||
LoadFromFile(FileName);
|
LoadFromFile(FileName);
|
||||||
};
|
};
|
||||||
*/
|
*/
|
||||||
TModel3d::~TModel3d()
|
TModel3d::~TModel3d()
|
||||||
@@ -1790,12 +1790,12 @@ TSubModel *TModel3d::GetFromName(const char *sName)
|
|||||||
/*
|
/*
|
||||||
TMaterial* TModel3d::GetMaterialFromName(char *sName)
|
TMaterial* TModel3d::GetMaterialFromName(char *sName)
|
||||||
{
|
{
|
||||||
AnsiString tmp=AnsiString(sName).Trim();
|
AnsiString tmp=AnsiString(sName).Trim();
|
||||||
for (int i=0; i<MaterialsCount; i++)
|
for (int i=0; i<MaterialsCount; i++)
|
||||||
if (strcmp(sName,Materials[i].Name.c_str())==0)
|
if (strcmp(sName,Materials[i].Name.c_str())==0)
|
||||||
// if (Trim()==Materials[i].Name.tmp)
|
// if (Trim()==Materials[i].Name.tmp)
|
||||||
return Materials+i;
|
return Materials+i;
|
||||||
return Materials;
|
return Materials;
|
||||||
}
|
}
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@@ -1836,12 +1836,6 @@ bool TModel3d::LoadFromFile(std::string const &FileName, bool dynamic)
|
|||||||
|
|
||||||
void TModel3d::LoadFromBinFile(std::string const &FileName, bool dynamic)
|
void TModel3d::LoadFromBinFile(std::string const &FileName, bool dynamic)
|
||||||
{ // wczytanie modelu z pliku binarnego
|
{ // wczytanie modelu z pliku binarnego
|
||||||
if (sizeof(TSubModel) != 256)
|
|
||||||
{
|
|
||||||
std::cout << "E3D files unsupported in current build" << std::endl;
|
|
||||||
exit(-1);
|
|
||||||
}
|
|
||||||
|
|
||||||
WriteLog("Loading - binary model: " + FileName);
|
WriteLog("Loading - binary model: " + FileName);
|
||||||
int i = 0, j, k, ch, size;
|
int i = 0, j, k, ch, size;
|
||||||
|
|
||||||
@@ -1850,7 +1844,7 @@ void TModel3d::LoadFromBinFile(std::string const &FileName, bool dynamic)
|
|||||||
iModel = new int[size]; // ten wskaźnik musi być w modelu, aby zwolnić pamięć
|
iModel = new int[size]; // ten wskaźnik musi być w modelu, aby zwolnić pamięć
|
||||||
fs->Read(iModel, fs->Size); // wczytanie pliku
|
fs->Read(iModel, fs->Size); // wczytanie pliku
|
||||||
delete fs;
|
delete fs;
|
||||||
*/ {
|
*/ {
|
||||||
std::ifstream file(FileName, std::ios::binary | std::ios::ate);
|
std::ifstream file(FileName, std::ios::binary | std::ios::ate);
|
||||||
file.unsetf(std::ios::skipws);
|
file.unsetf(std::ios::skipws);
|
||||||
size = file.tellg(); // ios::ate already positioned us at the end of the file
|
size = file.tellg(); // ios::ate already positioned us at the end of the file
|
||||||
@@ -2050,12 +2044,6 @@ void TModel3d::Init()
|
|||||||
|
|
||||||
void TModel3d::SaveToBinFile(char const *FileName)
|
void TModel3d::SaveToBinFile(char const *FileName)
|
||||||
{ // zapis modelu binarnego
|
{ // zapis modelu binarnego
|
||||||
if (sizeof(TSubModel) != 256)
|
|
||||||
{
|
|
||||||
std::cout << "E3D files unsupported in current build" << std::endl;
|
|
||||||
exit(-1);
|
|
||||||
}
|
|
||||||
|
|
||||||
WriteLog("Saving E3D binary model.");
|
WriteLog("Saving E3D binary model.");
|
||||||
int i, zero = 0;
|
int i, zero = 0;
|
||||||
TSubModelInfo *info = new TSubModelInfo[iSubModelsCount];
|
TSubModelInfo *info = new TSubModelInfo[iSubModelsCount];
|
||||||
@@ -2084,7 +2072,7 @@ void TModel3d::SaveToBinFile(char const *FileName)
|
|||||||
// AnsiString *asN=&roboczy->asName,*asT=&roboczy->asTexture;
|
// AnsiString *asN=&roboczy->asName,*asT=&roboczy->asTexture;
|
||||||
// roboczy->FirstInit(); //żeby delete nie usuwało czego nie powinno
|
// roboczy->FirstInit(); //żeby delete nie usuwało czego nie powinno
|
||||||
/* TFileStream *fs = new TFileStream(AnsiString(FileName), fmCreate);
|
/* TFileStream *fs = new TFileStream(AnsiString(FileName), fmCreate);
|
||||||
*/ {
|
*/ {
|
||||||
std::ofstream file(FileName, std::ios::binary);
|
std::ofstream file(FileName, std::ios::binary);
|
||||||
file.unsetf(std::ios::skipws);
|
file.unsetf(std::ios::skipws);
|
||||||
file.write("E3D0", 4); // kromka główna
|
file.write("E3D0", 4); // kromka główna
|
||||||
@@ -2159,30 +2147,30 @@ ReplacableSkinId,int iAlpha)
|
|||||||
{
|
{
|
||||||
// glColor3f(1.0f,1.0f,1.0f);
|
// glColor3f(1.0f,1.0f,1.0f);
|
||||||
// glColor3f(0.0f,0.0f,0.0f);
|
// glColor3f(0.0f,0.0f,0.0f);
|
||||||
glPushMatrix();
|
glPushMatrix();
|
||||||
|
|
||||||
glTranslated(pPosition.x,pPosition.y,pPosition.z);
|
glTranslated(pPosition.x,pPosition.y,pPosition.z);
|
||||||
if (fAngle!=0)
|
if (fAngle!=0)
|
||||||
glRotatef(fAngle,0,1,0);
|
glRotatef(fAngle,0,1,0);
|
||||||
/*
|
/*
|
||||||
matrix4x4 Identity;
|
matrix4x4 Identity;
|
||||||
Identity.Identity();
|
Identity.Identity();
|
||||||
|
|
||||||
matrix4x4 CurrentMatrix;
|
matrix4x4 CurrentMatrix;
|
||||||
glGetdoublev(GL_MODELVIEW_MATRIX,CurrentMatrix.getArray());
|
glGetdoublev(GL_MODELVIEW_MATRIX,CurrentMatrix.getArray());
|
||||||
vector3 pos=vector3(0,0,0);
|
vector3 pos=vector3(0,0,0);
|
||||||
pos=CurrentMatrix*pos;
|
pos=CurrentMatrix*pos;
|
||||||
fSquareDist=SquareMagnitude(pos);
|
fSquareDist=SquareMagnitude(pos);
|
||||||
* /
|
* /
|
||||||
fSquareDist=SquareMagnitude(pPosition-Global::GetCameraPosition());
|
fSquareDist=SquareMagnitude(pPosition-Global::GetCameraPosition());
|
||||||
|
|
||||||
#ifdef _DEBUG
|
#ifdef _DEBUG
|
||||||
if (Root)
|
if (Root)
|
||||||
Root->Render(ReplacableSkinId,iAlpha);
|
Root->Render(ReplacableSkinId,iAlpha);
|
||||||
#else
|
#else
|
||||||
Root->Render(ReplacableSkinId,iAlpha);
|
Root->Render(ReplacableSkinId,iAlpha);
|
||||||
#endif
|
#endif
|
||||||
glPopMatrix();
|
glPopMatrix();
|
||||||
};
|
};
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@@ -2214,34 +2202,34 @@ iAlpha)
|
|||||||
{
|
{
|
||||||
// glColor3f(1.0f,1.0f,1.0f);
|
// glColor3f(1.0f,1.0f,1.0f);
|
||||||
// glColor3f(0.0f,0.0f,0.0f);
|
// glColor3f(0.0f,0.0f,0.0f);
|
||||||
glPushMatrix(); //zapamiętanie matrycy przekształcenia
|
glPushMatrix(); //zapamiętanie matrycy przekształcenia
|
||||||
glTranslated(pPosition.x,pPosition.y,pPosition.z);
|
glTranslated(pPosition.x,pPosition.y,pPosition.z);
|
||||||
if (fAngle!=0)
|
if (fAngle!=0)
|
||||||
glRotatef(fAngle,0,1,0);
|
glRotatef(fAngle,0,1,0);
|
||||||
/*
|
/*
|
||||||
matrix4x4 Identity;
|
matrix4x4 Identity;
|
||||||
Identity.Identity();
|
Identity.Identity();
|
||||||
|
|
||||||
matrix4x4 CurrentMatrix;
|
matrix4x4 CurrentMatrix;
|
||||||
glGetdoublev(GL_MODELVIEW_MATRIX,CurrentMatrix.getArray());
|
glGetdoublev(GL_MODELVIEW_MATRIX,CurrentMatrix.getArray());
|
||||||
vector3 pos=vector3(0,0,0);
|
vector3 pos=vector3(0,0,0);
|
||||||
pos=CurrentMatrix*pos;
|
pos=CurrentMatrix*pos;
|
||||||
fSquareDist=SquareMagnitude(pos);
|
fSquareDist=SquareMagnitude(pos);
|
||||||
*/
|
*/
|
||||||
/*
|
/*
|
||||||
fSquareDist=SquareMagnitude(pPosition-Global::GetCameraPosition()); //zmienna
|
fSquareDist=SquareMagnitude(pPosition-Global::GetCameraPosition()); //zmienna
|
||||||
globalna!
|
globalna!
|
||||||
if (StartVBO())
|
if (StartVBO())
|
||||||
{//odwrócenie flag, aby wyłapać nieprzezroczyste
|
{//odwrócenie flag, aby wyłapać nieprzezroczyste
|
||||||
Root->ReplacableSet(ReplacableSkinId,iAlpha^0x0F0F000F);
|
Root->ReplacableSet(ReplacableSkinId,iAlpha^0x0F0F000F);
|
||||||
Root->RaRender();
|
Root->RaRender();
|
||||||
EndVBO();
|
EndVBO();
|
||||||
}
|
}
|
||||||
glPopMatrix(); //przywrócenie ustawień przekształcenia
|
glPopMatrix(); //przywrócenie ustawień przekształcenia
|
||||||
};
|
};
|
||||||
*/
|
*/
|
||||||
|
|
||||||
void TModel3d::RaRender( double fSquareDistance, texture_manager::size_type *ReplacableSkinId, int iAlpha )
|
void TModel3d::RaRender(double fSquareDistance, texture_manager::size_type *ReplacableSkinId, int iAlpha)
|
||||||
{ // renderowanie specjalne, np. kabiny
|
{ // renderowanie specjalne, np. kabiny
|
||||||
iAlpha ^= 0x0F0F000F; // odwrócenie flag tekstur, aby wyłapać nieprzezroczyste
|
iAlpha ^= 0x0F0F000F; // odwrócenie flag tekstur, aby wyłapać nieprzezroczyste
|
||||||
if (iAlpha & iFlags & 0x1F1F001F) // czy w ogóle jest co robić w tym cyklu?
|
if (iAlpha & iFlags & 0x1F1F001F) // czy w ogóle jest co robić w tym cyklu?
|
||||||
@@ -2276,18 +2264,18 @@ void TModel3d::RaRenderAlpha(vector3 pPosition,double fAngle,GLuint
|
|||||||
*ReplacableSkinId,int
|
*ReplacableSkinId,int
|
||||||
iAlpha)
|
iAlpha)
|
||||||
{
|
{
|
||||||
glPushMatrix();
|
glPushMatrix();
|
||||||
glTranslatef(pPosition.x,pPosition.y,pPosition.z);
|
glTranslatef(pPosition.x,pPosition.y,pPosition.z);
|
||||||
if (fAngle!=0)
|
if (fAngle!=0)
|
||||||
glRotatef(fAngle,0,1,0);
|
glRotatef(fAngle,0,1,0);
|
||||||
fSquareDist=SquareMagnitude(pPosition-Global::GetCameraPosition()); //zmienna
|
fSquareDist=SquareMagnitude(pPosition-Global::GetCameraPosition()); //zmienna
|
||||||
globalna!
|
globalna!
|
||||||
if (StartVBO())
|
if (StartVBO())
|
||||||
{Root->ReplacableSet(ReplacableSkinId,iAlpha);
|
{Root->ReplacableSet(ReplacableSkinId,iAlpha);
|
||||||
Root->RaRenderAlpha();
|
Root->RaRenderAlpha();
|
||||||
EndVBO();
|
EndVBO();
|
||||||
}
|
}
|
||||||
glPopMatrix();
|
glPopMatrix();
|
||||||
};
|
};
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@@ -2329,7 +2317,7 @@ void TModel3d::RenderAlpha(vector3 *vPosition, vector3 *vAngle, texture_manager:
|
|||||||
Root->RenderAlphaDL();
|
Root->RenderAlphaDL();
|
||||||
glPopMatrix();
|
glPopMatrix();
|
||||||
};
|
};
|
||||||
void TModel3d::RaRender( vector3 *vPosition, vector3 *vAngle, texture_manager::size_type *ReplacableSkinId, int iAlpha )
|
void TModel3d::RaRender(vector3 *vPosition, vector3 *vAngle, texture_manager::size_type *ReplacableSkinId, int iAlpha)
|
||||||
{ // nieprzezroczyste, VBO
|
{ // nieprzezroczyste, VBO
|
||||||
glPushMatrix();
|
glPushMatrix();
|
||||||
glTranslated(vPosition->x, vPosition->y, vPosition->z);
|
glTranslated(vPosition->x, vPosition->y, vPosition->z);
|
||||||
|
|||||||
117
Model3d.h
117
Model3d.h
@@ -36,7 +36,7 @@ class TStringPack
|
|||||||
//+0 - 4 bajty: typ kromki
|
//+0 - 4 bajty: typ kromki
|
||||||
//+4 - 4 bajty: długość łącznie z nagłówkiem
|
//+4 - 4 bajty: długość łącznie z nagłówkiem
|
||||||
//+8 - tabela indeksów
|
//+8 - tabela indeksów
|
||||||
public:
|
public:
|
||||||
char *String(int n);
|
char *String(int n);
|
||||||
char *StringAt(int n)
|
char *StringAt(int n)
|
||||||
{
|
{
|
||||||
@@ -59,8 +59,8 @@ class TStringPack
|
|||||||
|
|
||||||
class TMaterialColor
|
class TMaterialColor
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
TMaterialColor(){};
|
TMaterialColor() {};
|
||||||
TMaterialColor(char V)
|
TMaterialColor(char V)
|
||||||
{
|
{
|
||||||
r = g = b = V;
|
r = g = b = V;
|
||||||
@@ -79,51 +79,51 @@ class TMaterialColor
|
|||||||
/*
|
/*
|
||||||
struct TMaterial
|
struct TMaterial
|
||||||
{
|
{
|
||||||
int ID;
|
int ID;
|
||||||
AnsiString Name;
|
AnsiString Name;
|
||||||
//McZapkie-240702: lepiej uzywac wartosci float do opisu koloru bo funkcje opengl chyba tego na ogol
|
//McZapkie-240702: lepiej uzywac wartosci float do opisu koloru bo funkcje opengl chyba tego na ogol
|
||||||
uzywaja
|
uzywaja
|
||||||
float Ambient[4];
|
float Ambient[4];
|
||||||
float Diffuse[4];
|
float Diffuse[4];
|
||||||
float Specular[4];
|
float Specular[4];
|
||||||
float Transparency;
|
float Transparency;
|
||||||
GLuint TextureID;
|
GLuint TextureID;
|
||||||
};
|
};
|
||||||
*/
|
*/
|
||||||
/*
|
/*
|
||||||
struct THitBoxContainer
|
struct THitBoxContainer
|
||||||
{
|
{
|
||||||
TPlane Planes[6];
|
TPlane Planes[6];
|
||||||
int Index;
|
int Index;
|
||||||
inline void Reset() { Planes[0]= TPlane(vector3(0,0,0),0.0f); };
|
inline void Reset() { Planes[0]= TPlane(vector3(0,0,0),0.0f); };
|
||||||
inline bool Inside(vector3 Point)
|
inline bool Inside(vector3 Point)
|
||||||
{
|
{
|
||||||
bool Hit= true;
|
bool Hit= true;
|
||||||
|
|
||||||
if (Planes[0].Defined())
|
if (Planes[0].Defined())
|
||||||
for (int i=0; i<6; i++)
|
for (int i=0; i<6; i++)
|
||||||
{
|
{
|
||||||
if (Planes[i].GetSide(Point)>0)
|
if (Planes[i].GetSide(Point)>0)
|
||||||
{
|
{
|
||||||
Hit= false;
|
Hit= false;
|
||||||
break;
|
break;
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
else return(false);
|
else return(false);
|
||||||
return(Hit);
|
return(Hit);
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/* Ra: tego nie będziemy już używać, bo można wycisnąć więcej
|
/* Ra: tego nie będziemy już używać, bo można wycisnąć więcej
|
||||||
typedef enum
|
typedef enum
|
||||||
{smt_Unknown, //nieznany
|
{smt_Unknown, //nieznany
|
||||||
smt_Mesh, //siatka
|
smt_Mesh, //siatka
|
||||||
smt_Point,
|
smt_Point,
|
||||||
smt_FreeSpotLight, //punkt świetlny
|
smt_FreeSpotLight, //punkt świetlny
|
||||||
smt_Text, //generator tekstu
|
smt_Text, //generator tekstu
|
||||||
smt_Stars //wiele punktów świetlnych
|
smt_Stars //wiele punktów świetlnych
|
||||||
} TSubModelType;
|
} TSubModelType;
|
||||||
*/
|
*/
|
||||||
// Ra: specjalne typy submodeli, poza tym GL_TRIANGLES itp.
|
// Ra: specjalne typy submodeli, poza tym GL_TRIANGLES itp.
|
||||||
@@ -165,15 +165,15 @@ class TSubModel
|
|||||||
{ // klasa submodelu - pojedyncza siatka, punkt świetlny albo grupa punktów
|
{ // klasa submodelu - pojedyncza siatka, punkt świetlny albo grupa punktów
|
||||||
// Ra: ta klasa ma mieć wielkość 256 bajtów, aby pokryła się z formatem binarnym
|
// Ra: ta klasa ma mieć wielkość 256 bajtów, aby pokryła się z formatem binarnym
|
||||||
// Ra: nie przestawiać zmiennych, bo wczytują się z pliku binarnego!
|
// Ra: nie przestawiać zmiennych, bo wczytują się z pliku binarnego!
|
||||||
private:
|
private:
|
||||||
TSubModel *Next;
|
TSubModel *Next;
|
||||||
TSubModel *Child;
|
TSubModel *Child;
|
||||||
int eType; // Ra: modele binarne dają więcej możliwości niż mesh złożony z trójkątów
|
int eType; // Ra: modele binarne dają więcej możliwości niż mesh złożony z trójkątów
|
||||||
int iName; // numer łańcucha z nazwą submodelu, albo -1 gdy anonimowy
|
int iName; // numer łańcucha z nazwą submodelu, albo -1 gdy anonimowy
|
||||||
public: // chwilowo
|
public: // chwilowo
|
||||||
TAnimType b_Anim;
|
TAnimType b_Anim;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
int iFlags; // flagi informacyjne:
|
int iFlags; // flagi informacyjne:
|
||||||
// bit 0: =1 faza rysowania zależy od wymiennej tekstury 0
|
// bit 0: =1 faza rysowania zależy od wymiennej tekstury 0
|
||||||
// bit 1: =1 faza rysowania zależy od wymiennej tekstury 1
|
// bit 1: =1 faza rysowania zależy od wymiennej tekstury 1
|
||||||
@@ -194,7 +194,7 @@ class TSubModel
|
|||||||
int iMatrix; // w pliku binarnym jest numer matrycy
|
int iMatrix; // w pliku binarnym jest numer matrycy
|
||||||
};
|
};
|
||||||
int iNumVerts; // ilość wierzchołków (1 dla FreeSpotLight)
|
int iNumVerts; // ilość wierzchołków (1 dla FreeSpotLight)
|
||||||
size_t iVboPtr; // początek na liście wierzchołków albo indeksów
|
int iVboPtr; // początek na liście wierzchołków albo indeksów
|
||||||
int iTexture; // numer nazwy tekstury, -1 wymienna, 0 brak
|
int iTexture; // numer nazwy tekstury, -1 wymienna, 0 brak
|
||||||
float fVisible; // próg jasności światła do załączenia submodelu
|
float fVisible; // próg jasności światła do załączenia submodelu
|
||||||
float fLight; // próg jasności światła do zadziałania selfillum
|
float fLight; // próg jasności światła do zadziałania selfillum
|
||||||
@@ -228,17 +228,15 @@ class TSubModel
|
|||||||
float3 v_RotateAxis;
|
float3 v_RotateAxis;
|
||||||
float3 v_Angles;
|
float3 v_Angles;
|
||||||
|
|
||||||
public: // chwilowo
|
public: // chwilowo
|
||||||
float3 v_TransVector;
|
float3 v_TransVector;
|
||||||
float8 *Vertices; // roboczy wskaźnik - wczytanie T3D do VBO
|
float8 *Vertices; // roboczy wskaźnik - wczytanie T3D do VBO
|
||||||
size_t iAnimOwner; // roboczy numer egzemplarza, który ustawił animację
|
int iAnimOwner; // roboczy numer egzemplarza, który ustawił animację
|
||||||
TAnimType b_aAnim; // kody animacji oddzielnie, bo zerowane
|
TAnimType b_aAnim; // kody animacji oddzielnie, bo zerowane
|
||||||
public:
|
public:
|
||||||
float4x4 *mAnimMatrix; // macierz do animacji kwaternionowych (należy do AnimContainer)
|
float4x4 *mAnimMatrix; // macierz do animacji kwaternionowych (należy do AnimContainer)
|
||||||
|
char space[8]; // wolne miejsce na przyszłe zmienne (zmniejszyć w miarę potrzeby)
|
||||||
char space[8];
|
public:
|
||||||
|
|
||||||
public:
|
|
||||||
TSubModel **
|
TSubModel **
|
||||||
smLetter; // wskaźnik na tablicę submdeli do generoania tekstu (docelowo zapisać do E3D)
|
smLetter; // wskaźnik na tablicę submdeli do generoania tekstu (docelowo zapisać do E3D)
|
||||||
TSubModel *Parent; // nadrzędny, np. do wymnażania macierzy
|
TSubModel *Parent; // nadrzędny, np. do wymnażania macierzy
|
||||||
@@ -247,14 +245,14 @@ class TSubModel
|
|||||||
// AnsiString asName; //robocza nazwa
|
// AnsiString asName; //robocza nazwa
|
||||||
char *pTexture; // robocza nazwa tekstury do zapisania w pliku binarnym
|
char *pTexture; // robocza nazwa tekstury do zapisania w pliku binarnym
|
||||||
char *pName; // robocza nazwa
|
char *pName; // robocza nazwa
|
||||||
private:
|
private:
|
||||||
// int SeekFaceNormal(DWORD *Masks, int f,DWORD dwMask,vector3 *pt,GLVERTEX
|
// int SeekFaceNormal(DWORD *Masks, int f,DWORD dwMask,vector3 *pt,GLVERTEX
|
||||||
// *Vertices);
|
// *Vertices);
|
||||||
int SeekFaceNormal(unsigned int *Masks, int f, unsigned int dwMask, float3 *pt, float8 *Vertices);
|
int SeekFaceNormal(unsigned int *Masks, int f, unsigned int dwMask, float3 *pt, float8 *Vertices);
|
||||||
void RaAnimation(TAnimType a);
|
void RaAnimation(TAnimType a);
|
||||||
|
|
||||||
public:
|
public:
|
||||||
static size_t iInstance; // identyfikator egzemplarza, który aktualnie renderuje model
|
static int iInstance; // identyfikator egzemplarza, który aktualnie renderuje model
|
||||||
static texture_manager::size_type *ReplacableSkinId;
|
static texture_manager::size_type *ReplacableSkinId;
|
||||||
static int iAlpha; // maska bitowa dla danego przebiegu
|
static int iAlpha; // maska bitowa dla danego przebiegu
|
||||||
static double fSquareDist;
|
static double fSquareDist;
|
||||||
@@ -350,14 +348,14 @@ class TSubModel
|
|||||||
|
|
||||||
class TSubModelInfo
|
class TSubModelInfo
|
||||||
{ // klasa z informacjami o submodelach, do tworzenia pliku binarnego
|
{ // klasa z informacjami o submodelach, do tworzenia pliku binarnego
|
||||||
public:
|
public:
|
||||||
TSubModel *pSubModel; // wskaźnik na submodel
|
TSubModel *pSubModel; // wskaźnik na submodel
|
||||||
int iTransform; // numer transformu (-1 gdy brak)
|
int iTransform; // numer transformu (-1 gdy brak)
|
||||||
int iName; // numer nazwy
|
int iName; // numer nazwy
|
||||||
int iTexture; // numer tekstury
|
int iTexture; // numer tekstury
|
||||||
int iNameLen; // długość nazwy
|
int iNameLen; // długość nazwy
|
||||||
int iTextureLen; // długość tekstury
|
int iTextureLen; // długość tekstury
|
||||||
size_t iNext, iChild; // numer następnego i potomnego
|
int iNext, iChild; // numer następnego i potomnego
|
||||||
static int iTotalTransforms; // ilość transformów
|
static int iTotalTransforms; // ilość transformów
|
||||||
static int iTotalNames; // ilość nazw
|
static int iTotalNames; // ilość nazw
|
||||||
static int iTotalTextures; // ilość tekstur
|
static int iTotalTextures; // ilość tekstur
|
||||||
@@ -366,8 +364,7 @@ class TSubModelInfo
|
|||||||
TSubModelInfo()
|
TSubModelInfo()
|
||||||
{
|
{
|
||||||
pSubModel = NULL;
|
pSubModel = NULL;
|
||||||
iTransform = iName = iTexture = -1;
|
iTransform = iName = iTexture = iNext = iChild = -1; // nie ma
|
||||||
iNext = iChild = -1; // nie ma
|
|
||||||
iNameLen = iTextureLen = 0;
|
iNameLen = iTextureLen = 0;
|
||||||
}
|
}
|
||||||
void Reset()
|
void Reset()
|
||||||
@@ -375,26 +372,26 @@ class TSubModelInfo
|
|||||||
pTable = this; // ustawienie wskaźnika tabeli obiektów
|
pTable = this; // ustawienie wskaźnika tabeli obiektów
|
||||||
iTotalTransforms = iTotalNames = iTotalTextures = iCurrent = 0; // zerowanie liczników
|
iTotalTransforms = iTotalNames = iTotalTextures = iCurrent = 0; // zerowanie liczników
|
||||||
}
|
}
|
||||||
~TSubModelInfo(){};
|
~TSubModelInfo() {};
|
||||||
};
|
};
|
||||||
|
|
||||||
class TModel3d : public CMesh
|
class TModel3d : public CMesh
|
||||||
{
|
{
|
||||||
private:
|
private:
|
||||||
// TMaterial *Materials;
|
// TMaterial *Materials;
|
||||||
// int MaterialsCount; //Ra: nie używane
|
// int MaterialsCount; //Ra: nie używane
|
||||||
// bool TractionPart; //Ra: nie używane
|
// bool TractionPart; //Ra: nie używane
|
||||||
TSubModel *Root; // drzewo submodeli
|
TSubModel *Root; // drzewo submodeli
|
||||||
int iFlags; // Ra: czy submodele mają przezroczyste tekstury
|
int iFlags; // Ra: czy submodele mają przezroczyste tekstury
|
||||||
public: // Ra: tymczasowo
|
public: // Ra: tymczasowo
|
||||||
int iNumVerts; // ilość wierzchołków (gdy nie ma VBO, to m_nVertexCount=0)
|
int iNumVerts; // ilość wierzchołków (gdy nie ma VBO, to m_nVertexCount=0)
|
||||||
private:
|
private:
|
||||||
TStringPack Textures; // nazwy tekstur
|
TStringPack Textures; // nazwy tekstur
|
||||||
TStringPack Names; // nazwy submodeli
|
TStringPack Names; // nazwy submodeli
|
||||||
int *iModel; // zawartość pliku binarnego
|
int *iModel; // zawartość pliku binarnego
|
||||||
int iSubModelsCount; // Ra: używane do tworzenia binarnych
|
int iSubModelsCount; // Ra: używane do tworzenia binarnych
|
||||||
std::string asBinary; // nazwa pod którą zapisać model binarny
|
std::string asBinary; // nazwa pod którą zapisać model binarny
|
||||||
public:
|
public:
|
||||||
inline TSubModel * GetSMRoot()
|
inline TSubModel * GetSMRoot()
|
||||||
{
|
{
|
||||||
return (Root);
|
return (Root);
|
||||||
@@ -429,13 +426,13 @@ class TModel3d : public CMesh
|
|||||||
void RaRenderAlpha(vector3 pPosition, double fAngle = 0, texture_manager::size_type *ReplacableSkinId = NULL,
|
void RaRenderAlpha(vector3 pPosition, double fAngle = 0, texture_manager::size_type *ReplacableSkinId = NULL,
|
||||||
int iAlpha = 0x30300030);
|
int iAlpha = 0x30300030);
|
||||||
// trzy kąty obrotu
|
// trzy kąty obrotu
|
||||||
void Render( vector3 *vPosition, vector3 *vAngle, texture_manager::size_type *ReplacableSkinId = NULL,
|
void Render(vector3 *vPosition, vector3 *vAngle, texture_manager::size_type *ReplacableSkinId = NULL,
|
||||||
int iAlpha = 0x30300030);
|
int iAlpha = 0x30300030);
|
||||||
void RenderAlpha( vector3 *vPosition, vector3 *vAngle, texture_manager::size_type *ReplacableSkinId = NULL,
|
void RenderAlpha(vector3 *vPosition, vector3 *vAngle, texture_manager::size_type *ReplacableSkinId = NULL,
|
||||||
int iAlpha = 0x30300030);
|
int iAlpha = 0x30300030);
|
||||||
void RaRender( vector3 *vPosition, vector3 *vAngle, texture_manager::size_type *ReplacableSkinId = NULL,
|
void RaRender(vector3 *vPosition, vector3 *vAngle, texture_manager::size_type *ReplacableSkinId = NULL,
|
||||||
int iAlpha = 0x30300030);
|
int iAlpha = 0x30300030);
|
||||||
void RaRenderAlpha( vector3 *vPosition, vector3 *vAngle, texture_manager::size_type *ReplacableSkinId = NULL,
|
void RaRenderAlpha(vector3 *vPosition, vector3 *vAngle, texture_manager::size_type *ReplacableSkinId = NULL,
|
||||||
int iAlpha = 0x30300030);
|
int iAlpha = 0x30300030);
|
||||||
// inline int GetSubModelsCount() { return (SubModelsCount); };
|
// inline int GetSubModelsCount() { return (SubModelsCount); };
|
||||||
int Flags()
|
int Flags()
|
||||||
|
|||||||
Reference in New Issue
Block a user