Toon posts:

[OpenGL] ruzie met lists + dynamiek

Pagina: 1
Acties:

Verwijderd

Topicstarter
Hallo!

Ik ben een spel aan het maken, ben al aardig gevorderd, het laadt 3d files uit 3d studio, genereert lightmaps op basis van de zon en alle lampjes in de buurt van een triangle en pleurt het vervolgens per '3d object' in een opengl list.

Nu loop ik tegen een probleem op; ik wil graag nog wat dynamische dingen doen. Bijv; een mooie specular glim die afhankelijk is van de hoek tussen de speler, de triangle en de zon/licht. En evt een dynamische vertex color op basis van de zon, zodat alles mooi wordt gelight als ik de zon stiekem ietsje-sneller-dan-realistisch-is onder laat gaan O-) (alan wake eat your hearth out!)

Je snapt het probleem al; mijn opengl list is niet meer aanpasbaar, dus kan ik (voor zover ik weet) niets meer veranderen aan de vertex colors of de lightmap texture.

Ik heb alles vervolgens omgezet naar vertex arrays/vbo's om er vervolgens achter te komen dat dit een soortgelijk probleem geeft - de array wordt natuurlijk per x triangles in een keer op getekend, dus nu kan ik niet eens een per-triangle-lightmap inladen (vertex colors moet in dit geval nog wel lukken met een color array, maar zonder per pixel lightmaps ziet het er toch niet echt blits uit).

De enige oplossing die ik kan verzinnen is alles per frame letterlijk tekenen zonder lists of array's; maarja, dan kom ik ruim onder de 20fps ..

Red me uit deze penarie, OpenGL guru's! :D

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 09:08

.oisyn

Moderator Devschuur®

Demotivational Speaker

Waarom zou je niet dynamisch arrays kunnen opbouwen? Gewoon per lightmap een array bijhouden, en als een triangle door een lightmap belicht moet worden stop je 'm in die array.

Handiger is overigens het werken met indices, dan kun je je vertex array constant houden en met indices je triangles definieren (scheelt een hoop bandbreedte!)

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Verwijderd

Topicstarter
.oisyn schreef op maandag 09 oktober 2006 @ 14:55:
Waarom zou je niet dynamisch arrays kunnen opbouwen? Gewoon per lightmap een array bijhouden, en als een triangle door een lightmap belicht moet worden stop je 'm in die array.
ik snap niet helemaal wat je bedoeld.. elke triangle heeft een aparte (aan het begin berekende) lightmap he, dus dan zou je $trianglecount arrays van 1 triangle hebben hehe.. das vast niet veel rapper dan het zonder vertex arrays tekenen van alles..
of bedoel je iets anders?
.oisyn schreef op maandag 09 oktober 2006 @ 14:55:
Handiger is overigens het werken met indices, dan kun je je vertex array constant houden en met indices je triangles definieren (scheelt een hoop bandbreedte!)
das een goeie :)

[ Voor 4% gewijzigd door Verwijderd op 09-10-2006 16:29 ]


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 09:08

.oisyn

Moderator Devschuur®

Demotivational Speaker

Verwijderd schreef op maandag 09 oktober 2006 @ 16:29:

ik snap niet helemaal wat je bedoeld.. elke triangle heeft een aparte (aan het begin berekende) lightmap he, dus dan zou je $trianglecount arrays van 1 triangle hebben hehe.. das vast niet veel rapper dan het zonder vertex arrays tekenen van alles..
of bedoel je iets anders?
Nee, dit bedoel ik idd, maar ik had de situatie wat anders ingeschat. Als je per triangle een andere texture hebt ben je natuurlijk sowieso al screwed en zou ik als de wiedeweerga maar eens gaan zorgen dat dit niet het geval is, door de lightmaps op een grotere lightmap-texture te zetten, zodat veel triangles dezelfde texture kunnen gebruiken. :)

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Verwijderd

Topicstarter
jah das waar, dan kan ik natuurlijk met een texture coord array wel doen wat ik wil :)
alleen is wel lastig om een functie te schrijven die x lightmaps van verschillende resoluties fatsoenlijk in een grote texture indeelt...
is er geen makkelijkere mogelijkheid? zoniet dan ga ik er maar eens aan beginnen :)

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 09:08

.oisyn

Moderator Devschuur®

Demotivational Speaker

Verwijderd schreef op dinsdag 10 oktober 2006 @ 21:52:
is er geen makkelijkere mogelijkheid?
Nee, een texture per triangle betekent per definitie batches van slechts 1 triangle. Dat is zo'n beetje de slechtst mogelijke manier om te renderen :)

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Verwijderd

Topicstarter
okay dan ga ik voor de ingedeelde grotere lightmap textures..
kan ik trouwens ook voor sommige triangles lightmap textures uitzetten? ik heb het nu nl zo dat kleine triangels gewoon vertex colors gebruiken, dus met de light intensity alleen berekend op de hoekpunten. of zou het weinig uitmaken qua snelheid als ik deze triangles gewoon een 2x2 pixel lightmap texture op de grote texture gun?

bedankt voor de hulp trouwens :)

[ Voor 4% gewijzigd door Verwijderd op 11-10-2006 05:34 ]


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 09:08

.oisyn

Moderator Devschuur®

Demotivational Speaker

En triangle met allemaal dezelfde texture coordinaten zijn idd vrij gratis - de data hoeft maar voor 1 pixel opgehaald te worden en daarna staat het in de cache. Bovendien hoef je dan niet een andere batch voor deze triangles op te zetten, wat je performance weer ten goede komt. Dus ik zou zeggen dat je er juist mee wint om het op die manier te doen :)

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.

Pagina: 1