Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
Jonathan_Klein Living Legend

Alter: 37 Anmeldedatum: 17.02.2003 Beiträge: 3433 Wohnort: Siegerland Medaillen: Keine
|
Verfasst am: 05.09.2005, 20:47 Titel: Iso 2D-Spiel ZBufferproblem |
|
|
Also, nehmen wir an ich mache ein Iso Spiel. Dann hab ich leider ein Z-Buffer Prob, welches ich mal anhand von Age of
Empires zu erklären verscuhe (sollte jeder kennen).
Also, nehmen wir an das Level ist ein Array. Das die Bäume alle schön hintereinander sind, aknn man noch erreichen wenn mans in der richtigen Reihenmfolge rendert. Nur wenn dann ncoh variable Objekte hinzukommen, writs doof. Sagen wird die figur steht hinter nem Baum. Normalerweise würde ich erst das level rendern, also erscheint der Spieler vor dem Baum. Ich könnte natürlich auch erst alle flachen Levelbestandteile rendern, also, Bodentextur, und dann die Figuren drauf machen. Dann hab ich aber auch n Problem mit den Bäumen. Auch wenn 2 Figuren hintereinander anzeige, ist das auch doof.
Nun hab ich 2 Lösungen, von denen mir keine so recht gefallen will:
1. Ich render erst den ganzen Boden, mit den Texturen. Danne erstell ich ne Liste mit allen Objekten die net auf der höhe des Bodens sind, also statische Levelobjekte, Figuren Gegenstände und so. Dafür muss ich erstmal bisschen überlegen wie ich die Weite berechne, aber das dürfte nciht son rießiges Problem sein.
2. Ich programmeire mir n Art Z-Buffer genau wie in D3D. Dumemrweise müsste ich dann wohl alle Pixel einzeln setzen, was bestimmt auch nicht so leicht und vor allen Dingen schnell ist.
Eigentlich tendiere ich zur ersten Lösung, allerdings, wenn man viele Bäume (n Wald) viele figuren (ne Armee) und viel sonstigen Kram habe, dann muss ich sehr viel sortieren und so. Meint ihr das wäre die optimale Lösung, oder hab ihr bessere Ideen? Achja, zum sortieren, kann ich doch bestimmt STL benutezn oder, da müsste es doch so Algos geben. Achja, könnte man dann Listen einfacher Sortieren wie Vectoren? _________________ https://jonathank.de/games/ |
|
Nach oben |
|
 |
Dr. Best Senior JLI'ler

Alter: 35 Anmeldedatum: 17.06.2004 Beiträge: 269 Wohnort: Köln Medaillen: Keine
|
Verfasst am: 05.09.2005, 21:06 Titel: |
|
|
Ich würde ehr Lösung eins verwenden. Das sortieren geht relativ einfach *schnell "3D-Effekte für Spieleprogrammierer" aufschlag*:
Du kannst dazu qsort() verwenden. Diese Funktion ruft für jedes Objekt, das es zu sortieren gilt eine call back funktion auf die die Entfernung des Objekts zurückgibt und ordnet sie in dem Input-Feld dann entsprechend.
Ich zitiere einfach mal gerade eine codezeile aus 3D-Effekte f. S. um zu zeigen wie das dann aussieht:
Code: | CAsteorid Asteorid[100];
// Alle Asteoriden initialisieren und bewegen und so
qsort(&Asteorid[0], NumAsteorids, sizeof(CAsteorid), ObjektSortCB); // Das letzte ist die callback funktion
// Alle Asteoriden in einer Schleife rendern |
Hoffe das hilft dir weiter
mfg
Dr. Best _________________
Ich bin da, wer noch? |
|
Nach oben |
|
 |
Jonathan_Klein Living Legend

Alter: 37 Anmeldedatum: 17.02.2003 Beiträge: 3433 Wohnort: Siegerland Medaillen: Keine
|
Verfasst am: 05.09.2005, 21:12 Titel: |
|
|
hm, ich glabue das einfachste wäre es n Scene Manager zu machen, statt zu renderrn wird einfahc n sprite in dne Manager eingetragen und am Ende sorteirt und gerendert.Dazu würde ich ne STL List benutzen wollen, die sollte man doch auch recht gut sorteiren können, oder? Gibts da n Minibeispiel zu? _________________ https://jonathank.de/games/ |
|
Nach oben |
|
 |
Dr. Best Senior JLI'ler

Alter: 35 Anmeldedatum: 17.06.2004 Beiträge: 269 Wohnort: Köln Medaillen: Keine
|
Verfasst am: 05.09.2005, 21:18 Titel: |
|
|
Jonathan_Klein hat Folgendes geschrieben: | hm, ich glabue das einfachste wäre es n Scene Manager zu machen, statt zu renderrn wird einfahc n sprite in dne Manager eingetragen und am Ende sorteirt und gerendert. |
So hatte ich mir das auch gedacht.
Jonathan_Klein hat Folgendes geschrieben: | Dazu würde ich ne STL List benutzen wollen, die sollte man doch auch recht gut sorteiren können, oder? Gibts da n Minibeispiel zu? |
Mit lists kenn ich mich nicht so gut aus. Einmal gelernt, niemehr benutzt, inzwischen größtenteils vergessen.
Hab also auch keine Ahnung wie das da mit Beispielen steht, aber ich denke mit ein bisschen rumgegoogle lässt sich da schon was finden.
Ich kann nur sagen, dass qsort(...) es mir angetan hat. Einfach und recht effizient. Ich meine mit der callback funktion und so sind das ja kaum mehr als 15 Zeilen code. _________________
Ich bin da, wer noch? |
|
Nach oben |
|
 |
AFE-GmdG JLI MVP


Alter: 45 Anmeldedatum: 19.07.2002 Beiträge: 1374 Wohnort: Irgendwo im Universum... Medaillen: Keine
|
Verfasst am: 06.09.2005, 10:25 Titel: |
|
|
Echtes 3D in einer Ortogonalen Isometrischen Ansiche hat einen eingebauten ZBuffer - Weiss aber nicht, ob die Umstellung zu aufwendig ist... _________________
CPP: | float o=0.075,h=1.5,T,r,O,l,I;int _,L=80,s=3200;main(){for(;s%L||
(h-=o,T= -2),s;4 -(r=O*O)<(l=I*I)|++ _==L&&write(1,(--s%L?_<(L)?--_
%6:6:7)+\"World! \\n\",1)&&(O=I=l=_=r=0,T+=o /2))O=I*2*O+h,I=l+T-r;} |
|
|
Nach oben |
|
 |
Jonathan_Klein Living Legend

Alter: 37 Anmeldedatum: 17.02.2003 Beiträge: 3433 Wohnort: Siegerland Medaillen: Keine
|
Verfasst am: 06.09.2005, 12:52 Titel: |
|
|
hm, dann müsste ich ja alles mit D3D amchen...
Ist natürlich einerseits ne nette Idee, aber ich galbue ich blei vorerst bei DDraw, schon allein deswegen, weil D3D auf älteren Rechnern nicht so toll läuft. _________________ https://jonathank.de/games/ |
|
Nach oben |
|
 |
magynhard Super JLI'ler

Anmeldedatum: 26.04.2003 Beiträge: 461 Wohnort: Wild durch die Welt ;-) Medaillen: Keine
|
Verfasst am: 06.09.2005, 16:04 Titel: |
|
|
Eine weitere Alternative wäre da OpenGL - kann ich uneingeschränkt weiterempfehlen. _________________ Niemand ist hoffnungsloser versklavt als der, der fälschlich glaubt frei zu sein. [J. W. Goethe]
 |
|
Nach oben |
|
 |
Jonathan_Klein Living Legend

Alter: 37 Anmeldedatum: 17.02.2003 Beiträge: 3433 Wohnort: Siegerland Medaillen: Keine
|
Verfasst am: 06.09.2005, 17:19 Titel: |
|
|
tja, dann sag mir doch mal welche Vorteile ich da genau hätte... _________________ https://jonathank.de/games/ |
|
Nach oben |
|
 |
magynhard Super JLI'ler

Anmeldedatum: 26.04.2003 Beiträge: 461 Wohnort: Wild durch die Welt ;-) Medaillen: Keine
|
Verfasst am: 07.09.2005, 19:54 Titel: |
|
|
Läuft wimni auch auf älteren Rechnern noch ziemlich flott (da ja auch schon älter) und ist plattformunabhängig. Oder lahmt es da nach deinen Erfahrungen genauso wie bei D3D?
Wie weit zurückgehend ist "ältere Rechner" oben denn gemeint? _________________ Niemand ist hoffnungsloser versklavt als der, der fälschlich glaubt frei zu sein. [J. W. Goethe]
 |
|
Nach oben |
|
 |
Jonathan_Klein Living Legend

Alter: 37 Anmeldedatum: 17.02.2003 Beiträge: 3433 Wohnort: Siegerland Medaillen: Keine
|
Verfasst am: 07.09.2005, 19:59 Titel: |
|
|
hm, zum Beispiel bei DirectX9 können ältere Grafikkarten gar kein Device erzeugen. Das ist dann schon n bisschen blöd, weil dann kreigt man es unter Garantie nciht zum laufen. Bei DDraw hab ich das noch nirgendwo gesehen höchstens mal das das Spiel langsamer läuft. _________________ https://jonathank.de/games/ |
|
Nach oben |
|
 |
GreveN JLI Master

Alter: 38 Anmeldedatum: 08.01.2004 Beiträge: 901 Wohnort: Sachsen - Dresden Medaillen: Keine
|
Verfasst am: 07.09.2005, 20:00 Titel: |
|
|
Musst doch nicht unbedingt D3D9 verwenden.
Und OGL läuft, vorrausgesetzt du verwendest nicht die hyper-mega-geilen-super-high-end-extensions, garantiert überall. |
|
Nach oben |
|
 |
Dragon Super JLI'ler

Alter: 38 Anmeldedatum: 24.05.2004 Beiträge: 340 Wohnort: Sachsen Medaillen: Keine
|
Verfasst am: 07.09.2005, 20:03 Titel: |
|
|
Jonathan_Klein hat Folgendes geschrieben: | hm, zum Beispiel bei DirectX9 können ältere Grafikkarten gar kein Device erzeugen. Das ist dann schon n bisschen blöd, weil dann kreigt man es unter Garantie nciht zum laufen. Bei DDraw hab ich das noch nirgendwo gesehen höchstens mal das das Spiel langsamer läuft. |
Auf meinem alten Latop (PIII 866MHz 120MB Ram + 8 Shared Memory) kann ich kein Direct3d9 nutzen. Ich programmiere neuerdings nur auf dieser Maschiene. Mit OpenGL ist das fast kein Problem, wenn man glBegin() und glEnd() nimmt *gg*. Naja es ist das einzigste neben directdraw das funtzt. _________________ Nur wenn man ein Ziel sieht, kann man es auch treffen.
___________
Mein Leben, Freunde und die Spieleentwicklung |
|
Nach oben |
|
 |
Jonathan_Klein Living Legend

Alter: 37 Anmeldedatum: 17.02.2003 Beiträge: 3433 Wohnort: Siegerland Medaillen: Keine
|
Verfasst am: 07.09.2005, 20:03 Titel: |
|
|
naja, OGL könnte ich mir ja irgendwann mal aneignen, aber ich habe nun mal leider nur DX Bücher daher werde ich erstmal auch DX benutzen. Vielleicht ut ich mir aber irgendwann mal n Tutorial an und guck mir OGL genauer an.ober ich benutze einfach irgenne Megageil optimierte OGL Engine, die irgendn Freak in seiner Freizeit gemacht hat, weil er sich nciht mit sowas primitiven wie Games auseinandersetzen will.  _________________ https://jonathank.de/games/ |
|
Nach oben |
|
 |
Dragon Super JLI'ler

Alter: 38 Anmeldedatum: 24.05.2004 Beiträge: 340 Wohnort: Sachsen Medaillen: Keine
|
Verfasst am: 07.09.2005, 20:06 Titel: |
|
|
Jonathan_Klein hat Folgendes geschrieben: | [...]oder ich benutze einfach irgenne Megageil optimierte OGL Engine, die irgendn Freak in seiner Freizeit gemacht hat, weil er sich nciht mit sowas primitiven wie Games auseinandersetzen will.  |
du sprichst von mir oder? *gg* naja stimmt aber etwas, weil ich programmiere nur an meiner engine und nicht am spiel  _________________ Nur wenn man ein Ziel sieht, kann man es auch treffen.
___________
Mein Leben, Freunde und die Spieleentwicklung |
|
Nach oben |
|
 |
Jonathan_Klein Living Legend

Alter: 37 Anmeldedatum: 17.02.2003 Beiträge: 3433 Wohnort: Siegerland Medaillen: Keine
|
|
Nach oben |
|
 |
|