Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "StdAfx.h"
- #include "GLRenderer.h"
- #include "GL\gl.h"
- #include "GL\glu.h"
- #include "GL\glaux.h"
- #include "GL\glut.h"
- #include "glext.h"
- #include "wglext.h"
- #pragma comment(lib, "GL\\glut32.lib")
- #pragma comment(lib, "OpenGL32.lib")
- PFNGLGENBUFFERSPROC glGenBuffers = NULL;
- PFNGLBINDBUFFERPROC glBindBuffer = NULL;
- PFNGLBUFFERDATAPROC glBufferData = NULL;
- PFNGLDELETEBUFFERSPROC glDeleteBuffers = NULL;
- CGLRenderer::CGLRenderer(void)
- {
- m_alpha = -30.0;
- m_beta = 35.0;
- m_posX = 7.5;
- m_posY = 0.0;
- m_posZ = -70.0;
- m_lampAngleX = 0.0;
- m_lampAngleY = 50.0;
- m_lampHeadAngleZ = -90.0;
- }
- CGLRenderer::~CGLRenderer(void)
- {
- }
- bool CGLRenderer::CreateGLContext(CDC* pDC)
- {
- PIXELFORMATDESCRIPTOR pfd ;
- memset(&pfd, 0, sizeof(PIXELFORMATDESCRIPTOR));
- pfd.nSize = sizeof(PIXELFORMATDESCRIPTOR);
- pfd.nVersion = 1;
- pfd.dwFlags = PFD_DOUBLEBUFFER | PFD_SUPPORT_OPENGL | PFD_DRAW_TO_WINDOW;
- pfd.iPixelType = PFD_TYPE_RGBA;
- pfd.cColorBits = 32;
- pfd.cDepthBits = 32;
- pfd.iLayerType = PFD_MAIN_PLANE;
- int nPixelFormat = ChoosePixelFormat(pDC->m_hDC, &pfd);
- if (nPixelFormat == 0) return false;
- BOOL bResult = SetPixelFormat (pDC->m_hDC, nPixelFormat, &pfd);
- if (!bResult) return false;
- m_hrc = wglCreateContext(pDC->m_hDC);
- if (!m_hrc) return false;
- return true;
- }
- void CGLRenderer::PrepareScene(CDC *pDC)
- {
- wglMakeCurrent(pDC->m_hDC, m_hrc);
- //---------------------------------
- glClearColor(1.0, 1.0, 1.0, 1.0);
- // Ukljucivanje Z-bafera
- glEnable(GL_DEPTH_TEST);
- glCullFace(GL_BACK);
- glEnable(GL_CULL_FACE);
- //Antialiasing kao
- //glEnable(GL_POLYGON_SMOOTH);
- //glHint(GL_LINE_SMOOTH_HINT, GL_NICEST);
- //Osvetljenje
- SetLightModel();
- SetRedMetal();
- SetWallMaterial();
- SetFloorMaterial();
- SetWoodMaterial();
- SetBulbMaterial();
- //Teksture
- PrepareTextures();
- //---------------------------------
- wglMakeCurrent(NULL, NULL);
- }
- void CGLRenderer::DrawScene(CDC *pDC)
- {
- wglMakeCurrent(pDC->m_hDC, m_hrc);
- //---------------------------------
- glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
- glLoadIdentity();
- glPushMatrix();
- //gluLookAt(-m_posX, -m_posY, -m_posZ, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0);
- glTranslated(m_posX, m_posY, m_posZ);
- glRotated(m_beta, 1.0, 0.0, 0.0);
- glRotated(m_alpha, 0.0, 1.0, 0.0);
- DrawLamp(10.5, 10.5, 10.0);
- glEnable(GL_TEXTURE_2D);
- DrawWalls(100, 3);
- DrawTable(15.0, 0.0, 10.0, 15);
- DrawEllipse(10.0, 5.0, 15.0, 10.51, 10.0);
- DrawCola(10, 15, 20, 3, 9, 360);
- glDisable(GL_TEXTURE_2D);
- glPopMatrix();
- glFlush();
- SwapBuffers(pDC->m_hDC);
- //---------------------------------
- wglMakeCurrent(NULL, NULL);
- }
- void CGLRenderer::Reshape(CDC *pDC, int w, int h)
- {
- wglMakeCurrent(pDC->m_hDC, m_hrc);
- //---------------------------------
- glViewport(0, 0, (GLsizei)w, (GLsizei)h);
- glMatrixMode(GL_PROJECTION);
- glLoadIdentity();
- gluPerspective(40, (double)w / (double)h, 0.1, 2000);
- glMatrixMode(GL_MODELVIEW);
- //---------------------------------
- wglMakeCurrent(NULL, NULL);
- }
- void CGLRenderer::DestroyScene(CDC *pDC)
- {
- wglMakeCurrent(pDC->m_hDC, m_hrc);
- // ...
- m_woodTex.Release();
- m_floorTex.Release();
- m_wallTex.Release();
- m_colaTex.Release();
- wglMakeCurrent(NULL,NULL);
- if(m_hrc)
- {
- wglDeleteContext(m_hrc);
- m_hrc = NULL;
- }
- }
- void CGLRenderer::DrawBox(double a, double b, double c, int rx, int rz)
- {
- SetBoxBuf(a, b, c, rx, rz);
- DrawVBOBox();
- }
- void CGLRenderer::DrawTable(double x, double y, double z, int n)
- {
- glPushMatrix();
- // Translacija celog stola
- glTranslatef(x, y, z);
- m_woodMat.Select();
- // Crtanje gornje ploce
- m_woodTex.Select();
- glPushMatrix();
- glTranslated(0.0, 10.25, 0.0);
- /*
- const double partX = 20.0 / n, partZ = 10.0 / n, startX = -10.0 + partX/2, startZ = -5.0 + partZ/2;
- for(int i = 0; i < n; i++)
- {
- for(int j = 0; j < n; j++)
- {
- glPushMatrix();
- glTranslatef(startX + i * partX, 0, startZ + j * partZ);
- DrawBox(partX, 0.5, partZ);
- glPopMatrix();
- }
- }*/
- DrawBox(20.0, 0.5, 10.0, 1, 1);
- glPopMatrix();
- // Crtanje donje ploce
- glPushMatrix();
- glTranslated(0.0, 9, 0.0);
- DrawBox(18.0, 2, 8.0, 1, 1);
- glPopMatrix();
- // Crtanje prve noge
- glPushMatrix();
- glTranslated(-9.0, 5.0, -4.0);
- DrawBox(0.5, 10.0, 0.5, 1, 1);
- glPopMatrix();
- // Crtanje druge noge
- glPushMatrix();
- glTranslated(9.0, 5.0, -4.0);
- DrawBox(0.5, 10.0, 0.5, 1, 1);
- glPopMatrix();
- // Crtanje trece noge
- glPushMatrix();
- glTranslated(-9.0, 5.0, 4.0);
- DrawBox(0.5, 10.0, 0.5, 1, 1);
- glPopMatrix();
- // Crtanje cetvrte noge
- glPushMatrix();
- glTranslated(9.0, 5.0, 4.0);
- DrawBox(0.5, 10.0, 0.5, 1, 1);
- glPopMatrix();
- glPopMatrix();
- }
- void CGLRenderer::DrawWall(double a, int n)
- {
- const double partX = a / n, partZ = a / n, startX = -a + partX / 2, startZ = -a + partZ / 2;
- for (int i = 0; i < n; i++)
- {
- for (int j = 0; j < n; j++)
- {
- glPushMatrix();
- glTranslatef(startX + i * partX, 0, startZ + j * partZ);
- DrawBox(partX, a, partZ, 2, 2);
- glPopMatrix();
- }
- }
- }
- void CGLRenderer::DrawWalls(double size, int n)
- {
- m_wallMat.Select();
- m_wallTex.Select();
- glPushMatrix();
- double half = size / 2;
- glTranslated(half, 0, half);
- // Levi zid
- glPushMatrix();
- glTranslated(-half, half, half);
- DrawWall(size, n);
- glPopMatrix();
- // Desni zid
- glPushMatrix();
- glTranslated(half, half, -half);
- DrawWall(size, n);
- glPopMatrix();
- // Pod
- m_floorMat.Select();
- m_floorTex.Select();
- glPushMatrix();
- glTranslated(half, -half, half);
- DrawWall(size, n*2);
- glPopMatrix();
- glPopMatrix();
- }
- void CGLRenderer::DrawLamp(double x, double y, double z)
- {
- m_metalMat.Select();
- glPushMatrix();
- glTranslated(x, y, z);
- glRotated(m_lampAngleX, 0.0, 1.0, 0.0);
- // Postolje
- glutSolidSphere(1.0, 20, 20);
- glPushMatrix();
- // Rotacija cele lampe
- glRotated(m_lampAngleY, 0.0, 0.0, 1.0);
- glPushMatrix();
- // Translacija i rotacija drugog dela, zgloba i glave
- glTranslated(0.0, 7.0, 0.0);
- glRotated(-2 * m_lampAngleY, 0.0, 0.0, 1.0);
- // Zglob
- glutSolidSphere(0.5, 10, 10);
- glTranslated(0.0, 3.5, 0.0);
- // Drugi deo
- SetBoxBuf(0.40, 7.0, 0.40, 1, 1);
- DrawVBOBox();
- glTranslated(0.0, 3.5, 0.0);
- DrawLampTop();
- glPopMatrix();
- glTranslated(0.0, 3.5, 0.0);
- // Prvi deo
- SetBoxBuf(0.40, 7.0, 0.4, 1, 1);
- DrawVBOBox();
- glPopMatrix();
- glPopMatrix();
- }
- void CGLRenderer::DrawLampTop()
- {
- glPushMatrix();
- glRotated(m_lampHeadAngleZ, 0.0, 1.0, 0.0);
- glPushMatrix();
- glTranslated(0.0, 0.0, -2.0);
- glDisable(GL_CULL_FACE);
- GLdouble eqn[4] = { 0.0, 0.0, 1.0, 0.0 };
- glClipPlane(GL_CLIP_PLANE0, eqn);
- glEnable(GL_CLIP_PLANE0);
- glutSolidSphere(1.5, 30, 30);
- glDisable(GL_CLIP_PLANE0);
- glEnable(GL_CULL_FACE);
- // Sijalica
- m_bulbMat.Select();
- SetDirectedLight();
- glTranslated(0.0, 0.0, 0.5);
- glutSolidSphere(0.75, 30, 30);
- glPopMatrix();
- m_metalMat.Select();
- DrawBox(1.0, 1.0, 1.5, 1, 1);
- glPopMatrix();
- }
- void CGLRenderer::DrawEllipse(double a, double b, double x, double y, double z)
- {
- std::vector<GLfloat> vec;
- m_floorMat.Select();
- m_floorTex.Select();
- glPushMatrix();
- glTranslated(x, y, z);
- for(int i = 360; i > 0; i--)
- {
- // Koordinate
- vec.push_back(a * cos(i * m_pi / 180));
- vec.push_back(0.0);
- vec.push_back(b * sin(i * m_pi / 180));
- // Normale
- vec.push_back(0.0);
- vec.push_back(1.0);
- vec.push_back(0.0);
- // Tex
- vec.push_back(a * cos(i * m_pi / 180));
- vec.push_back(b * sin(i * m_pi / 180));
- }
- glVertexPointer(3, GL_FLOAT, 8 * sizeof(GLfloat), &vec[0]);
- glNormalPointer(GL_FLOAT, 8 * sizeof(GLfloat), &vec[3]);
- glTexCoordPointer(2, GL_FLOAT, 8 * sizeof(GLfloat), &vec[6]);
- glEnableClientState(GL_VERTEX_ARRAY);
- glEnableClientState(GL_NORMAL_ARRAY);
- glEnableClientState(GL_TEXTURE_COORD_ARRAY);
- glDrawArrays(GL_POLYGON, 0, vec.size() / 8);
- glDisableClientState(GL_VERTEX_ARRAY);
- glDisableClientState(GL_NORMAL_ARRAY);
- glDisableClientState(GL_TEXTURE_COORD_ARRAY);
- glPopMatrix();
- }
- void CGLRenderer::DrawCola(double x, double y, double z, double r, double h, int size)
- {
- std::vector<GLfloat> vecBase1, vecBase2, vecMid;
- m_colaTex.Select();
- m_defaultMat.Select();
- const int decrement = 360 / size;
- const double offsetY = 1.0 / size;
- double currentOffset = 1.0;
- for (int i = 360; i > 0; i-= decrement)
- {
- const double sinVal = sin(i * m_pi/180), cosVal = cos(i * m_pi/180);
- const double sinVal2 = sin((i - decrement) * m_pi/180), cosVal2 = cos((i - decrement) * m_pi/180);
- // Donja osnova
- // Koordinate
- vecBase1.push_back(r * cosVal);
- vecBase1.push_back(0.0);
- vecBase1.push_back(r * sinVal);
- // Normale
- vecBase1.push_back(0.0);
- vecBase1.push_back(-1.0);
- vecBase1.push_back(0.0);
- // Tex
- vecBase1.push_back(0.75 + (0.25 * cosVal));
- vecBase1.push_back(0.75 + (0.25 * sinVal));
- // Gornja osnova
- // Koordinate
- vecBase2.push_back(r * cosVal);
- vecBase2.push_back(h);
- vecBase2.push_back(r * sinVal);
- // Normale
- vecBase2.push_back(0.0);
- vecBase2.push_back(1.0);
- vecBase2.push_back(0.0);
- // Tex
- vecBase2.push_back(0.75 + (0.25 * cosVal));
- vecBase2.push_back(0.25 + (0.25 * sinVal));
- // Omotac
- // Vertex 0
- vecMid.push_back(r * cosVal);
- vecMid.push_back(0.0);
- vecMid.push_back(r * sinVal);
- vecMid.push_back(cosVal2);
- vecMid.push_back(0.0);
- vecMid.push_back(sinVal2);
- vecMid.push_back(0.5);
- vecMid.push_back(currentOffset);
- // Vertex 1
- vecMid.push_back(r * cosVal2);
- vecMid.push_back(0.0);
- vecMid.push_back(r * sinVal2);
- vecMid.push_back(cosVal);
- vecMid.push_back(0.0);
- vecMid.push_back(sinVal);
- vecMid.push_back(0.5);
- vecMid.push_back(currentOffset - offsetY);
- // Vertex 2
- vecMid.push_back(r * cosVal2);
- vecMid.push_back(h);
- vecMid.push_back(r * sinVal2);
- vecMid.push_back(cosVal);
- vecMid.push_back(0.0);
- vecMid.push_back(sinVal);
- vecMid.push_back(0.0);
- vecMid.push_back(currentOffset - offsetY);
- // Vertex 3
- vecMid.push_back(r * cosVal);
- vecMid.push_back(h);
- vecMid.push_back(r * sinVal);
- vecMid.push_back(cosVal2);
- vecMid.push_back(0.0);
- vecMid.push_back(sinVal2);
- vecMid.push_back(0);
- vecMid.push_back(currentOffset);
- currentOffset -= offsetY;
- }
- glPushMatrix();
- glTranslated(x, y, z);
- glEnableClientState(GL_VERTEX_ARRAY);
- glEnableClientState(GL_NORMAL_ARRAY);
- glEnableClientState(GL_TEXTURE_COORD_ARRAY);
- glVertexPointer(3, GL_FLOAT, 8 * sizeof(GLfloat), &vecBase1[0]);
- glNormalPointer(GL_FLOAT, 8 * sizeof(GLfloat), &vecBase1[3]);
- glTexCoordPointer(2, GL_FLOAT, 8 * sizeof(GLfloat), &vecBase1[6]);
- glPushMatrix();
- glRotated(180, 1.0, 0.0, 0.0);
- glDrawArrays(GL_POLYGON, 0, vecBase1.size()/8);
- glPopMatrix();
- glVertexPointer(3, GL_FLOAT, 8 * sizeof(GLfloat), &vecBase2[0]);
- glNormalPointer(GL_FLOAT, 8 * sizeof(GLfloat), &vecBase2[3]);
- glTexCoordPointer(2, GL_FLOAT, 8 * sizeof(GLfloat), &vecBase2[6]);
- glDrawArrays(GL_POLYGON, 0, vecBase2.size()/8);
- glVertexPointer(3, GL_FLOAT, 8 * sizeof(GLfloat), &vecMid[0]);
- glNormalPointer(GL_FLOAT, 8 * sizeof(GLfloat), &vecMid[3]);
- glTexCoordPointer(2, GL_FLOAT, 8 * sizeof(GLfloat), &vecMid[6]);
- glDrawArrays(GL_QUADS, 0, vecMid.size() / 8);
- glDisableClientState(GL_VERTEX_ARRAY);
- glDisableClientState(GL_NORMAL_ARRAY);
- glDisableClientState(GL_TEXTURE_COORD_ARRAY);
- glPopMatrix();
- }
- void CGLRenderer::SetLightModel()
- {
- // Postavljanje globalnog ambijentnog svetla
- float lmodel_ambient[] = { 0.2, 0.2, 0.2, 1.0 };
- glLightModelfv(GL_LIGHT_MODEL_AMBIENT, lmodel_ambient);
- // Izbor udaljenog posmatraca
- glLightModeli(GL_LIGHT_MODEL_LOCAL_VIEWER, GL_FALSE);
- // Ukljucivanje dvostranog osvetljenja
- glLightModeli(GL_LIGHT_MODEL_TWO_SIDE, GL_TRUE);
- // Ukljucivanje osvetljenja
- glEnable(GL_LIGHTING);
- // Postavljanje svetla bele boje
- float light_ambient[] = { 0.2, 0.2, 0.2, 1.0 };
- float light_diffuse[] = { 1.0, 1.0, 1.0, 1.0 };
- float light_specular[] = { 1.0, 1.0, 1.0, 1.0 };
- float light_position[] = { 20.0, 20.0, 20.0 };
- glLightfv(GL_LIGHT0, GL_AMBIENT, light_ambient);
- glLightfv(GL_LIGHT0, GL_DIFFUSE, light_diffuse);
- glLightfv(GL_LIGHT0, GL_SPECULAR, light_specular);
- glLightfv(GL_LIGHT0, GL_POSITION, light_position);
- glEnable(GL_LIGHT0);
- }
- void CGLRenderer::SetDirectedLight()
- {
- GLfloat light1_ambient[] = { 1.0, 1.0, 0.2, 1.0 };
- GLfloat light1_diffuse[] = { 1.0, 1.0, 0.2, 1.0 };
- GLfloat light1_specular[] = { 1.0, 1.0, 1.0, 1.0 };
- GLfloat light1_position[] = { 0.0, 0.0, -1.0, 1.0 };
- GLfloat spot_direction[] = { 0.0, 0.0, -1.0 };
- glLightfv(GL_LIGHT1, GL_AMBIENT, light1_ambient);
- glLightfv(GL_LIGHT1, GL_DIFFUSE, light1_diffuse);
- glLightfv(GL_LIGHT1, GL_SPECULAR, light1_specular);
- glLightfv(GL_LIGHT1, GL_POSITION, light1_position);
- glLightf(GL_LIGHT1, GL_CONSTANT_ATTENUATION, 1.0);
- glLightf(GL_LIGHT1, GL_LINEAR_ATTENUATION, 0.5);
- glLightf(GL_LIGHT1, GL_QUADRATIC_ATTENUATION, 0.2);
- glLightf(GL_LIGHT1, GL_SPOT_CUTOFF, 45.0);
- glLightfv(GL_LIGHT1, GL_SPOT_DIRECTION, spot_direction);
- glLightf(GL_LIGHT1, GL_SPOT_EXPONENT, 2.0);
- glEnable(GL_LIGHT1);
- }
- void CGLRenderer::SetWoodMaterial()
- {
- m_woodMat.SetAmbient(0.4, 0.2, 0.05, 1.0);
- m_woodMat.SetDiffuse(0.8, 0.4, 0.1, 1.0);
- m_woodMat.SetSpecular(1.0, 1.0, 1.0, 1.0);
- m_woodMat.SetShininess(32.0);
- }
- void CGLRenderer::SetWallMaterial()
- {
- m_wallMat.SetAmbient(0.6, 0.5, 0.4, 1.0);
- m_wallMat.SetDiffuse(0.9, 0.8, 0.7, 1.0);
- m_wallMat.SetSpecular(1.0, 1.0, 1.0, 1.0);
- m_wallMat.SetShininess(128.0);
- }
- void CGLRenderer::SetFloorMaterial()
- {
- m_floorMat.SetAmbient(0.4, 0.3, 0.2, 1.0);
- m_floorMat.SetDiffuse(0.5, 0.4, 0.3, 1.0);
- m_floorMat.SetSpecular(1.0, 1.0, 1.0, 1.0);
- m_floorMat.SetShininess(128.0);
- }
- void CGLRenderer::SetRedMetal()
- {
- m_metalMat.SetAmbient(0.4, 0.0, 0.0, 1.0);
- m_metalMat.SetDiffuse(0.8, 0.0, 0.0, 1.0);
- m_metalMat.SetSpecular(1.0, 1.0, 1.0, 1.0);
- m_metalMat.SetShininess(8.0);
- }
- void CGLRenderer::SetBulbMaterial()
- {
- m_bulbMat.SetEmmission(1.0, 1.0, 0.8, 1.0);
- m_bulbMat.SetShininess(8.0);
- }
- void CGLRenderer::PrepareTextures()
- {
- GLTexture::PrepareTexturing(true);
- m_woodTex.LoadFromFile(L"ASHSEN512.bmp");
- m_floorTex.LoadFromFile(L"PAT39.bmp");
- m_wallTex.LoadFromFile(L"Wall512.bmp");
- m_colaTex.LoadFromFile(L"KOKAKOLA.bmp");
- }
- void CGLRenderer::DrawVBOBox()
- {
- PrepareVBOBox();
- glBindBuffer(GL_ARRAY_BUFFER, m_vbo[0]);
- glVertexPointer(3, GL_FLOAT, 8 * sizeof(float), (void*)0);
- glNormalPointer(GL_FLOAT, 8 * sizeof(float), (void*)(3 * sizeof(float)));
- glTexCoordPointer (2, GL_FLOAT, 8 * sizeof(float), (void*)(6 * sizeof(float)));
- glEnableClientState(GL_VERTEX_ARRAY);
- glEnableClientState(GL_NORMAL_ARRAY);
- glEnableClientState(GL_TEXTURE_COORD_ARRAY);
- glDrawArrays(GL_QUADS, 0, 24);
- glDisableClientState(GL_VERTEX_ARRAY);
- glDisableClientState(GL_NORMAL_ARRAY);
- glDisableClientState(GL_TEXTURE_COORD_ARRAY);
- DestroyVBO();
- }
- void CGLRenderer::SetBoxBuf(double a, double b, double c, int rx, int rz)
- {
- double halfA = a / 2, halfB = b / 2, halfC = c / 2;
- int ind = 0;
- // Strana 0 1 2 3
- m_box_buf[ind++] = -halfA; m_box_buf[ind++] = -halfB; m_box_buf[ind++] = halfC; //0
- m_box_buf[ind++] = 0.0; m_box_buf[ind++] = 0.0; m_box_buf[ind++] = 1.0;
- m_box_buf[ind++] = 0; m_box_buf[ind++] = 0;
- m_box_buf[ind++] = halfA; m_box_buf[ind++] = -halfB; m_box_buf[ind++] = halfC; //1
- m_box_buf[ind++] = 0.0; m_box_buf[ind++] = 0.0; m_box_buf[ind++] = 1.0;
- m_box_buf[ind++] = rx; m_box_buf[ind++] = 0;
- m_box_buf[ind++] = halfA; m_box_buf[ind++] = halfB; m_box_buf[ind++] = halfC; //2
- m_box_buf[ind++] = 0.0; m_box_buf[ind++] = 0.0; m_box_buf[ind++] = 1.0;
- m_box_buf[ind++] = rx; m_box_buf[ind++] = rz;
- m_box_buf[ind++] = -halfA; m_box_buf[ind++] = halfB; m_box_buf[ind++] = halfC; //3
- m_box_buf[ind++] = 0.0; m_box_buf[ind++] = 0.0; m_box_buf[ind++] = 1.0;
- m_box_buf[ind++] = 0; m_box_buf[ind++] = rz;
- // Strana 1 5 6 2
- m_box_buf[ind++] = halfA; m_box_buf[ind++] = -halfB; m_box_buf[ind++] = halfC; //1
- m_box_buf[ind++] = 1.0; m_box_buf[ind++] = 0.0; m_box_buf[ind++] = 0.0;
- m_box_buf[ind++] = 0; m_box_buf[ind++] = 0;
- m_box_buf[ind++] = halfA; m_box_buf[ind++] = -halfB; m_box_buf[ind++] = -halfC; //5
- m_box_buf[ind++] = 1.0; m_box_buf[ind++] = 0.0; m_box_buf[ind++] = 0.0;
- m_box_buf[ind++] = rx; m_box_buf[ind++] = 0.0;
- m_box_buf[ind++] = halfA; m_box_buf[ind++] = halfB; m_box_buf[ind++] = -halfC; //6
- m_box_buf[ind++] = 1.0; m_box_buf[ind++] = 0.0; m_box_buf[ind++] = 0.0;
- m_box_buf[ind++] = rx; m_box_buf[ind++] = rz;
- m_box_buf[ind++] = halfA; m_box_buf[ind++] = halfB; m_box_buf[ind++] = halfC; //2
- m_box_buf[ind++] = 1.0; m_box_buf[ind++] = 0.0; m_box_buf[ind++] = 0.0;
- m_box_buf[ind++] = 0; m_box_buf[ind++] = rz;
- // Strana 7 6 5 4
- m_box_buf[ind++] = -halfA; m_box_buf[ind++] = halfB; m_box_buf[ind++] = -halfC; //7
- m_box_buf[ind++] = 0.0; m_box_buf[ind++] = 0.0; m_box_buf[ind++] = -1.0;
- m_box_buf[ind++] = 0; m_box_buf[ind++] = 0;
- m_box_buf[ind++] = halfA; m_box_buf[ind++] = halfB; m_box_buf[ind++] = -halfC; //6
- m_box_buf[ind++] = 0.0; m_box_buf[ind++] = 0.0; m_box_buf[ind++] = -1.0;
- m_box_buf[ind++] = rx; m_box_buf[ind++] = 0;
- m_box_buf[ind++] = halfA; m_box_buf[ind++] = -halfB; m_box_buf[ind++] = -halfC; //5
- m_box_buf[ind++] = 0.0; m_box_buf[ind++] = 0.0; m_box_buf[ind++] = -1.0;
- m_box_buf[ind++] = rx; m_box_buf[ind++] = rz;
- m_box_buf[ind++] = -halfA; m_box_buf[ind++] = -halfB; m_box_buf[ind++] = -halfC; //4
- m_box_buf[ind++] = 0.0; m_box_buf[ind++] = 0.0; m_box_buf[ind++] = -1.0;
- m_box_buf[ind++] = 0; m_box_buf[ind++] = rz;
- // Strana 0 3 7 4
- m_box_buf[ind++] = -halfA; m_box_buf[ind++] = -halfB; m_box_buf[ind++] = halfC; //0
- m_box_buf[ind++] = -1.0; m_box_buf[ind++] = 0.0; m_box_buf[ind++] = 0.0;
- m_box_buf[ind++] = 0; m_box_buf[ind++] = 0;
- m_box_buf[ind++] = -halfA; m_box_buf[ind++] = halfB; m_box_buf[ind++] = halfC; //3
- m_box_buf[ind++] = -1.0; m_box_buf[ind++] = 0.0; m_box_buf[ind++] = 0.0;
- m_box_buf[ind++] = rx; m_box_buf[ind++] = 0;
- m_box_buf[ind++] = -halfA; m_box_buf[ind++] = halfB; m_box_buf[ind++] = -halfC; //7
- m_box_buf[ind++] = -1.0; m_box_buf[ind++] = 0.0; m_box_buf[ind++] = 0.0;
- m_box_buf[ind++] = rx; m_box_buf[ind++] = rz;
- m_box_buf[ind++] = -halfA; m_box_buf[ind++] = -halfB; m_box_buf[ind++] = -halfC; //4
- m_box_buf[ind++] = -1.0; m_box_buf[ind++] = 0.0; m_box_buf[ind++] = 0.0;
- m_box_buf[ind++] = 0; m_box_buf[ind++] = rz;
- // Strana 0 4 5 1
- m_box_buf[ind++] = -halfA; m_box_buf[ind++] = -halfB; m_box_buf[ind++] = halfC; //0
- m_box_buf[ind++] = 0.0; m_box_buf[ind++] = -1.0; m_box_buf[ind++] = 0.0;
- m_box_buf[ind++] = 0; m_box_buf[ind++] = 0;
- m_box_buf[ind++] = -halfA; m_box_buf[ind++] = -halfB; m_box_buf[ind++] = -halfC; //4
- m_box_buf[ind++] = 0.0; m_box_buf[ind++] = -1.0; m_box_buf[ind++] = 0.0;
- m_box_buf[ind++] = rx; m_box_buf[ind++] = 0;
- m_box_buf[ind++] = halfA; m_box_buf[ind++] = -halfB; m_box_buf[ind++] = -halfC; //5
- m_box_buf[ind++] = 0.0; m_box_buf[ind++] = -1.0; m_box_buf[ind++] = 0.0;
- m_box_buf[ind++] = rx; m_box_buf[ind++] = rz;
- m_box_buf[ind++] = halfA; m_box_buf[ind++] = -halfB; m_box_buf[ind++] = halfC; //1
- m_box_buf[ind++] = 0.0; m_box_buf[ind++] = -1.0; m_box_buf[ind++] = 0.0;
- m_box_buf[ind++] = 0; m_box_buf[ind++] = rz;
- // Strana 7 3 2 6
- m_box_buf[ind++] = -halfA; m_box_buf[ind++] = halfB; m_box_buf[ind++] = -halfC; //7
- m_box_buf[ind++] = 0.0; m_box_buf[ind++] = 1.0; m_box_buf[ind++] = 0.0;
- m_box_buf[ind++] = 0; m_box_buf[ind++] = 0;
- m_box_buf[ind++] = -halfA; m_box_buf[ind++] = halfB; m_box_buf[ind++] = halfC; //3
- m_box_buf[ind++] = 0.0; m_box_buf[ind++] = 1.0; m_box_buf[ind++] = 0.0;
- m_box_buf[ind++] = rx; m_box_buf[ind++] = 0;
- m_box_buf[ind++] = halfA; m_box_buf[ind++] = halfB; m_box_buf[ind++] = halfC; //2
- m_box_buf[ind++] = 0.0; m_box_buf[ind++] = 1.0; m_box_buf[ind++] = 0.0;
- m_box_buf[ind++] = rx; m_box_buf[ind++] = rz;
- m_box_buf[ind++] = halfA; m_box_buf[ind++] = halfB; m_box_buf[ind++] = -halfC; //6
- m_box_buf[ind++] = 0.0; m_box_buf[ind++] = 1.0; m_box_buf[ind++] = 0.0;
- m_box_buf[ind++] = 0; m_box_buf[ind++] = rz;
- }
- void CGLRenderer::PrepareVBOBox()
- {
- glGenBuffers = (PFNGLGENBUFFERSPROC)wglGetProcAddress("glGenBuffers");
- glBindBuffer = (PFNGLBINDBUFFERPROC)wglGetProcAddress("glBindBuffer");
- glBufferData = (PFNGLBUFFERDATAPROC)wglGetProcAddress("glBufferData");
- glDeleteBuffers = (PFNGLDELETEBUFFERSPROC)wglGetProcAddress("glDeleteBuffers");
- glGenBuffers(1, m_vbo);
- glBindBuffer(GL_ARRAY_BUFFER, m_vbo[0]);
- glBufferData(GL_ARRAY_BUFFER, sizeof(m_box_buf), m_box_buf, GL_STATIC_DRAW);
- glBindBuffer(GL_ARRAY_BUFFER, 0);
- glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0);
- }
- void CGLRenderer::DestroyVBO()
- {
- glDeleteBuffers(1, m_vbo);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement