Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.01.21;
Скачать: CL | DM;

Вниз

OpenGL Extensions   Найти похожие ветки 

 
grisme ©   (2006-02-22 14:36) [0]

Господа, не подскажете ли где достать заголовочники для Delphi с большинством популярных расширений OpenGL, ато искать приходится инфу по каждому расширению, какие в нем функции, etc.? А тут раз-и готово... =)


 
Кефир87 ©   (2006-02-22 18:43) [1]

Так на то они и расширения. чтоб их динамически подгружать 8) Вот так подключишь статичекски, а у юзера огл 1.0. Вот и будет мучиться. А так хоть можно сказать пользователю, мол, дрова скачай 8)
Другими словами, в сабже не вижу смысла 8)


 
grisme ©   (2006-02-23 03:37) [2]

Кефир87 ©   (22.02.06 18:43) [1]
Спасибо за ответ, но я, видимо, не верно вопрос задал, сорри...
Переформулирую: Нужен заголовочник со всеми(ну с большинством =) расширениями - а какие не буду использовать - повыкидываю...=) В C++ там, вроде, есть такая штука - glext.h.


 
MeF Dei Corvi ©   (2006-02-23 04:03) [3]

http://delphigl.com/do_download.php?f=12000


 
grisme ©   (2006-02-23 04:36) [4]


> MeF Dei Corvi ©   (23.02.06 04:03) [3]


Tnx, man... То, что нужно...и немного больше... =) ПасЫба! =)


 
Pa5ha   (2006-02-24 22:46) [5]

Хочу поюзать vbo. Хочу статическую линковку. Как мне быть? Как прилинковать процедуры из библиотеки глут?


 
Pa5ha   (2006-02-24 23:26) [6]

Есть книга Расширения ОпенГЛ Борескова. Есть библиотека глут с компакта от книги. Там заголовки на си. Если я правильно понял, функции по работе с vbo находятся в библиотеке глут32. Реально прилинковать статически функции аттудава переложив все проблемы в гл1.0 на попу пользователя и уложиться в пару строк, так, чтоб вбо работало?


 
grisme ©   (2006-02-25 15:00) [7]


> Pa5ha   (24.02.06 22:46) [5] Как мне быть?


Ищи ПОЛНОЕ описание функций, которые тебе нужны и линкуй себе на здоровье :) Или ты вообще не знаешь, как линковать статически? Ж)


 
Pa5ha   (2006-02-25 19:21) [8]

grismem, ok. %) Там надо не больше десятка функций. Кстати, как называется глут правильно? glut.dll или glut32.dll? И откуда он должен был взяться на моем компьютере. Ибо когда какая-то прога у меня его попросила, то пришлось в нете искать, но прога с ним заработала. ХР поддерживает ведь вроде только гл1.1?


 
Yanis ©   (2006-02-26 11:11) [9]

http://www.soft-gems.net/OpenGL_SG.php


 
ancara ©   (2006-02-26 11:56) [10]


> Pa5ha


vbo не в глут находится. Она в nvoglnt.dll у нвидии, у ати не знаю где...
Причем в секции экспорта ее почему-то не видно...
Дело твое конечно, но так нельзя делать, статически...
Всего-то надо написать LoadLibrary да wglGetProcAddress, и если nil - спокойно выходим. Зачем тебе такой изврат со статикой?


 
Pa5ha   (2006-02-27 22:54) [11]

*встал в угол :)

Спасибо всем!


 
Pa5ha   (2006-02-27 23:14) [12]

ancara, а чего лоадлайбрари? Откуда загрузить?

По ссылке ходил, качал, там вбо нету.

А может у кого-нить слуайно исходничок завалялся? Нагуглить ничего не получилось.


 
TWINc ©   (2006-02-28 00:21) [13]

xproger.mirgames.ru :) там есть пример с ландафтом


 
ancara ©   (2006-02-28 12:04) [14]

type
 TwglGetProcAddress = function(ProcName: PChar): Pointer; stdcall;
 TglGenBuffersARB = procedure(n: TGLsizei; buffers: PGLuint); stdcall;

var
 LibHandle: DWORD;
 wglGetProcAddress: TwglGetProcAddress;
 glGenBuffersARB: TglGenBuffersARB;

implementation

procedure Init;
begin
 LibHandle := LoadLibrary("OpenGL32.dll");
 wglGetProcAddress := GetProcAddress(LibHandle, "wglGetProcAddress");
 glGenBuffersARB := TglGenBuffersARB(wglGetProcAddress("glGenBuffersARB");
end;


 
Pa5ha   (2006-03-04 12:07) [15]

Что-то блин иногда не могй зайти на форум. В чем дело?

Спасибо. Кажется, это то, что надо. ХПроггер как всегда на высоте.


 
Pa5ha   (2006-03-06 21:58) [16]

Итак, стал разбираться. Написал пример - не работает. Два дня искал багу, сделал последовательность команд, в точности, как у ХПрогер-а. Не работает. Блин, версий, почему не работает больше не осталось. Вылезает рантайм еррор при попытке вывода DrawElements.

Если есть добрый человек, то пример http://sampo.ru/~pashav/others/basicengine.rar 45 кб. В исходнике много мусора, много лишнего, много требуещих дописывания моментов.

Карта гф4, остальные примеры работают.

Что значат команды
glActiveTextureARB
glClientActiveTextureARB?

Почему в примере с диска к книге Борескова "Расширения ОпенГЛ" в примере вбо (гл. 10) перед glDrawElements идет строка glBindBufferARB(GL_ARRAY_BUFFER_ARB, 0 ); ? Больше бинда с GL_ARRAY_BUFFER_ARB нету.

Куски моего кода (может, на вскидку ошибка будет выявлена).
var
 vertexId,
 indexId: DWORD;
var
 v: array of tCoord;
 n: array of tCoord;
 t: array of tTexCoord;
 Faces: array of word;
 faces_count:integer;
 v_count: integer;
const
 r:single=1.0;
 rbig:single=1.5;
 RepeatTextureX:single=2.0;
 RepeatTextureY:single=2.0;

procedure GenerateTorus(rings,sides: integer);
var i,j:integer;
a,b,c:Single;
vi,fi:integer;
//tmp: tvert;
tmpv:tCoord;
tmpn:tCoord;
tmpt:tTexCoord;
begin
 faces_count:= rings*sides*2;
 v_count:= rings*sides;
SetLength(V,v_count);
SetLength(n,v_count);
SetLength(t,v_count);
SetLength(Faces,faces_count*3);
vi:=0;fi:=0;
 for i:=0 to rings-1 do
   begin
     c:=2*pi/i*rings;
     for j:=0 to sides-1 do
       begin
         a:=r*sin(2*pi/j*sides);
         b:=r*cos(2*pi/j*sides);
         V[vi].x:=a+rbig;
         V[vi].y:=b;
         V[vi].z:=0;
         t[vi].u:=RepeatTextureX/i*rings;
         t[vi].v:=RepeatTextureY/j*sides;
         n[vi].x:=a;
         n[vi].y:=b;
         n[vi].x:=0;
         // rotating ring
         //tmp:=Vertices[vi];
         tmpv:=v[vi];
         tmpn:=n[vi];
         tmpt:=t[vi];
         V[vi].x := cos(c) * tmpv.x - sin(c) * tmpv.z;
         V[vi].z := sin(c) * tmpv.x + cos(c) * tmpv.z;
         n[vi].x := cos(c) * tmpn.x - sin(c) * tmpn.z;
         n[vi].z := sin(c) * tmpn.x + cos(c) * tmpn.z;
         inc(vi);
       end;
   end;

 for i:=0 to rings-1 do
   for j:=0 to sides-1 do
     begin
       faces[fi]   := i*sides+j;
       faces[fi+1] := i*sides+(j+1) mod sides;
       faces[fi+2] := ((i+1) mod rings)*sides+(j+1) mod sides;

       faces[fi+3] := i*sides+j;
       faces[fi+4] := ((i+1) mod rings)*sides+(j+1) mod sides;
       faces[fi+5] := ((i+1) mod rings)*sides+j;

       fi:=fi+6;
     end;

end;

кусок glDraw();
glActiveTextureARB(GL_TEXTURE0);
glEnable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D, Texture);
glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
glClientActiveTextureARB(GL_TEXTURE0);
glEnableClientState(GL_TEXTURE_COORD_ARRAY);

glEnableClientState(GL_VERTEX_ARRAY);

glBindBufferARB(GL_ARRAY_BUFFER_ARB, vertexId);//V_Buff);
glBindBufferARB(GL_ELEMENT_ARRAY_BUFFER_ARB, indexId);//F_Buff);

 p_ver:=pointer(0);
 p_tex:=pointer(v_count*sizeof(tCoord)+v_count*sizeof(tCoord));
 p_nor:=pointer(v_count*sizeof(tCoord));
 p_face:=pointer(0);

  glClientActiveTextureARB(GL_TEXTURE0);
     glTexCoordPointer(2, GL_FLOAT, 0, p_tex);
  glVertexPointer(3, GL_FLOAT, 0, p_ver);
  glDrawElements(GL_TRIANGLES, 3*faces_count, GL_UNSIGNED_SHORT, p_face);

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

glDisableClientState(GL_VERTEX_ARRAY);

glClientActiveTextureARB(GL_TEXTURE0);
glDisableClientState(GL_TEXTURE_COORD_ARRAY);
glActiveTextureARB(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, 0);
glDisable(GL_TEXTURE_2D);

создание буфера:
   glGenBuffersARB ( 1, @vertexId );
   glBindBufferARB ( GL_ARRAY_BUFFER_ARB, vertexId );
   glBufferDataARB ( GL_ARRAY_BUFFER_ARB, v_count*(sizeof(tCoord)+sizeof(tCoord)+sizeof(tTexCoord)){ * sizeof ( Vertex )}, nil, GL_STATIC_DRAW_ARB );
   glBufferSubDataARB(GL_ARRAY_BUFFER_ARB, 0, v_count*sizeof(tCoord), @V);
   glBufferSubDataARB(GL_ARRAY_BUFFER_ARB, v_count*sizeof(tCoord), v_count*sizeof(tCoord), @n);
   glBufferSubDataARB(GL_ARRAY_BUFFER_ARB, v_count*(sizeof(tCoord)+sizeof(tCoord)), v_count*sizeof(tTexCoord), @t);
   glBindBufferARB ( GL_ARRAY_BUFFER_ARB,         0 );

                                           // create index data VBO
   glGenBuffersARB ( 1, @indexId );
   glBindBufferARB ( GL_ELEMENT_ARRAY_BUFFER_ARB, indexId );
   glBufferDataARB ( GL_ELEMENT_ARRAY_BUFFER_ARB, faces_count*sizeof(word){ * sizeof ( Face )}, @Faces, GL_STATIC_DRAW_ARB );
   glBindBufferARB ( GL_ELEMENT_ARRAY_BUFFER_ARB, 0 );


 
XProger ©   (2006-03-06 23:15) [17]

1) @V @n, @t, @Faces - указатели на описание дин массивов, а не на их содержимое.
Исправить на @V[0] @n[0], @t[0], @Faces[0]

2)
glBegin(GL_TRIANGLES);
for i := 0 to faces_count div 3 - 1 do
 for j := 0 to 2 do
  glVertex3fv(@V[Faces[i * 3 + j]]);
glEnd;

вместо кода отрисовки, рисует тоже самое, что рисуется при исправлении ошибки пункта 1 %)

Вывод: генерируется нечто не хорошее (у меня прямая линия например)... ;)


 
XProger ©   (2006-03-06 23:24) [18]

Обманываю...
В момент передачи массива, в V хранятся NAN значения ;)
Угадай почему? ;)
     for j:=0 to sides-1 do
       begin
         a:=r*sin(2*pi/j*sides);

Остальное, за тобой ;)


 
Pa5ha   (2006-03-07 00:51) [19]

Нда, над тором ещё придется поработать :) Красивую синюю линию я уже увидел :) А вот насчет момента передачи намек что-то не понял... Ну пусть там храняться неопределенные значения, а в фейсах? Наверно тоже?

Странно, что sizeof(v) равное 4 байта меня раньше не навело ни на какие мысли :))

И ещё. Я так понял, в буфере индексов нельзя отдельно для каждой вершины задать индекс координат вершины, нормаль и текстурные координаты. Просто я пользуюсь форматом obj, а там в каждом фейсе 9 индексов т.е. на каждую из трех вершин приходится 3 индекса: на координаты вершины, нормаль и текстурные координаты. Придется переписывать конвертер формата?


 
XProger ©   (2006-03-07 00:57) [20]

a:=r*sin(2*pi/j*sides);
Если это не понятно, то у тебя j = 0...

Индексов на нормали и текстурные координаты вершины - индексы фейсов.


 
Pa5ha   (2006-03-07 01:03) [21]

Блин, меня сегодня глючит конкретно после автомастерской :) Тогда, видно тоже. Спасибо. Но почему ошибка деления на нольне вылезла ни разу?

И, кстати, тот рантайм еррор все равно вылезает :)


 
Pa5ha   (2006-03-07 01:07) [22]

Все работает. Мои косяки генерации кривого тора. 3* faces_count вместо прсто faces_count %) Только вот фпс не радует совсем. С выводом через указатели было 250, с вбо 200.

и последний на сегодня вопрос, что же все-таки такое
glActiveTextureARB
glClientActiveTextureARB?


 
XProger ©   (2006-03-07 01:13) [23]

Еррор не вылезает т.к.
// SysUtils,
а в нём как раз прописана обработка этих ошибок :)

VBO проявляет свою истинную силу при > 3000 полигонов.

glActiveTextureARB
glClientActiveTextureARB
Включают текстурирование (обычно мультитекстурирование) при передаче индексов. Т.е. включил 0 блок, передал текстурные координаты для первой текстуры, 1 блок передал для второй и т.д. :)


 
Pa5ha   (2006-03-07 01:24) [24]

в смысле в чем разница между этими командами? Какую раньше писать?


 
Pa5ha   (2006-03-07 01:28) [25]

Блин, опять не смог все  в одной мессаге.

СисУтилс я отключил перед тем, как запаковать и залить файлы. И все равно ошибок небыло.

GL_INDEX_ARRAY - а как без этого работает? В примере на си это было :)
   glBindBufferARB          ( GL_ARRAY_BUFFER_ARB, 0 );
   glEnableClientState      ( GL_INDEX_ARRAY  );
   glBindBufferARB          ( GL_ELEMENT_ARRAY_BUFFER_ARB, indexId );
   glIndexPointer           ( GL_UNSIGNED_INT, 0, 0 );

                                               // request draw
   glDrawElements  ( GL_TRIANGLES, 3*numFaces, GL_UNSIGNED_INT, 0 );

Кстати, в этом куске кода биндится нулевой буфер. И ведь компилируется, работает и выложено на компакте.


 
Pa5ha   (2006-03-16 13:39) [26]

Пытался написать демку с вбо. 9 машин по 1705 полигонов. В каждой по 223 бинда текстуры (блин, только ща заметил, надо написать оптимизатор), на gf4mx440 фпс 90, без биндов 100, на х700 фпс 110 с биндами. Почему фпс такой мелкий? Как его сделать побольше? Пример на всякий случай.
http://sampo.ru/~pashav/projects/basic_game_engine.rar

И фпс не меняется ни на единицу, если использовать передачу через указатель или с помощью вбо. Т.е. шины 16х агп хватает? А процессор разгружается в таком случае или возвращение из процедуры рисования происходит при завершении оного?



Страницы: 1 вся ветка

Текущий архив: 2007.01.21;
Скачать: CL | DM;

Наверх




Память: 0.54 MB
Время: 0.051 c
2-1167476157
ламер 2.Х
2006-12-30 13:55
2007.01.21
Indy


15-1167083250
Footballer
2006-12-26 00:47
2007.01.21
Прикол от Bornald


15-1167689863
SkySpeed
2007-01-02 01:17
2007.01.21
Где взять ShellContextMenuEx.dcu ?


15-1167366197
NGr
2006-12-29 07:23
2007.01.21
Чем удобнее читать группы новостей ?


15-1167224986
DelphiLexx
2006-12-27 16:09
2007.01.21
Что такое +jt