|
dev.gamez.lv Latvian Game Developers Community
|
View previous topic :: View next topic |
Author |
Message |
s1 Guest
|
Posted: Thu Apr 07, 2005 2:28 pm Post subject: optimizācija |
|
Jā, optimizācija. Pirms poligonu skaits nepārsnierdza pāris tūkst., par to vispār nedomāju. Lieta tāda, viens objekts sastāv no ~2000 poligoniem, tad ir ap 100FPS. Ja pielieku klāt vēk 3 tādus pašus objektus - 50FPS. Vairāk nēesmu mēģinājis. Pamēģināju arī "Listus", taču no tā nekas nemainas. Vai ir kādi ieteikumi, kā var šo lietu optimizēt. Protams viena izeja ir - poligonu skaita samazināšana, es ceru ka tā nav vienīgā izeja. |
|
Back to top |
|
|
anggelus
Joined: 23 Feb 2005 Posts: 383 Location: Rīga (LV)
|
Posted: Thu Apr 07, 2005 2:41 pm Post subject: |
|
Pamēģini VBO ( Vertex Buffer Object ), protams, ja tu jau to nelieto. VBO izmantošana paātrina poligonu renderēšanu. _________________ No comprendo lo que dice. |
|
Back to top |
|
|
s1 Guest
|
Posted: Thu Apr 07, 2005 3:06 pm Post subject: |
|
VBO! pirmā dzirdēšana, kas tas ir? Vai tas nav tipa glNewList(); utt. ? |
|
Back to top |
|
|
bubu Indago Uzvarētājs
Joined: 23 Mar 2004 Posts: 3223 Location: Riga
|
|
Back to top |
|
|
anggelus
Joined: 23 Feb 2005 Posts: 383 Location: Rīga (LV)
|
Posted: Thu Apr 07, 2005 3:26 pm Post subject: |
|
Palasi nVidia izdotos papīrus, tur diezgan labi aprakstīts kā optimizēt OpenGL programmas.
Un piemēru arī daudz ir gandrīz katram papīram _________________ No comprendo lo que dice. |
|
Back to top |
|
|
s1 Guest
|
Posted: Fri Apr 08, 2005 10:10 am Post subject: |
|
paldies par adresēm, bet varbūt kāds no jums grib pierādīt savu zināšanu līmeni un erudīciju, pārtūlkojot šo kodu uz Delfīnu
Code: |
if (strstr(glGetString(GL_EXTENSIONS,"ARB_vertex_buffer_object"))
{
//get function pointers using SDL_GL_GetProcAddress(..)
// (could be using wglGetProcAddress(..) too)
PFNGLBINDBUFFERARBPROC pglBindBufferARB = (PFNGLBINDBUFFERARBPROC)
SDL_GL_GetProcAddress("glBindBufferARB");
PFNGLGENBUFFERSARBPROC pglGenBuffersARB = (PFNGLGENBUFFERSARBPROC)
SDL_GL_GetProcAddress("glGenBuffersARB");
PFNGLBUFFERDATAARBPROC pglBufferDataARB = (PFNGLBUFFERDATAARBPROC)
SDL_GL_GetProcAddress("glBufferDataARB");
supportsVertexBuffer = true;
} |
|
|
Back to top |
|
|
bubu Indago Uzvarētājs
Joined: 23 Mar 2004 Posts: 3223 Location: Riga
|
Posted: Fri Apr 08, 2005 12:41 pm Post subject: |
|
Īsti nezinu kādu datu tipu atgriež fja SDL_GL_GetProcAddress(), bet laikam šādi vajadzētu strādāt:
Code: | var
glBindBufferARB: procedure(target: GLenum target; buffer: GLuint); stdcall;
glGenBuffersARB: procedure(n: GLsizei; buffers: PGLuint); stdcall;
glBufferDataARB: procedure(target: GLenum; size: GLsizei; data: PGLvoid; usage: GLenum); stdcall;
if (strpos(glGetString(GL_EXTENSIONS, pChar("ARB_vertex_buffer_object")))<>nil) then begin
glBindBufferARB := SDL_GL_GetProcAddress(pChar("glBindBufferARB"));
glGenBuffersARB := SDL_GL_GetProcAddress(pChar("glGenBuffersARB"));
glBufferDataARB := SDL_GL_GetProcAddress(pChar("glBufferDataARB"));
supportsVertexBuffer := true;
end; |
P.S. varēji jau paņemt kādu gatavu Delphi OpenGL bibliotēku ar visiem extensioniem, kur viss šitais jau būs gatavs, piemēram: http://www.delphigl.com/download.php?cat=5 (OpenGL 1.5 Header dglOpenGL.pas)
Last edited by bubu on Fri Apr 08, 2005 9:43 pm; edited 1 time in total |
|
Back to top |
|
|
s1 Guest
|
Posted: Fri Apr 08, 2005 5:48 pm Post subject: |
|
bubu, apbrīnojamas zināšanas!
Beidzot www.delphigl.com ir arī angliski! |
|
Back to top |
|
|
Angel
Joined: 02 Jan 2005 Posts: 113 Location: Latvija
|
Posted: Fri Apr 08, 2005 10:46 pm Post subject: |
|
Vai nav vienalga kaadaa valodaa? vaacu valodu vispaar nezinu bet kaut kaadu nojausmu no taa guut var... Vaacu jau ir ljoti liidziiga anglju valodai, takaa lasi un tildee ir latv-vacu , ja nemaldos... |
|
Back to top |
|
|
Kamazs Guru
Joined: 17 Jan 2003 Posts: 829 Location: The glorious ancient city of Loja
|
Posted: Sat Apr 09, 2005 7:17 am Post subject: |
|
Quote: | Vai nav vienalga kaadaa valodaa? vaacu valodu vispaar nezinu bet kaut kaadu nojausmu no taa guut var... |
Nee, man, piemeeram, pilniigi nav vienalga. Es tutorus vai manuaaljus labaak lasu tieshi angliski, ne latviski, ne krieviski, ne vaaciski, ne itaaliski, ne spaaniski, ne franciski (lai gan teoreetiski zinu visas nosauktaas). Sauc to par muljkjiigu aizspriedumu, bet angliski man ir daudz saprotamaak un skaidraak. _________________ ...un es uzskatu, ka Fallout ir etalons |
|
Back to top |
|
|
anggelus
Joined: 23 Feb 2005 Posts: 383 Location: Rīga (LV)
|
Posted: Sat Apr 09, 2005 9:35 am Post subject: |
|
Man gan likās te bija runa par pārtulkošanu no C uz Delphi
Bet, ja jau par šo aizsālās saruna, tad es ar labāk lasu angļu valodā, arī liekas daudz saprotamāk. Iespējams dēļ tulkotajiem terminiem ir grūtāk saprotamas pamācības citās valodās. _________________ No comprendo lo que dice. |
|
Back to top |
|
|
s1 Guest
|
Posted: Sat Apr 09, 2005 7:53 pm Post subject: |
|
Iskatās, ka daži jau novirzījušie no tēmas . Tas tā, runājot par optimizāciju, izmēģināju anggelus ieteikti vbo. Tiešām ātrdarbība pieauga aptuveni 2x. Vai šis rādītājs ir normāls, man pašam liekas, ka ātrdarbībai vajadzēja pieaugt, nu, vismaz kādas 3-4 reizes. Kāda ir jūsu pieredze? |
|
Back to top |
|
|
AL_Edgars Guest
|
Posted: Mon Apr 11, 2005 2:15 pm Post subject: |
|
Ko lai es saku ar saviem 100 000 poligoniem?
Tas ir 65 objekti ar katrs savu daudzumu. Lai kas interesanti, tieši lielie objekti pēc platības noēd rersursus. Ja mums ir 5000 poli māja, tad tā noēdīs vairāk nekā, ja man būs lode ar 10 000. Tāpēc, ka vēl svarīgi ir tekstūras. Tās tev ir 2038*2048 vai 128*128 pixels? Tā ir galvenā problēma. |
|
Back to top |
|
|
s1 Guest
|
Posted: Mon Apr 11, 2005 9:27 pm Post subject: |
|
Runājot par textūrām, ir radusies problēma. Kā lai uzbindo katram poligonam noteiktu textūru?
Līdz šim, ciklā pirms glVertex, vienkārši uzbindoju textūru, bet tagad cikla nav. Šādi tagad tiek uzzīmēta grafika:
Code: |
//izveidojam buferobjektu
glGenBuffersARB(1, @bufferObject);
//sagatavojam to
glBindBufferARB(GL_ARRAY_BUFFER_ARB, bufferObject);
//saglabājam buferī datus
glBufferDataARB(GL_ARRAY_BUFFER_ARB, sizeof(data), @data, GL_STATIC_DRAW_ARB);
glInterleavedArrays(GL_T2F_V3F, SizeOf(TVertex), nil);
glDrawArrays(GL_TRIANGLES, 0, 3);
|
Vai ir kādi ierosinājumi? |
|
Back to top |
|
|
GiGa Indago Uzvarētājs
Joined: 25 Sep 2003 Posts: 887
|
Posted: Mon Apr 11, 2005 9:31 pm Post subject: |
|
Jaaziimee pa daljaam, taksh. Vienkaarshi uztaisi VBO katram objektam ar citu textuuru, un dari: bind/render; bind/render; pa vidu glDrawArrays(GL_TRIANGLES, 0, 3); nu nekaadiigi nesamainiisi textuuru. _________________
|
|
Back to top |
|
|
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
Powered by phpBB © 2001, 2005 phpBB Group
|