Конференция "Media" » opengl2 треугольники
 
  • DoKi (27.02.08 07:36) [0]
    как на opengl2 выводить сразу много треугольников 10000 100000 1000000?????????

    вот например
    /////////////////////////////////////////
    Vertex : Array .....//массив
    glVertexPointer(3, GL_FLOAT, 0, @Vertex);

    glEnableClientState(GL_VERTEX_ARRAY);
    glColor3ub(255,0,0);//цвет

    glDrawArrays(GL_TRIANGLES, 0, 3000);// рисуем 3000 триуголиников
    ////////////////////////////////////////////////
    программа компилируется а на экране пусто
  • Dimaxx © (27.02.08 13:49) [1]

    > Vertex : Array .....//массив

    Подробней в этом месте. Я так подозреваю задан динамический массив, а кто размерность будет указывать?
  • DoKi (27.02.08 13:59) [2]
    вот
    Vertex : Array [0..2000000, 0..2] of glfloat;
    /////////////////////вершина 1
    vertex [0,0]:=1;
    vertex [0,1]:=0;
    vertex [0,2]:=0;
    ////////////////////////вершина2
    vertex [1,0]:=0;
    vertex [1,1]:=1;
    vertex [1,2]:=0;
    /////////////////////////вершина3
     vertex [2,0]:=2;
    vertex [2,1]:=1;
    vertex [2,2]:=1;
    и т д
  • Jeer © (27.02.08 14:26) [3]

    > DoKi   (27.02.08 07:36)


    А, что - с 10-ю треугольниками все в порядке ?
  • DoKi (27.02.08 14:29) [4]
    вообще не рисует даже один
  • DoKi (27.02.08 14:34) [5]
    нащёл ошибку теперь всё рисует,
    но при 20000 треугольниках уже тормозит
  • @!!ex © (27.02.08 15:45) [6]
    > [5] DoKi   (27.02.08 14:34)

    VBO - forever
  • DoKi (27.02.08 15:49) [7]
    да уж
  • DoKi (27.02.08 18:58) [8]
    а вот ещё способ
    glGenBuffersARB(1, @myModel.VBOlink); //генерирует уникальные имена для буферных объектов
    glBindBufferARB(GL_ARRAY_BUFFER_ARB, myModel.VBOlink); //привязка буферного объекта

    glDrawArrays(GL_TRIANGLES,0,3*poligons);//посылает на вывод множество геометрических примитивов.

    но здесь myModel.VBOlink имеет тип cardinal
    как тогда вершины хрнятся в типе cardinal ??
  • @!!ex © (27.02.08 19:12) [9]
    > [8] DoKi   (27.02.08 18:58)

    Это VBO!!! О котором я говорил в [6]

    VBOLink не хранит данные о вершине, он хранит данные о буффере, как можно догадаться из кода.
  • DoKi (27.02.08 19:17) [10]
    значит myModel.VBOlink -типа cardinal это буфер
    а что такое буфер?
  • @!!ex © (27.02.08 19:26) [11]
    > [10] DoKi   (27.02.08 19:17)

    Ты сам то понимаешь, что такое VBO И зачем он нужен?

    P.S.
    код в [8] - не рабочий/не полный
  • DoKi (27.02.08 19:35) [12]
    да понимаю
    а код конешно не полный
    вот исходник
    www.delphisources.ru/pages/sources/graph/2007_year/igrodel_shaders.html
    папка sceleton модуль _render.pas
    тока мне нужно чтоб не модели выводились  треугольники(так понятней)
  • @!!ex © (27.02.08 20:10) [13]
    > да понимаю

    Ну расскажи?
  • @!!ex © (27.02.08 20:15) [14]
    Короче, для тех, кому влом читать о VBO.
    VBo - Vertex Buffer Object
    Как понятно из названия - это вершинный буффер.
    Суть данного расширения в том, что оно позволяет хранить массивы вершин в ВИДЕО памяти, что существенно ускоряет скорость рендера больших объектов(т.к. не приходится пересылать данные между обычной память и видеопамятью).
    Суть инициализации сводится к генерации уникального имени буффера, установки текущего буффера, его заполнение(отсутствует в [8]).
    Рендеринг сводится к установке текущего буффера и рендеру.
  • DoKi (27.02.08 20:35) [15]
    зполнение отсутствует - просто я не смог его в исходнике найти
  • @!!ex © (27.02.08 20:40) [16]
    Короч вот кусок кода из моего проекта:
    инициализация:
       glGenBuffersARB(1,@Mesh[MeshIndex].VBO);
       glBindBufferARB(GL_ARRAY_BUFFER_ARB,Mesh[MeshIndex].VBO);
       glBufferDataARB(GL_ARRAY_BUFFER_ARB,Mesh[MeshIndex].F_Count*3*sizeof(TOTMVertex) ,@Buffer[0],GL_STATIC_DRAW_ARB);



    отрисовка:
         glBindBufferARB(GL_ARRAY_BUFFER_ARB,VBO);

         glVertexPointer(3,GL_FLOAT,SizeOf(TOTMVertex),Pointer(0));
         glNormalPointer(GL_FLOAT, SizeOf(TOTMVertex), Pointer(Sizeof(TVector)));
         glTexCoordPointer(2, GL_FLOAT, SizeOf(TOTMVertex), Pointer(Sizeof(TVector)*2));
         glDrawArrays(GL_TRIANGLES, 0, F_Count*3);

  • SCRIMERS (20.08.08 18:21) [17]
    Вопрос, а что за ОГЛ такой, что команды glGenBuffersARB и все на *ARB имеются? Например у меня такие команды ни в одном заголовочном файле не имеется: ни в Глуте, ни даже в ОГЛ - та вообще нет нигде.

    Напишите мне пожалуйста объявления этих функций (ВБО) или где можно их вообще взять, или где можно взять "новый" заголовочный файл ОГЛ или ГЛУТ.

    Сразу говорю, что ресурсы типа www.mirgames.ru не катят, ибо читаю ту статью по VBO  я и пришел сюда.

    Я программирую на Делфи 6, стандартные библиотеки ГЛУТ и ОГЛ. Заранее Спасибо.
  • SCRIMERS (20.08.08 19:33) [18]
    всё разобрался сам- спасибо. ВСЕМ КТО НЕ ЗНАЕТ КАК ЭТО СДЕЛАТЬ ПРОШУ СЮДА http://pda.delphimaster.net/?id=1179836491&n=9
 
Конференция "Media" » opengl2 треугольники
Есть новые Нет новых   [134431   +10][b:0][p:0.001]