~ubuntu-branches/debian/sid/astromenace/sid

« back to all changes in this revision

Viewing changes to AstroMenaceSource/Core/Model3D/Model3D.h

  • Committer: Package Import Robot
  • Author(s): Boris Pek
  • Date: 2013-04-09 02:04:25 UTC
  • Revision ID: package-import@ubuntu.com-20130409020425-a7fl9xk4diamw6di
Tags: upstream-1.3.1+repack
Import upstream version 1.3.1+repack

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/************************************************************************************
 
2
 
 
3
        AstroMenace (Hardcore 3D space shooter with spaceship upgrade possibilities)
 
4
        Copyright © 2006-2012 Michael Kurinnoy, Viewizard
 
5
 
 
6
 
 
7
        AstroMenace is free software: you can redistribute it and/or modify
 
8
        it under the terms of the GNU General Public License as published by
 
9
        the Free Software Foundation, either version 3 of the License, or
 
10
        (at your option) any later version.
 
11
 
 
12
        AstroMenace is distributed in the hope that it will be useful,
 
13
        but WITHOUT ANY WARRANTY; without even the implied warranty of
 
14
        MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 
15
        GNU General Public License for more details.
 
16
 
 
17
        You should have received a copy of the GNU General Public License
 
18
        along with AstroMenace. If not, see <http://www.gnu.org/licenses/>.
 
19
 
 
20
 
 
21
        Web Site: http://www.viewizard.com/
 
22
        Project: http://sourceforge.net/projects/openastromenace/
 
23
        E-mail: viewizard@viewizard.com
 
24
 
 
25
*************************************************************************************/
 
26
 
 
27
 
 
28
#ifndef MODEL3D_H
 
29
#define MODEL3D_H
 
30
 
 
31
#include "../Base.h"
 
32
#include "../Math/Math.h"
 
33
#include "../VirtualFileSystem/VFS.h"
 
34
 
 
35
 
 
36
 
 
37
 
 
38
 
 
39
 
 
40
//-----------------------------------------------------------------------------
 
41
// структура блока объектов
 
42
//-----------------------------------------------------------------------------
 
43
struct eObjectBlock
 
44
{
 
45
        eObjectBlock(void);
 
46
        virtual ~eObjectBlock(void);
 
47
 
 
48
        int     VertexFormat;   // формат вертексов данных
 
49
        int     VertexStride;   // отступ в (байтах*4, т.е. во float или DWORD) до начала данных следующей точки
 
50
        int VertexCount;        // кол-во прорисовываемых вертексов (кол-во обрабатываемых индексов)
 
51
        BYTE DrawType;          // тип прорисовки, 0- нормальный, 1-blend т.е. с прозрачностью
 
52
 
 
53
        // начальный номер индекса в буфере (в случае использования глобальных буферов)
 
54
        // если индексных данных нет - номер вертекса
 
55
        unsigned int RangeStart;
 
56
 
 
57
 
 
58
        // шейдер (зарезервированные переменные для работы внешнего блока кода)
 
59
        int                             ShaderType;
 
60
        float                   ShaderData[16];
 
61
 
 
62
 
 
63
        // положение локальной системы координат
 
64
        VECTOR3D Location;
 
65
        // поворот модели в локальной системе координат
 
66
        VECTOR3D Rotation;
 
67
 
 
68
        // анимация геометрией (вращение)
 
69
        bool NeedGeometryAnimation;
 
70
        VECTOR3D GeometryAnimation;
 
71
        // анимация текстуры (тайловая анимация)
 
72
        bool NeedTextureAnimation;
 
73
        VECTOR3D TextureAnimation;
 
74
 
 
75
        bool                    NeedDestroyDataInObjectBlock; // если данные были не общие, а созданные для этого ObjectBlock, нужно их удалить в деструкторе
 
76
        // вертексный буфер
 
77
        float                   *VertexBuffer;          // указатель на структуру данных
 
78
        unsigned int    *VBO;                           // номер VBO
 
79
        // индексный буфер
 
80
        unsigned int    *IndexBuffer;           // указатель на структуру данных
 
81
        unsigned int    *IBO;                           // номер IBO
 
82
        // VAO
 
83
        unsigned int    *VAO;                           // номер VAO
 
84
        // указатель на буфер, с мешем приведенным к опеределнному размеру треугольников (для взрывов)
 
85
        // для него никогда не делаем VBO, буфер исключительно для работы внутри программы
 
86
        float                   *VertexBufferLimitedBySizeTriangles;
 
87
        int                     VertexBufferLimitedBySizeTrianglesCount; // кол-во вертексов в нем
 
88
};
 
89
 
 
90
 
 
91
 
 
92
 
 
93
//-----------------------------------------------------------------------------
 
94
// Класс eModel3D
 
95
//-----------------------------------------------------------------------------
 
96
class eModel3D
 
97
{
 
98
public:
 
99
 
 
100
        eModel3D(void);
 
101
        virtual ~eModel3D(void);
 
102
 
 
103
        // имя объекта (путь к файлу)
 
104
        char                    *Name;
 
105
 
 
106
        // лист объектов, из которых состоит модель
 
107
        eObjectBlock    *DrawObjectList;
 
108
        int                             DrawObjectCount;
 
109
        unsigned int    GlobalVertexCount;      // фактическое кол-во вертексов в буфере
 
110
        unsigned int    GlobalIndexCount;       // фактическое кол-во индексов в буфере
 
111
 
 
112
 
 
113
        // читаем-пишем форматы 3д моделей
 
114
        bool ReadVW3D(const char *FileName);
 
115
        bool WriteVW3D(const char *FileName);
 
116
 
 
117
        // пересоздаем вертексный буфер, добавляем тангент и бинормаль в 2 и 3 текстурные координаты
 
118
        void CreateTangentAndBinormal();
 
119
        // создание вертекс и индекс буферов для каждого блока модели
 
120
        void CreateObjectsBuffers();
 
121
        // создание всех поддерживаемых буферов (VAO, VBO, IBO)
 
122
        void CreateHardwareBuffers();
 
123
        // создаем буфер для разрушаемых объектов с ограничением по размеру треугольников
 
124
        void CreateVertexBufferLimitedBySizeTriangles(float TriangleSizeLimit);
 
125
 
 
126
 
 
127
        // буферы
 
128
        float                   *GlobalVertexBuffer;
 
129
        unsigned int    *GlobalVBO;
 
130
        unsigned int    *GlobalIndexBuffer;
 
131
        unsigned int    *GlobalIBO;
 
132
        unsigned int    *GlobalVAO;
 
133
 
 
134
        // указатели на цепь моделей
 
135
        eModel3D *Next;
 
136
        eModel3D *Prev;
 
137
};
 
138
 
 
139
 
 
140
 
 
141
 
 
142
 
 
143
 
 
144
//-----------------------------------------------------------------------------
 
145
// Менеджер eObject3D
 
146
//-----------------------------------------------------------------------------
 
147
 
 
148
// Предварительная загрузка геометрии модели, если нужно создания доп. буфера с треугольниками не более TriangleSizeLimit
 
149
// если не нужно, передаем отрицательное значение
 
150
eModel3D *vw_LoadModel3D(const char *FileName, float TriangleSizeLimit, bool NeedTangentAndBinormal);
 
151
// Присоеденяем Model3D к списку
 
152
void vw_AttachModel3D(eModel3D * NewModel3D);
 
153
// Удаляем Model3D из списка
 
154
void vw_DetachModel3D(eModel3D * OldModel3D);
 
155
// Удаляем все Model3D в списке
 
156
void vw_ReleaseAllModel3D();
 
157
 
 
158
 
 
159
 
 
160
 
 
161
 
 
162
 
 
163
#endif // MODEL3D_H