Текущий архив: 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.52 MB
Время: 0.037 c