Advertisement
Guest User

Untitled

a guest
Apr 25th, 2015
191
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.59 KB | None | 0 0
  1. class VBOv2
  2. {
  3.  
  4.     public:
  5.  
  6.     GLuint idVertexVBO;
  7.     GLuint idTextureVBO;
  8.     GLuint idIndexVBO;
  9.     GLboolean Ready; //Готов к рендерингу ?
  10.     std::vector <Vector3f> VertexBuffer;
  11.     std::vector <GLuint> IndexBuffer;
  12.     std::vector <Texture2f> TextureBuffer;
  13.  
  14.     VBOv2()
  15.     {
  16.        idVertexVBO = 0 ;
  17.        idTextureVBO= 0 ;
  18.        idIndexVBO  = 0 ;
  19.        Ready = GL_FALSE ; //false
  20.     };
  21.  
  22.     void InitVertex();
  23.  
  24.     void InitIndex();
  25.  
  26.     void InitTexture();
  27.  
  28.     void FillingVertexBuffer(Vector3f CopyArr[],GLint SizeVector);
  29.  
  30.     void FillingIndexBuffer(GLuint CopyArr[],GLuint SizeVector);
  31.  
  32.     void FillingTextureBuffer(Texture2f CopyArr[],GLint SizeVector);
  33.  
  34.     void Render();
  35.  
  36. };
  37.  
  38.  
  39. ////////////////////////VBO//2//Порядка/////////////////////////////////
  40.  
  41.     void VBOv2::InitVertex()
  42.     {
  43.         glewInit();
  44.  
  45.         //Создание нового VBO и сохранение идентификатора VBO
  46.         glGenBuffers(1, &idVertexVBO);
  47.  
  48.         //Установка активности VBO
  49.         glBindBuffer(GL_ARRAY_BUFFER, idVertexVBO);
  50.  
  51.         //Выгрузка данных вершин в видеоустройство
  52.         glBufferData(GL_ARRAY_BUFFER,VertexBuffer.size()*sizeof(float)*3, &VertexBuffer[0], GL_STATIC_DRAW);
  53.         /*в качестве второго параметра мы задаем размер данного буфера в байтах.*/
  54.  
  55.         //Рисование треугольника из VBO - происходит каждый раз, когда окно, точка обзора или данные изменяются
  56.         //Устанавливаем 3 координаты каждой вершины с 0 шагом в этом массиве; тут необходимо
  57.         glVertexPointer(3, GL_FLOAT, 0, NULL);
  58.  
  59.         //Данный массив содержит вершины(не нормалей, цвета, текстуры и т.д.)
  60.         glEnableClientState(GL_VERTEX_ARRAY);
  61.  
  62.     }
  63.  
  64.     void VBOv2::InitIndex()
  65.     {
  66.       glGenBuffers( 1, &idIndexVBO );
  67.       glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, idIndexVBO);
  68.       glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(GLuint) * IndexBuffer.size(), &IndexBuffer[0], GL_STATIC_DRAW);
  69.       glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0);
  70.     }
  71.  
  72.     void VBOv2::InitTexture()
  73.     {
  74.  
  75.     //Создание нового VBO и сохранение идентификатора VBO
  76.     glGenBuffers(1, &idTextureVBO);
  77.  
  78.     //Установка активности VBO
  79.     glBindBuffer(GL_ARRAY_BUFFER, idTextureVBO);
  80.  
  81.     //Выгрузка данных текстур в видеоустройство
  82.     glBufferData(GL_ARRAY_BUFFER,TextureBuffer.size()*sizeof(float)*2, &TextureBuffer[0], GL_STATIC_DRAW);
  83.     /*в качестве второго параметра мы задаем размер данного буфера в байтах.*/
  84.  
  85.     glTexCoordPointer(2,GL_FLOAT,0,NULL);
  86.  
  87.     //Данный массив содержит(текстуры)
  88.     glEnableClientState(GL_TEXTURE_COORD_ARRAY);
  89.  
  90.     }
  91. //#include <stdio.h>//Debug
  92.     void VBOv2::FillingVertexBuffer(Vector3f CopyArr[],GLint SizeVector)
  93.     {
  94.         for(GLint i(0);i<SizeVector;)
  95.         {
  96.         VertexBuffer.push_back(Vector3f());
  97.         VertexBuffer[i].x = CopyArr[i].x;
  98.         VertexBuffer[i].y = CopyArr[i].y;
  99.         VertexBuffer[i].z = CopyArr[i].z;
  100.        // printf("Itereted %d:  %f %f %f \n",i,VertexBuffer[i].x,VertexBuffer[i].y,VertexBuffer[i].z); //Debug
  101.         i++;
  102.         }
  103.  
  104.     };
  105.  
  106.     void VBOv2::FillingTextureBuffer(Texture2f CopyArr[],GLint SizeVector)
  107.     {
  108.         for(GLint i(0);i<SizeVector;)
  109.         {
  110.         TextureBuffer.push_back(Texture2f());
  111.         TextureBuffer[i].u = CopyArr[i].u;
  112.         TextureBuffer[i].v = CopyArr[i].v;
  113.         //printf("%f %f  \n",TextureBuffer[i].u,TextureBuffer[i].v); //Debug
  114.         i++;
  115.         }
  116.  
  117.     };
  118.  
  119.     void VBOv2::FillingIndexBuffer(GLuint CopyArr[],GLuint SizeVector)
  120.     {
  121.         for(GLuint i(0);i<SizeVector;i++)
  122.         {
  123.             IndexBuffer.push_back(GLuint());
  124.             IndexBuffer[i] = CopyArr[i];
  125.         }
  126.  
  127.     }
  128.  
  129.     void VBOv2::Render()
  130.     {
  131.     glPushAttrib(GL_ENABLE_BIT);
  132.     glPushMatrix();
  133.  
  134.     glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, idIndexVBO);
  135.     //Рисование треугольника, указывая количества вершин
  136.     glDrawElements(GL_TRIANGLES,IndexBuffer.size(),GL_UNSIGNED_INT,NULL);//sizeof(float) / 3
  137.  
  138.     glPopMatrix();
  139.     glPushAttrib(GL_ENABLE_BIT);
  140.  
  141.     };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement