![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Рисование большого ландшафта [Delphi, OpenGL]
Ricks © (2005-09-19 22:57:00)Каким образом лучше всего рисовать большой ландшафт, если учитывать что на каждый квадрат накланывается тайл текстуры (изображение 512x512). GL_TRIANGLE_STRIP уже на 32x32 ландшафте тормозит...
XProger (2005-09-21 01:44:00) [1]500 моделей по 300 поликов на 3-6 фпс дают меньше с использованием VBO
GF FX 5200 128 mb AGP 4x
NE_Parovoz (2005-09-20 23:35:00) [2]//offtop
счас потестю, вот для 32k треугов c текстурами(и шейдером).
все 32k одним стрипом:
glDrawArrays VBO ~9.5*10^6 tri/sec
glDrawArrays ~7.5*10^6 tri/sec
это же, но без тектур(и без ш.)
glDrawArrays VBO (!) ~1.15*10^ 9tri/sec (упала скорость
glBufferSubDataARB() в ~10 раз (usage=GL_STREAM_DRAW_ARB))
glDrawArrays ~13*10^6 tri/sec
а тепер лоу-поли(с текстурами и без ш.)
286 - GL_TRIENGLES
glDrawElements VBO ~12.5*10^6 tri/sec
glDrawElements ~4.5*10^6 tri/sec
всё это на GF4 MX440 128mb vram agp8x(работает на 4x :)
XProger, как видиш у меня разница неплохая, и именно на индексированной (да ищщё и low-poly) геометрии
XProger (2005-09-20 21:39:00) [3]NE_Parovoz, ниже чем у glDrawElements как ни странно :)
NE_Parovoz (2005-09-20 19:33:00) [4]XProger, ну ниже скорость точно не станет
A22 (2005-09-20 18:40:00) [5]Оффтоп: я скоро начну истерически смеяться при виде набора символов "XTropper"
Ricks, статься на геймдеве хорошая, нет в нет только Occlusion теста - тест на перекрытие одного объекта другим. Например, ближайшим холмом остальных 99% твоего ландшафта. На эту тему статься есть на dtf.ru - почитай. Сделать большой ландшафт быстро выводимым - реальность :)
XProger (2005-09-20 18:25:00) [6]Ricks, в том же XTropper реализовано с ландшафтом 128х128...
NE_Parovoz, VBO для низкополигональных моделей < 10000 не рулит абсолютно!
NE_Parovoz (2005-09-20 16:34:00) [7]меш, можно побить на куски, и в VBO, потом отрисовка с проверкой попадания AABB в frustum
Ricks (2005-09-20 00:41:00) [8]Код:
var
Mesh : array [ 0..sqr(n) * 3 ] of TVector;
TC : array [ 0..sqr(n) * 3 ] of TBasicTextureVectors;
NV : Integer;
a : single;
T : Cardinal;
implementation
procedure BuildMesh;
var x, z, k : integer;
d : single;
begin
d:=n div 2;
k:=0;
for z:=0 to pred(n) do begin
if z mod 2 = 0 then begin
x:=0;
while x <= n do begin
if (x mod 2 = 0)
then TC[k]:=TexCoords( 7/8 + 1/200, 1/8 - 1/200 )
else TC[k]:=TexCoords( 1 - 1/200, 1/8 - 1/200 );
Mesh[k]:=Vector( x - d, 0, z - d);
Inc(k);
if (x mod 2 = 0)
then TC[k]:=TexCoords( 7/8 + 1/200, 1/200 )
else TC[k]:=TexCoords( 1 - 1/200, 1/200 );
Mesh[k]:=Vector( x - d, 0, z + 1 - d);
Inc(k);
inc(x);
end;
end else begin
x:=n;
while x >= 0 do begin
if (x mod 2 = 1)
then TC[k]:=TexCoords( 7/8 + 1/200, 1/200 )
else TC[k]:=TexCoords( 1 - 1/200, 1/200 );
Mesh[k]:=Vector( x - d, 0, z + 1 - d );
Inc(k);
if (x mod 2 = 1)
then TC[k]:=TexCoords( 7/8 + 1/200, 1/8 - 1/200 )
else TC[k]:=TexCoords( 1 - 1/200, 1/8 - 1/200 );
Mesh[k]:=Vector( x - d, 0, z - d );
Inc(k);
dec(x);
end;
end;
end;
NV:=pred(K);
end;
procedure TMainForm.Render;
var x : integer;
begin
glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);
glLoadIdentity;
gluLookAt( (6) * cos(a), 10, (6) * sin(a), 0, 0, 0, 0, 1, 0);
glBindTexture(GL_TEXTURE_2D, T);
glBegin(GL_TRIANGLE_STRIP);
for x:=0 to NV do begin
glTexCoord2fv(@TC[x]);
glVertex3fv(@Mesh[x]);
end;
glEnd;
end;
Signate (2005-09-20 00:00:00) [9]http://www.gamedev.ru/articles/?id=30125&page=2
Zer0 (2005-09-19 23:50:00) [10]код в студию.
Signate (2005-09-19 23:49:00) [11]Попробуй гео-маппинг