Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Игры";
Текущий архив: 2007.01.21;
Скачать: [xml.tar.bz2];

Вниз

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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.53 MB
Время: 0.069 c
11-1142160418
homm
2006-03-12 13:46
2007.01.21
Flat Controls


2-1167221075
harusha
2006-12-27 15:04
2007.01.21
DLL


2-1167760801
bolt
2007-01-02 21:00
2007.01.21
Как узнать на какой ITEM в TreeView щелкаем?


15-1167264430
@!!ex
2006-12-28 03:07
2007.01.21
Булевы функции. Классы поста.


15-1167318733
Strate
2006-12-28 18:12
2007.01.21
Отладка





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский