mirror of
https://github.com/MaSzyna-EU07/maszyna.git
synced 2026-07-22 09:19:18 +02:00
coś było źle
This commit is contained in:
50
Model3d.cpp
50
Model3d.cpp
@@ -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];
|
||||||
@@ -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:"))
|
||||||
@@ -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
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1352,14 +1352,14 @@ void TSubModel::RenderVBO()
|
|||||||
// 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
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -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))
|
||||||
@@ -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;
|
||||||
|
|
||||||
@@ -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];
|
||||||
|
|||||||
15
Model3d.h
15
Model3d.h
@@ -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
|
||||||
@@ -231,13 +231,11 @@ class TSubModel
|
|||||||
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)
|
||||||
@@ -254,7 +252,7 @@ class TSubModel
|
|||||||
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;
|
||||||
@@ -357,7 +355,7 @@ class TSubModelInfo
|
|||||||
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()
|
||||||
|
|||||||
Reference in New Issue
Block a user