Polygone – was sind das für Teile?

September 3, 2008

Leider hab ich in letzter Zeit nicht mehr ganz so viel zeit gehabt, wie ich es mir wünsche, aber für ein bisschen Theorie zwischendurch reichts allemal.

Nachdem ich jetzt Punkte, Linien und Kreise zeichnen kann, gehts an die Strukturen der 3D-Grafik. Klar, neben Punkten, Linien und Kreisen ist hier das Polygon das wichtigste Element. Jedes moderne Computerspiel basiert auf Polygonen.
Es ist (mal ganz nebenbei gesagt) erstaunlich, wie viel moderne Computer leisten können. Während man am Anfang der 3D-Grafik grade mal zehn bis hundert Polygone gleichzeitig und in echtzeit darstellen konnte, ist es heutzutage möglich mehrere Millionen Polygone darzustellen und überdies noch komplex auszuleuchten. Echtzeitschatten, Bumpmapping (bzw. Normalmapping) und realistische Physikinteraktionen natürlich eingeschlossen.

O.K., ich schweife ein wenig ab.
Polygone zu organisieren ist weitaus komplizierter, als man denkt. Gucken wir uns zunächst mal an, was Polygone sind, und was es für Polygone gibt:

Polygonarten

Polygonarten

So weit, so gut…
Und jetzt gucken wir noch, woraus so ein Polygon besteht:

Bestandteile eines Polygons

Bestandteile eines Polygons

Nachdem wir jetzt wissen, was ein Polygon ist, und woraus es besteht, können wir uns Gedanken darüber machen, in welche Datenstruktur wir Polygone quetschen und wie wir damit umgehen.
Aber das ist Schnee von morgen.

Also bleibt am Ball! Demnächst zeig ich dann, wie man Polygone am besten speichert.

MfG, der Dac, der bekennend Polygonie betreibt…


Der perfekte Kreis – und es gibt ihn doch…

August 28, 2008

Ist jetzt schon ein wenig länger her, das ich was gepostet habe, dafür gibts jetzt aber auch wieder ein saftiges Videotutorial über das Darstellen von Kreisen:

(Am besten wieder auf Youtube gehen und das Video in hoher Qualität angucken)

Den Quellcode poste ich ab jetzt immer bei http://pastebin.ca
Den aktuellen gibt’s also jetzt hier.

So weit, so gut. Jetzt gehts aber ganz sicher an Polygone. Versprochen.
Auch wenn ich in nächster Zeit aufgrund der Prüfungen, die noch ausstehen ein wenig weniger posten werden. Aber dann geht’s wieder rund. Versprochen.

MfG, der Dac, der den Youtubeupload doof findet…


Auf die Linie gekommen

August 22, 2008

Wie versprochen gibt es heute das Progrämmchen und den Quelltext zum Bresenham’schen Linienalgorithmus.

Zum Programm gibts auch noch die glut32.dll. Da gibt es leider keine Möglichkeit den Code mitzukompilieren. Ist ein wenig blöd, aber nicht zu ändern.

Hier gibts die Downloads als .rar-Archiv:

Programmcode (Headerdatei & Coderumpf)
Beispielprogramm (linke oder rechte Maustaste in das OGL-Fenster machen)

Kleines Problem am Rande: Wenn man eine Weile im OpenGL-Fenster nichts macht, reagiert es nicht mehr. Wer weiß, woran das liegt, dem wäre ich dankbar, wenn er einen Kommentar mit Lösung hinterlassen könnte.

Sorry, dass ich an dieser Stelle nicht mehr schreibe, aber demnächst gibt’s mehr zu Vertices und Polygonen.

MfG, der Dac, der jetzt den Rechner neu macht


Eine Linie mit Bresenham (Teil 2)

August 21, 2008

Sooooo, weiter gehts mit dem zweiten Teil von Bresenham.
Hier gehe ich (wie schon gesagt) darauf ein, wie man den Algorithmus für die langsam steigenden Linien so umsetzt, dass man alle Typen von Linien zeichnen kann.

Morgen gibt es dann den passenden Quelltext dazu und ein kleines Programm zum Download, das – und jetzt kommts – Linien zeichnen kann.

Vielleicht noch ein kleiner Hinweis an alle, die auch ganz am Anfang der Spieleprogrammierung stehen:

Das, was ich hier mache braucht man nicht wirklich, um Spiele zu programmieren. Das ist tiefes Hintergrundwissen. Heutzutage braucht niemand mehr einen Algorithmus zu schreiben, der eine Linie zeichnet. Das erledigt die Hardware (bzw. OpenGL oder DirectX) von sich aus. Ich mache das nur, damit ich auch verstehe, was genau da gemacht wird. Wer einfach nur ein Spiel programmieren möchte, sollte vielleicht nicht gerade damit anfangen seinen eigenen Linienalgorithmus zu schreiben.

O.K. Wie gehts denn dann hier weiter? Linien habe ich ja jetzt. Dann ist der nächste Schritt ein Kreis zu zeichnen, dann Polygone, dann gefüllte Polygone (eventuell mit Texturen) und dann endlich das große Thema 3D…

MfG, der Dac, der das mit diesem dämlichen entfesselten Blitz nicht hinkriegt…


Eine Linie mit Bresenham (Teil 1)

August 18, 2008

So, endlich gibts wieder was Neues.

Nachdem ich nun Punkte in allen nur denklichen 16-Bit Farben an jeder x/y-beliebigen Stelle zeichnen kann, wird es Zeit, diese Punkte zu Linien aufzureihen.
Hierfür nehme ich den gebräuchlichsten Algorithmus, der ohne Fließkommaberechnungen und Multiplikationen auskommt. Der Bresenham’sche Linienalgorithmus ist deswegen auch super schnell und vermeidet Rundungsfehler.

Wie der Algorithmus funktioniert fasse ich in zwei, drei kleinen Videos zusammen. Im ersten Teil erkläre ich die Gundlegende Funktionsweise anhand langsam steigender Linien.  Im zweiten teil folgt dann die Verallgemeinerung der Funktionsweise für alle Linientypen (dazu mehr im Video). Im dritten Teil (sofern ich den noch mache) erkläre ich dann, wie man Kreise mit Bresenham zeichnet.

Hier aber zunächst der erste Teil:


Wer ein wenig mehr erkennen möchte, kann sich das Video auf Youtube auch als High-Quality-Video angucken.

MfG, der Dac, der seine eigene Stimme nicht mag…


Schluss mit der Konsole…

August 13, 2008

Keine Lust mehr auf langweilige Konsolenprogrammierung. Jetzt gehts an die Grafik.

Deswegen habe ich mir heute OpenGL und das Microsoft Platform SDK installiert, Visual C++ konfiguriert und losgelegt.

Den Rest des Beitrags lesen »


Der Spieler- eine Klasse für sich

August 7, 2008

Heute gibts wieder nur ein wenig Planung. Ich bin in den letzten Tagen echt ein wenig programmierfaul geworden. Und das, obwohl ich mich eigentlich auch noch um mein CMS kümmern müsste. Ich hoffe, dass ich mich in den nächsten Tagen zu mehr aufraffen kann.

Jetzt aber zu der Spielerklasse.
Da die Spielfeldklasse für die Ausgabe sorgt, muss ich diese Klasse um ein Spielerarray und einige Funktionen erweitern. Die Spielerklasse an sich stellt einerseits die Superklasse für menschliche Spieler dar und andererseits für computergesteuerte Spieler.

Die Spielerklasse
Die Spielerklasse

MfG, der Dac, der hoffentlich bald wieder aus der Flaute rauskommt…


Spielend einfache Spielfelder

August 4, 2008

Nach einem schön entspannten Wochenende hab ich mich dranngesetzt und meine Spielfeldklasse fertiggeschrieben.
Naja, wirklich fertig nicht, aber immerhin die notwendigsten Funktionen habe ich implementiert. Ich möchte ja nicht zu viel Zeit in dieses Konsolenprojekt stecken. Schließlich ist mein eigentliches Ziel die Grafikprogrammierung unter OpenGL oder DirectX. Aber bis dahin wirds wohl noch ein langer Weg.

Den Rest des Beitrags lesen »


STL und Templates – eine kleine Einführung

August 1, 2008

Heute gibts leider wieder keinen Bahnbrechenden Fortschritt.
Das Wetter ist einfach zu gut, die Lust meine Zeit vor dem Rechner zu hocken dementsprechend gering.

Um nicht völlig still zu stehen gibts heute ein kleine Einführung (aber wirklich nur ganz oberflächlich und kurz) in die „STL“ und das Thema „generische Datentypen“.

Den Rest des Beitrags lesen »


Arrays? Das geht besser…

Juli 31, 2008

Ohje,

was damals, als ich noch unsauber und ohne Rücksicht auf Verluste drauflosprogrammiert habe so einfach war gestaltet sich heute ein wenig schwieriger.

Es ist zum Beispiel ein immenser Aufwand die Anzahl der Elemente eines dynamisch erzeugten Arrays das auf Objektinstanzen referenziert, welche wiederrum primitive Datentypen und Zeiger enthalten zu zählen.

In Java gibt es dafür die schöne Instanzvariable „array.length“. In C++ gibt es eine etwas kompliziertere Methode, um die Anzahl eines Arrays mit primitiven Datentypen zu bekommen:

int anzahlElemente = sizeof(array) / sizeof(array[0]);

Aber dämlicherweise funktioniert das nicht mit meinem Objektarray (warum auch immer…). Es gäbe noch die Möglichkeit das Array Element für Element durchzugehen, bis das Arrayende erreicht wurde, aber das ist mir
a) zu aufwändig und
b) zu langsam.

Also werde ich mich mit der STL (Standard Template Library) auseinandersetzen. Und zwar im speziellen mit Vektorobjekten, die eine Methode „vektor.size()“ mit sich bringen. Das funktioniert dann hoffentlich. Außerdem sind Vektoren schon von sich aus dynamisch.

Leider gibt es heute deswegen auch nichts neues zum Programm (außer der obigen Erkentniss).

Zum Schluss noch ein schönes Zitat:

Für das große Chaos haben wir Computer. Die übrigen Fehler machen wir von Hand.

(Quelle: unbekannt)

MfG, der Dac, der ganz bestimmt nicht verzweifeln wird…