-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathC3DSObject.cpp
More file actions
70 lines (60 loc) · 1.73 KB
/
C3DSObject.cpp
File metadata and controls
70 lines (60 loc) · 1.73 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
#include "C3DSObject.h"
// óñòàíîâêà èìåíè
void C3DSObject::SetName(char* name)
{
this->name = string(name);
}
// âûâîä íà ýêðàí
void C3DSObject::Render(void)
{
// Âûáèðàåì áóôåðû VBO êàê òåêóùèå
glBindBufferARB(GL_ARRAY_BUFFER_ARB, Buffer);
// âûâîäèì ìîäåëü
// âêëþ÷àåì ìàññèâû
glEnableClientState(GL_VERTEX_ARRAY);
glEnableClientState(GL_NORMAL_ARRAY);
// óêàçûâàåì äàííûå äëÿ ìàññèâîâ
glVertexPointer(3,GL_FLOAT,0,0);
glNormalPointer(GL_FLOAT,0,reinterpret_cast<void *>(IndexCount*3*sizeof(*VertexList)));
// Ïðèìåíåíèå ìàòåðèàëîâ
for (vector<CVBOInfo>::iterator _it=IndexVBO.begin() ; _it != IndexVBO.end(); _it++ )
{
glBindBufferARB(GL_ELEMENT_ARRAY_BUFFER_ARB, _it->buffer);
_it->material->Apply(reinterpret_cast<void *>(IndexCount*3*2*sizeof(*VertexList)));
glDrawElements(GL_TRIANGLES,_it->bufSize,GL_UNSIGNED_INT,0);
}
glBindBufferARB(GL_ELEMENT_ARRAY_BUFFER_ARB, 0);
glDisableClientState(GL_VERTEX_ARRAY);
glDisableClientState(GL_NORMAL_ARRAY);
glClientActiveTexture(GL_TEXTURE0);
glDisableClientState(GL_TEXTURE_COORD_ARRAY);
glClientActiveTexture(GL_TEXTURE1);
glDisableClientState(GL_TEXTURE_COORD_ARRAY);
// Óñòàíàâëèâàåì òåêóùèå áóôåðû VBO = 0
glBindBufferARB(GL_ARRAY_BUFFER_ARB, 0);
}
C3DSObject::C3DSObject()
{
Buffer=0;
VertexList = NULL;
IndexList = NULL;
TexVertList = NULL;
VertexCount = 0;
IndexCount = 0;
wasDrawn = true;
isTransparent = false;
}
C3DSObject::~C3DSObject(void)
{
// Îñâîáîæäåíèå áóôåðîâ VBO
if (Buffer!=0 && UseDestructors)
{
glDeleteBuffersARB(1, &Buffer);
for (vector<CVBOInfo>::iterator _it=IndexVBO.begin() ; _it != IndexVBO.end(); _it++ )
glDeleteBuffersARB(1, &(_it->buffer));
delete[] IndexList;
delete[] VertexList;
delete[] TexVertList;
delete occluder;
}
}