Преглед на файлове

Simplified StaticMesh data storage

Thomas Buck преди 10 години
родител
ревизия
3b4ebd4a94
променени са 3 файла, в които са добавени 13 реда и са изтрити 52 реда
  1. 1
    0
      ChangeLog.md
  2. 1
    7
      include/StaticMesh.h
  3. 11
    45
      src/StaticMesh.cpp

+ 1
- 0
ChangeLog.md Целия файл

4
 
4
 
5
     [ 20140621 ]
5
     [ 20140621 ]
6
     * Created StaticMesh class replacing model_mesh_t stuff
6
     * Created StaticMesh class replacing model_mesh_t stuff
7
+    * Simplified StaticMesh’s data storage
7
 
8
 
8
     [ 20140617 ]
9
     [ 20140617 ]
9
     * Finally fixed SkeletalModel bugs introduced a month ago
10
     * Finally fixed SkeletalModel bugs introduced a month ago

+ 1
- 7
include/StaticMesh.h Целия файл

15
 class TexturedTriangle {
15
 class TexturedTriangle {
16
 public:
16
 public:
17
     TexturedTriangle(int i[3], vec_t s[6], int tex, unsigned short trans);
17
     TexturedTriangle(int i[3], vec_t s[6], int tex, unsigned short trans);
18
-    bool operator< (TexturedTriangle &t);
19
-
20
     void display(vec_t *vertices, vec_t *colors, vec_t *normals);
18
     void display(vec_t *vertices, vec_t *colors, vec_t *normals);
21
 
19
 
22
 private:
20
 private:
30
 public:
28
 public:
31
     StaticMesh(TombRaider &tr, unsigned int index);
29
     StaticMesh(TombRaider &tr, unsigned int index);
32
     ~StaticMesh();
30
     ~StaticMesh();
33
-
34
     void display();
31
     void display();
35
     vec_t getRadius();
32
     vec_t getRadius();
36
 
33
 
47
     vec_t *colors;
44
     vec_t *colors;
48
     vec_t *normals;
45
     vec_t *normals;
49
 
46
 
50
-    std::vector<TexturedTriangle *> texturedTriangles;
51
-    std::vector<TexturedTriangle *> coloredTriangles;
52
-    std::vector<TexturedTriangle *> texturedRectangles;
53
-    std::vector<TexturedTriangle *> coloredRectangles;
47
+    std::vector<TexturedTriangle *> triangles;
54
 };
48
 };
55
 
49
 
56
 #endif
50
 #endif

+ 11
- 45
src/StaticMesh.cpp Целия файл

28
     transparency = trans;
28
     transparency = trans;
29
 }
29
 }
30
 
30
 
31
-bool TexturedTriangle::operator< (TexturedTriangle &t) {
32
-    return texture < t.texture;
33
-}
34
-
35
 void TexturedTriangle::display(vec_t *vertices, vec_t *colors, vec_t *normals) {
31
 void TexturedTriangle::display(vec_t *vertices, vec_t *colors, vec_t *normals) {
36
     assert(vertices != NULL);
32
     assert(vertices != NULL);
37
 
33
 
167
         tr.getMeshTexturedTriangle(index, i,
163
         tr.getMeshTexturedTriangle(index, i,
168
                 vertexIndices, st,
164
                 vertexIndices, st,
169
                 &texture, &transparency);
165
                 &texture, &transparency);
170
-        texturedTriangles.push_back(
166
+        triangles.push_back(
171
                 new TexturedTriangle(vertexIndices, st, texture + getGame().getTextureStart(), transparency));
167
                 new TexturedTriangle(vertexIndices, st, texture + getGame().getTextureStart(), transparency));
172
     }
168
     }
173
 
169
 
190
 #endif
186
 #endif
191
         transparency = 0;
187
         transparency = 0;
192
 
188
 
193
-        coloredTriangles.push_back(
189
+        triangles.push_back(
194
                 new TexturedTriangle(vertexIndices, st, texture + getGame().getTextureStart(), transparency));
190
                 new TexturedTriangle(vertexIndices, st, texture + getGame().getTextureStart(), transparency));
195
     }
191
     }
196
 
192
 
200
         tr.getMeshTexturedRectangle(index, i,
196
         tr.getMeshTexturedRectangle(index, i,
201
                 vertexIndices, st,
197
                 vertexIndices, st,
202
                 &texture, &transparency);
198
                 &texture, &transparency);
203
-        texturedRectangles.push_back(
199
+        triangles.push_back(
204
                 new TexturedTriangle(vertexIndices, st, texture + getGame().getTextureStart(), transparency));
200
                 new TexturedTriangle(vertexIndices, st, texture + getGame().getTextureStart(), transparency));
205
-        texturedRectangles.push_back(
201
+        triangles.push_back(
206
                 new TexturedTriangle(vertexIndices + 3, st + 6, texture + getGame().getTextureStart(), transparency));
202
                 new TexturedTriangle(vertexIndices + 3, st + 6, texture + getGame().getTextureStart(), transparency));
207
     }
203
     }
208
 
204
 
226
 #endif
222
 #endif
227
         transparency = 0;
223
         transparency = 0;
228
 
224
 
229
-        coloredRectangles.push_back(
225
+        triangles.push_back(
230
                 new TexturedTriangle(vertexIndices, st, texture + getGame().getTextureStart(), transparency));
226
                 new TexturedTriangle(vertexIndices, st, texture + getGame().getTextureStart(), transparency));
231
-        coloredRectangles.push_back(
227
+        triangles.push_back(
232
                 new TexturedTriangle(vertexIndices + 3, st, texture + getGame().getTextureStart(), transparency));
228
                 new TexturedTriangle(vertexIndices + 3, st, texture + getGame().getTextureStart(), transparency));
233
     }
229
     }
234
-
235
-    // Sort faces by texture
236
-    std::sort(texturedTriangles.begin(), texturedTriangles.end());
237
-    std::sort(coloredTriangles.begin(), coloredTriangles.end());
238
-    std::sort(texturedRectangles.begin(), texturedRectangles.end());
239
-    std::sort(coloredRectangles.begin(), coloredRectangles.end());
240
 }
230
 }
241
 
231
 
242
 StaticMesh::~StaticMesh() {
232
 StaticMesh::~StaticMesh() {
243
-    while (!texturedTriangles.empty()) {
244
-        delete texturedTriangles.back();
245
-        texturedTriangles.pop_back();
246
-    }
247
-
248
-    while (!coloredTriangles.empty()) {
249
-        delete coloredTriangles.back();
250
-        coloredTriangles.pop_back();
251
-    }
252
-
253
-    while (!texturedRectangles.empty()) {
254
-        delete texturedRectangles.back();
255
-        texturedRectangles.pop_back();
256
-    }
257
-
258
-    while (!coloredRectangles.empty()) {
259
-        delete coloredRectangles.back();
260
-        coloredRectangles.pop_back();
233
+    while (!triangles.empty()) {
234
+        delete triangles.back();
235
+        triangles.pop_back();
261
     }
236
     }
262
 
237
 
263
     delete [] vertices;
238
     delete [] vertices;
280
         glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
255
         glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
281
         glBindTexture(GL_TEXTURE_2D, 1);  // White texture for colors
256
         glBindTexture(GL_TEXTURE_2D, 1);  // White texture for colors
282
 
257
 
283
-        for (unsigned int i = 0; i < coloredTriangles.size(); i++)
284
-            coloredTriangles.at(i)->display(vertices, colors, normals);
285
-
286
-        for (unsigned int i = 0; i < coloredRectangles.size(); i++)
287
-            coloredRectangles.at(i)->display(vertices, colors, normals);
288
-
289
-        for (unsigned int i = 0; i < texturedTriangles.size(); i++)
290
-            texturedTriangles.at(i)->display(vertices, colors, normals);
291
-
292
-        for (unsigned int i = 0; i < texturedRectangles.size(); i++)
293
-            texturedRectangles.at(i)->display(vertices, colors, normals);
258
+        for (unsigned int i = 0; i < triangles.size(); i++)
259
+            triangles.at(i)->display(vertices, colors, normals);
294
     }
260
     }
295
 }
261
 }
296
 
262
 

Loading…
Отказ
Запис