Войти
ДельфинарийСтатьи

OpenGL ARB_Vertex_Buffer_Object.

Автор:

Для начала
1 Потребуется Dot (Delphi OpenGL Tools) скачать можно с DelphiGl http://www.delphi3d.net/download/dot.zip :)

2 создаём ссылки где они лежат
  var
  ARB_VCT        : Cardinal;
  ARB_Face        : Cardinal;
  ARB_TexCoord: Cardinal;

3 Кидаем всё нужное в них :
  Procedure AddToVBO;
  begin
  glGenBuffersARB(1, @ARB_VCT); // Генерируем буффер
  glBindBufferARB(GL_ARRAY_BUFFER_ARB, ARB_VCT);// Сюда точки (указываем тикущий буффер)
  glBufferDataARB(GL_ARRAY_BUFFER_ARB,
                  (VERTEXcount* sizeof(TVERTEX ) , // Сюда размер, сколько будим кидать  Кол-во точек *Размер в байтах(XYZ : Single;)
                @Vertex[0].X, GL_STATIC_DRAW_ARB); // Ссылка откуда читать

  glGenBuffersARB(1, @ARB_Face);
  glBindBufferARB(GL_ELEMENT_ARRAY_BUFFER_ARB, ARB_Face); // Тожесамое но для лиц
  glBufferDataARB(GL_ELEMENT_ARRAY_BUFFER_ARB, FaceCount*sizeof(TFACE),
                  @Face[0][0], GL_STATIC_DRAW_ARB);

  glGenBuffersARB(1, @ARB_TexCoord); // Сбда кекстурные координаты
  glBindBufferARB(GL_ARRAY_BUFFER_ARB, ARB_TexCoord);
  glBufferDataARB(GL_ARRAY_BUFFER_ARB,
                  TEXCount*sizeof(TTEXCOORD),
                  @TEXCOORD[0].x, GL_STATIC_DRAW_ARB);

  glBindBufferARB(GL_ARRAY_BUFFER_ARB, 0);
  glBindBufferARB(GL_ARRAY_BUFFER_ARB, 0);
  glBindBufferARB(GL_ELEMENT_ARRAY_BUFFER_ARB, 0);
  end;

4: Отрисовка
Procedure DrawARBObject;
begin
//  glBindTexture(GL_TEXTURE_2D, Texture); // Добавляем текстуру
  glBindBufferARB(GL_ARRAY_BUFFER_ARB, ARB_VCT); // Подключаем чего закинули в память
  glVertexPointer(3, GL_FLOAT, 0, 0);

  glBindBufferARB(GL_ARRAY_BUFFER_ARB, ARB_TexCoord);
  glTexCoordPointer(2, GL_FLOAT, 0, 0);

  glBindBufferARB(GL_ELEMENT_ARRAY_BUFFER_ARB, ARB_Face);

  glEnableClientState(GL_VERTEX_ARRAY); //Включаем массив вертексов 
  glEnableClientState(GL_TEXTURE_COORD_ARRAY);

    glDrawElements(GL_TRIANGLES, FaceCount*3, GL_UNSIGNED_SHORT, 0); // Наконец рендерируем

  glDisableClientState(GL_VERTEX_ARRAY); //Отключаем это всё (если не отключить то :то что мы рисуем без ARB_VBO
                                                                    //будит испорчено
  glDisableClientState(GL_TEXTURE_COORD_ARRAY);

  glBindBufferARB(GL_ARRAY_BUFFER_ARB, 0);
  glBindBufferARB(GL_ARRAY_BUFFER_ARB, 0);
  glBindBufferARB(GL_ELEMENT_ARRAY_BUFFER_ARB, 0);
end;

В примере уже есть нужные компоненты из dot но не все, только необходимо для примера
Тамже есть и работа с обыкновенным Gl'овским буффиром

Белым цветом ARB_Vertex_Buffer_Object а красным vertex_buffer

Пример :
http://www.gamedev.ru/download/?id=3581

Если есть вопросы киньте мне на мыло :

23 мая 2006