mirror of
https://github.com/MaSzyna-EU07/maszyna.git
synced 2026-07-21 14:49:19 +02:00
build 170617. frustum based ground sector culling, fully view range based draw range limit, support for line width parameter for lines
This commit is contained in:
110
Model3d.h
110
Model3d.h
@@ -7,8 +7,7 @@ obtain one at
|
||||
http://mozilla.org/MPL/2.0/.
|
||||
*/
|
||||
|
||||
#ifndef Model3dH
|
||||
#define Model3dH
|
||||
#pragma once
|
||||
|
||||
#include "GL/glew.h"
|
||||
#include "Parser.h"
|
||||
@@ -51,8 +50,6 @@ enum TAnimType // rodzaj animacji
|
||||
at_Undefined = 0x800000FF // animacja chwilowo nieokreślona
|
||||
};
|
||||
|
||||
class TModel3d;
|
||||
|
||||
class TSubModel
|
||||
{ // klasa submodelu - pojedyncza siatka, punkt świetlny albo grupa punktów
|
||||
//m7todo: zrobić normalną serializację
|
||||
@@ -61,15 +58,16 @@ class TSubModel
|
||||
friend class TModel3d; // temporary workaround. TODO: clean up class content/hierarchy
|
||||
|
||||
private:
|
||||
int iNext;
|
||||
int iChild;
|
||||
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 iNext{ NULL };
|
||||
int iChild{ NULL };
|
||||
int eType{ TP_ROTATOR }; // Ra: modele binarne dają więcej możliwości niż mesh złożony z trójkątów
|
||||
int iName{ -1 }; // numer łańcucha z nazwą submodelu, albo -1 gdy anonimowy
|
||||
public: // chwilowo
|
||||
TAnimType b_Anim;
|
||||
TAnimType b_Anim{ at_None };
|
||||
|
||||
private:
|
||||
int iFlags; // flagi informacyjne:
|
||||
int iFlags{ 0x0200 }; // bit 9=1: submodel został utworzony a nie ustawiony na wczytany plik
|
||||
// flagi informacyjne:
|
||||
// bit 0: =1 faza rysowania zależy od wymiennej tekstury 0
|
||||
// bit 1: =1 faza rysowania zależy od wymiennej tekstury 1
|
||||
// bit 2: =1 faza rysowania zależy od wymiennej tekstury 2
|
||||
@@ -84,63 +82,62 @@ private:
|
||||
// bit 15: =1 wymagane przechowanie macierzy (transform niejedynkowy)
|
||||
union
|
||||
{ // transform, nie każdy submodel musi mieć
|
||||
float4x4 *fMatrix; // pojedyncza precyzja wystarcza
|
||||
float4x4 *fMatrix = nullptr; // pojedyncza precyzja wystarcza
|
||||
int iMatrix; // w pliku binarnym jest numer matrycy
|
||||
};
|
||||
int iNumVerts; // ilość wierzchołków (1 dla FreeSpotLight)
|
||||
int iNumVerts{ -1 }; // ilość wierzchołków (1 dla FreeSpotLight)
|
||||
int tVboPtr; // początek na liście wierzchołków albo indeksów
|
||||
int iTexture; // numer nazwy tekstury, -1 wymienna, 0 brak
|
||||
float fVisible; // próg jasności światła do załączenia submodelu
|
||||
float fLight; // próg jasności światła do zadziałania selfillum
|
||||
int iTexture{ 0 }; // numer nazwy tekstury, -1 wymienna, 0 brak
|
||||
float fVisible{ 0.0f }; // próg jasności światła do załączenia submodelu
|
||||
float fLight{ -1.0f }; // próg jasności światła do zadziałania selfillum
|
||||
glm::vec4
|
||||
f4Ambient,
|
||||
f4Diffuse,
|
||||
f4Specular,
|
||||
f4Emision;
|
||||
float fWireSize; // nie używane, ale wczytywane
|
||||
float fSquareMaxDist;
|
||||
float fSquareMinDist;
|
||||
f4Ambient{ 1.0f,1.0f,1.0f,1.0f },
|
||||
f4Diffuse{ 1.0f,1.0f,1.0f,1.0f },
|
||||
f4Specular{ 0.0f,0.0f,0.0f,1.0f },
|
||||
f4Emision{ 1.0f,1.0f,1.0f,1.0f };
|
||||
float fWireSize{ 0.0f }; // nie używane, ale wczytywane
|
||||
float fSquareMaxDist{ 10000.0f * 10000.0f };
|
||||
float fSquareMinDist{ 0.0f };
|
||||
// McZapkie-050702: parametry dla swiatla:
|
||||
float fNearAttenStart;
|
||||
float fNearAttenEnd;
|
||||
bool bUseNearAtten; // te 3 zmienne okreslaja rysowanie aureoli wokol zrodla swiatla
|
||||
int iFarAttenDecay; // ta zmienna okresla typ zaniku natezenia swiatla (0:brak, 1,2: potega 1/R)
|
||||
float fFarDecayRadius; // normalizacja j.w.
|
||||
float fCosFalloffAngle; // cosinus kąta stożka pod którym widać światło
|
||||
float fCosHotspotAngle; // cosinus kąta stożka pod którym widać aureolę i zwiększone natężenie światła
|
||||
float fCosViewAngle; // cos kata pod jakim sie teraz patrzy
|
||||
float fNearAttenStart{ 40.0f };
|
||||
float fNearAttenEnd{ 80.0f };
|
||||
bool bUseNearAtten{ false }; // te 3 zmienne okreslaja rysowanie aureoli wokol zrodla swiatla
|
||||
int iFarAttenDecay{ 0 }; // ta zmienna okresla typ zaniku natezenia swiatla (0:brak, 1,2: potega 1/R)
|
||||
float fFarDecayRadius{ 100.0f }; // normalizacja j.w.
|
||||
float fCosFalloffAngle{ 0.5f }; // cosinus kąta stożka pod którym widać światło
|
||||
float fCosHotspotAngle{ 0.3f }; // cosinus kąta stożka pod którym widać aureolę i zwiększone natężenie światła
|
||||
float fCosViewAngle{ 0.0f }; // cos kata pod jakim sie teraz patrzy
|
||||
|
||||
TSubModel *Next;
|
||||
TSubModel *Child;
|
||||
TSubModel *Next{ nullptr };
|
||||
TSubModel *Child{ nullptr };
|
||||
/*
|
||||
intptr_t iVboPtr;
|
||||
*/
|
||||
geometry_handle m_geometry; // geometry of the submodel
|
||||
texture_handle TextureID; // numer tekstury, -1 wymienna, 0 brak
|
||||
bool bWire; // nie używane, ale wczytywane
|
||||
geometry_handle m_geometry{ NULL, NULL }; // geometry of the submodel
|
||||
texture_handle TextureID{ NULL }; // numer tekstury, -1 wymienna, 0 brak
|
||||
bool bWire{ false }; // nie używane, ale wczytywane
|
||||
/*
|
||||
GLuint uiDisplayList; // roboczy numer listy wyświetlania
|
||||
*/
|
||||
float Opacity; // nie używane, ale wczytywane //m7todo: wywalić to
|
||||
float f_Angle;
|
||||
float3 v_RotateAxis;
|
||||
float3 v_Angles;
|
||||
float Opacity{ 1.0f };
|
||||
float f_Angle{ 0.0f };
|
||||
float3 v_RotateAxis{ 0.0f, 0.0f, 0.0f };
|
||||
float3 v_Angles { 0.0f, 0.0f, 0.0f };
|
||||
|
||||
public: // chwilowo
|
||||
float3 v_TransVector;
|
||||
float3 v_TransVector{ 0.0f, 0.0f, 0.0f };
|
||||
/*
|
||||
basic_vertex *Vertices; // roboczy wskaźnik - wczytanie T3D do VBO
|
||||
*/
|
||||
vertex_array Vertices;
|
||||
size_t iAnimOwner; // roboczy numer egzemplarza, który ustawił animację
|
||||
TAnimType b_aAnim; // kody animacji oddzielnie, bo zerowane
|
||||
size_t iAnimOwner{ NULL }; // roboczy numer egzemplarza, który ustawił animację
|
||||
TAnimType b_aAnim{ at_None }; // kody animacji oddzielnie, bo zerowane
|
||||
public:
|
||||
float4x4 *mAnimMatrix; // macierz do animacji kwaternionowych (należy do AnimContainer)
|
||||
float4x4 *mAnimMatrix{ nullptr }; // macierz do animacji kwaternionowych (należy do AnimContainer)
|
||||
public:
|
||||
TSubModel **
|
||||
smLetter; // wskaźnik na tablicę submdeli do generoania tekstu (docelowo zapisać do E3D)
|
||||
TSubModel *Parent; // nadrzędny, np. do wymnażania macierzy
|
||||
int iVisible; // roboczy stan widoczności
|
||||
TSubModel **smLetter{ nullptr }; // wskaźnik na tablicę submdeli do generoania tekstu (docelowo zapisać do E3D)
|
||||
TSubModel *Parent{ nullptr }; // nadrzędny, np. do wymnażania macierzy
|
||||
int iVisible{ 1 }; // roboczy stan widoczności
|
||||
std::string pTexture; // robocza nazwa tekstury do zapisania w pliku binarnym
|
||||
std::string pName; // robocza nazwa
|
||||
private:
|
||||
@@ -154,9 +151,7 @@ public:
|
||||
static double fSquareDist;
|
||||
static TModel3d *pRoot;
|
||||
static std::string *pasText; // tekst dla wyświetlacza (!!!! do przemyślenia)
|
||||
TSubModel();
|
||||
~TSubModel();
|
||||
void FirstInit();
|
||||
int Load(cParser &Parser, TModel3d *Model, /*int Pos,*/ bool dynamic);
|
||||
void ChildAdd(TSubModel *SubModel);
|
||||
void NextAdd(TSubModel *SubModel);
|
||||
@@ -176,10 +171,8 @@ public:
|
||||
TSubModel * GetFromName(char const *search, bool i = true);
|
||||
inline float4x4 * GetMatrix() { return fMatrix; };
|
||||
inline void Hide() { iVisible = 0; };
|
||||
/*
|
||||
void RaArrayFill(basic_vertex *Vert);
|
||||
*/
|
||||
void create_geometry( geometrybank_handle const &Bank );
|
||||
|
||||
void create_geometry( std::size_t &Dataoffset, geometrybank_handle const &Bank );
|
||||
int FlagsCheck();
|
||||
void WillBeAnimated()
|
||||
{
|
||||
@@ -187,9 +180,6 @@ public:
|
||||
iFlags |= 0x4000;
|
||||
};
|
||||
void InitialRotate(bool doit);
|
||||
#ifdef EU07_USE_OLD_DRAW_CODE
|
||||
void DisplayLists();
|
||||
#endif
|
||||
void BinInit(TSubModel *s, float4x4 *m, std::vector<std::string> *t, std::vector<std::string> *n, bool dynamic);
|
||||
void ReplacableSet(texture_handle const *r, int a)
|
||||
{
|
||||
@@ -219,11 +209,13 @@ public:
|
||||
void AdjustDist();
|
||||
|
||||
void deserialize(std::istream&);
|
||||
void TSubModel::serialize(std::ostream&,
|
||||
void serialize(std::ostream&,
|
||||
std::vector<TSubModel*>&,
|
||||
std::vector<std::string>&,
|
||||
std::vector<std::string>&,
|
||||
std::vector<float4x4>&);
|
||||
void serialize_geometry( std::ostream &Output );
|
||||
|
||||
};
|
||||
|
||||
class TModel3d : public CMesh
|
||||
@@ -259,11 +251,7 @@ public:
|
||||
std::string NameGet() { return m_filename; };
|
||||
int TerrainCount();
|
||||
TSubModel * TerrainSquare(int n);
|
||||
#ifdef EU07_USE_OLD_RENDERCODE
|
||||
void TerrainRenderVBO(int n);
|
||||
#endif
|
||||
void deserialize(std::istream &s, size_t size, bool dynamic);
|
||||
};
|
||||
|
||||
//---------------------------------------------------------------------------
|
||||
#endif
|
||||
|
||||
Reference in New Issue
Block a user