Willkommen ~Gast!
Registrieren || Einloggen || Hilfe/FAQ || Staff
Probleme mit der Registrierung im Forum? Melde dich unter registerEin Bild.
Autor Beitrag
000
15.07.2003, 23:18
quest



Also erstmal Hallo ! da ich neu hier bin erstmal wer ich bin. Ich heiße quest und bin C , C++ , PHP unter Linux programmierer. *g* Nun aber zu meiner Frage:

Ich habe vor ein Spiel zu programmieren es soll ein Ego-Shooter werden. Da dachte ich ersteinmal an echte 3D zeugs aber mir ist OpenGL/Direct3D einfach zu komplex (für den anfang) Also dachte ich mir mache ich ein Spiel wie Doom1/2 da habe ich mir den Quellcode heruntergeladen und angeguckt naja lange rede kurzer Sinn.. Ich versteh einfach nicht wie ich das anstellen soll soetwas zu programmieren. also die Mathematik ist mir einfach unklar. Ich hab gesucht und das ?gute? Tut dazu "Ein Crashkurs in 3D-Mathematik" angeguckt. doch nunja da raffe ich schonmal gar nichts ist mir auch alles viel zu Theoretisch ich versteh auch die Verbindung nicht zwischen den Formeln und ein Spiel nicht. Was mich einfach intressiert ob jemand hier vielleicht jemand mal grob erklären könnte wie sowas gemacht wird. Also eine art Doom zu programmieren. wie gesagt soll alles sehr simpel werden. Ich dachte schon daran die Grafik und all das in SDL zu machen was haltet ihr davon ? Ach noch etwas die Doom engine ist ja auch auf eine Ebene also es gibt keine Etagen oder sowas und das muss für meine bedürfnisse auch nicht sein.

Ich hoffe ihr könnt aus diesen Erguss aus Gedanken mein Problem verstehen und mir weiterhelfen. Danke im Vorraus.

--

Das Mag ich: Google
Das Mag ich nicht: Google-Antwort-Geber


Dieser Beitrag wurde am 15.07.2003 um 23:18 von quest bearbeitet.
zum Seitenanfang zum Seitenende Profil || Suche
001
16.07.2003, 12:13
Onkel Dittmeyer



Zitat:
Also eine art Doom zu programmieren. wie gesagt soll alles sehr simpel werden.
Ich sags nochmal: *hust* natürlich *hust*
Es wird einfach nicht simpel werden, auch wenn du noch eine Dimension runter gehen würdest. Man kann sowas nicht mal eben erklären. Ein wenig Kenntnisse solltest du schon aus der Schule mitbringen, sonst wirst du nicht weiterkommen. Oder falls du die nicht hast, musst du sie dir halt woanders holen. Frag mal Dr. Google...
Wenn du das verstanden hast, machst du dir erstmal einen Plan über die Module deiner Engine, also welches macht was usw.
Dann überlegst du dir sofern du C++ oder ne andere objektorientierte Sprache verwendest eine gute Klassenhierarchie für Vektoren, Entities und was du noch alles benötigst mit dem Hintergedanken, dass du alles später möglichst Schnell rendern willst. Sofern das ganze "dynamisch" mit ladbaren Maps laufen soll, solltest du dich auch noch über gängige Polygonordnungsverfahren informieren oder ganz "einfach" einen BSP-Tree verwenden wie es auch in Doom gemacht wurde.

--

zum Seitenanfang zum Seitenende Profil || Suche
002
16.07.2003, 21:53
quest



Das es nicht einfach wird war mir natürlich schon klar. Aber könnt ihr es nicht einmal versuchen mir zu erklären wie ich diese Levels Darstellen kann ? Naja wenn nicht dann bastel ich halt weiter an 2D Games, Aber das ist so furchtbar langweilig *g*

--

Das Mag ich: Google
Das Mag ich nicht: Google-Antwort-Geber

zum Seitenanfang zum Seitenende Profil || Suche
003
17.07.2003, 01:43
Exec



wo sind denn 2d-games langweilig? naja egal :D
zu deinem prob kann ich nix beitragen, aber gemacht is ne engine nich in 2tagen ...

--

"selbermachen rockt am meisten :D" - -LeJean-

zum Seitenanfang zum Seitenende Profil || Suche
004
17.07.2003, 16:59
the_viking



Guck mal nach raycaster tutorials...

--

thx, cu, MfG the_viking

(( My =]=H=O=M=E=> Page! ))
Coder bei Brainshock-Interactive und bei Z-Software
My ICQ: #160959446

zum Seitenanfang zum Seitenende Profil || Suche
005
18.07.2003, 12:04
Prefect



Hast du jemals ein funktionierendes Spiel geschrieben? Falls nein, mach das erst mal. Ein billiges, rein zweidimensionales Jump'n'Run vielleicht, oder ein Asteroids-Klon oder so etwas in der Art.
Wenn du das _selbst_ gemacht hast, dürften einige Dinge schon viel klarer sein. Okay, bis auf die 3D-Mathematik. Wenn dir theoretische Erklärungen dazu nicht verständlich sind, schau in die Praxis. Bastel ein paar kleine OpenGL-Programme.
Das wichtige ist: Ausprobieren, ausprobieren, ausprobieren. Und verstehen, warum etwas funktioniert oder nicht funktioniert. Wenn dir 3D im Moment zu hoch ist: Kein Problem, such dir etwas, das vom Programmieraufwand etwas weniger, und vom Mathematikaufwand viel weniger ist, und mach erst einmal das.
Ich habe knapp 10 Jahre programmiert, bevor ich OpenGL überhaupt das erste Mal angelangt habe...

cu,
Prefect

--

Widelands - Gemütliche Aufbaustrategie, Free Software
Noch ein Blog - Lerne, wie die Welt wirklich ist, aber vergiss niemals, wie sie sein sollte.

zum Seitenanfang zum Seitenende Profil || Suche
006
18.07.2003, 18:56
apfelkorn



analytische Geometrie Stufe 12 am Gymnasium ist absoluter Grundbestandteil. Lotfußpunktverfahren zur Kollisionsfeststellung und Skalarprodukt zur Projektion von Graden auf Ebenen und Vektorprodukt zur Bestimmung von Normalenvektoren und und und.

Meine Empfehlung: 2-3 Jahre Zeit nehmen, Buch über analytische Geometrie kaufen und durcharbeiten. Am besten ist dir geholfen, wenn du mit einem Schulbuch arbeitest.

Thema OpenGL: dieses kleine Spielzeug mag zwar anfangs ein bisschen komplex wirken, aber glaub mir, das nimmt dir verdammt viel arbeit ab.

--

zum Seitenanfang zum Seitenende Profil || Suche
007
18.07.2003, 22:35
WareWolf



langsam käst es mich an. Warum denken in letzter Zeit immer mehr Leute, ein Spiel programmieren zu müssen, die absolut NULL Ahnung davon haben? Das sieht man doch schon an der Fragestellung. Und immer heisst es, was einfaches für den Anfang, Doom, Q1, Wolfenstein.

Das ist nicht einfach!

Wenn man sich bisher Websites zusammenklickt hat und die fertigen Menüanimationen an die richtigen Koordinaten gesetzt hat, ist man natürlich der Oberguru. Schon klar.

Ein Vorschlag: setzt Euch an den Rechner, startet einen Texteditor oder von mir aus die Oberfläche Eurer Lieblingsprogrammiersprache (was, die fällt Euch gerade nicht ein?..schon verloren!). Also so richtig einsam, nur Du und der Cursor...und dann versuch mal das gute, alte PingPong zu programmieren. Du weisst schon, der schwarze leere Bildschirm, links ein senkrechter weisser Balken, mit Tasten auf und ab steuerbar. Das reicht fürs erste.
Wenn das geklappt hat, kommt der Ball ins Spiel, physikalisch korrekt natürlich, Einfallwinkel gleich Austrittswinkel und der ganze Kram, Kollision mit der Bildschirmkante und dem Schläger nicht vergessen. Noch einfach?, OK denn der gegnerische Schläger, vom Computer gesteuert (nennt sich KI) und natürlich etwas "unscharf", sonst gewinnt er immer. Dann kommt eine Scoreanzeige und ein "pong" von den Lautsprechern dazu.

Ich sag Dir, wenn du das geschafft hast, redest Du von Doom und Wolfenstein nicht mehr von einfachen Programmen für den Anfang...

--

Sig as a brick ┴┬┴┬┴┬┴┬┴┬┴┬┴
WW

zum Seitenanfang zum Seitenende Profil || Suche
008
20.07.2003, 13:42
apfelkorn



btw. kann man pong wunderbar mit basic schreiben. entweder tastatur gegen computer oder tastatur gegen maus.

--

zum Seitenanfang zum Seitenende Profil || Suche
009
23.07.2003, 12:05
LSJ Master



So, jetzt muss ich wohl auch mal einen Kommentar abgeben:

Also ich kann dir auf keinen Fall mit dieser Mathematik helfen, aber ich muss sagen, dass es möglich ist, dass man nach einer gewissen Zeit ein Spiel programmieren kann.

Ich selbst habe glaube ich vor 2 Jahren angefangen mit C++.
Wegen gewissen Umständen habe ich dann wieder aufgehört.

Ich hatte mir schon 3 Bücher gekauft und deswegen habe ich da manchmal wieder angefangen, bin aber nie weiter als bis zu If-Bedingungen gekommen.

Ich bin schon seit einem Jahr in der Mod-Szene, der ein oder andere wird mich zwar genau so wenig kennen wie alle anderen, aber ich habe schon bei vielen Mods gearbeitet und noch keiner ist fertig.

Das hängt aber damit zusammen, dass ich bei den meisten seit dem Anfang dabei war und solche Mods und mal Zeit brauchen.

Jetzt ist es bald soweit und die Alpha der ersten Mod (Day of Kills) ist fertig.

Und vor etwas längerer Zeit hat mich da ein Kumpel angesprochen und gesagt, dass er eine Engine machen will und mich gefragt, ob ich vielleicht mitmachen will.
Ich war zawr zu der Zeit schon Coder bei Day of Kills (Waffencoder), aber ich war wie gesagt noch nicht weiter als bis If-Bedingungen und habe ihm das halt auch gesagt.

Der hat mir empfohlen C++ zu lernen (also "ganz").

Und da habe ich angefangen das zu machen, ich musste aber wieder von vorn anfangen...

naja, dann war das mit der Engine nicht mehr Thema, weil er es doch nicht machen wollte.

So, da habe ich dann auch nicht mehr großartig weiter gemacht.

Und dann kam der nächste vor ein paar Wochen und hat mir das gleiche angeboten.
Da war die Motivation größer, weil ich wusste, das er was drauf hat und ich habe nun das Buch durch und lese jetzt das nächste.

Also ich denke, das ich jetzt schon so manches kann (in C++).

So und jetzt lese ich Bücher über Spieleenticklung und will mit ihm dann ne Engine schreiben. (zuvor eine eigene, oder ein kleines Game)

So ich denke, dass man daran sieht, dass man das schaffen kann, wenn man die richtige Literatur hat.
Es ist zawr etwas wage von mir so eine These auftzustellen, aber ich mache das einfach in der Annhame, dass ich das mit der Engine hinbekomme.

Und für eine Engine kannst du Jahre einplanen.

Aber einwas habe ich gelernt:
Es ist besser, wenn man ersteinmal C++ lernt, bevor man eine Half Life Mod macht, obwohl man trotzdem schon Sachen, wie Waffencoding machen kann.

Das Erfolgserlebnis ist einfach größer und man kann auch Fehler beheben ohne andere Leute zu viel zu nerven.

Leax

--

zum Seitenanfang zum Seitenende Profil || Suche
010
23.07.2003, 12:38
Onkel Dittmeyer



Zitat:
Es ist besser, wenn man ersteinmal C++ lernt, bevor man eine Half Life Mod macht, obwohl man trotzdem schon Sachen, wie Waffencoding machen kann.
Nein, es ist nicht besser, es ist essentiell! Ohne Sprachkenntnisse kommst du einfach nicht weiter, auch wenn es 1000e Tutorials dazu gibt. Alle sind für Leute gedacht die zumindest die Sprache bereits beherrschen und sich aus bestimmten Situationen selber "retten" können. Und zum Thema Waffencoding, ohne Sprache kommst du da auch nicht sonderlich weiter - man kann zwar den Code einer Waffe kopieren, aber Innovative Ideen kannst du ohne die Kenntnisse nicht realisieren...

--

zum Seitenanfang zum Seitenende Profil || Suche
011
23.07.2003, 13:10
LSJ Master



ja, das ist aber auch mit Kenntnissen schwer, wenn du sowas umsetzten willst ohne Tutorial, denn man kennt die Engine ja nicht gut genug

da ist eine eigene besser

--

zum Seitenanfang zum Seitenende Profil || Suche
012
23.07.2003, 13:23
apfelkorn



Ich empfehle übrigens dringend die Literatur von der Stroustrup-Bibel, da einige programmiertechnische Konzepte drinstehen, die sich besonders bei Engineprogrammierung lohnen. Stichwort stl inkl. aller Standardcontainer etc.
Lest es, es ist verdammt gut und man kommt gar nicht in Versuchung Anfängerfehler zu machen, die geschehen, wenn man sich nur an den Quellen des Quake-Erfinders anlehnt.

--

zum Seitenanfang zum Seitenende Profil || Suche
013
01.08.2003, 18:25
PhoenixDragon



Hmm kennt ihr schon das Buch?
http://www.amazon.de/exec/obidos/ASIN/3446221522/qid=1059755003/sr=2-1/ref=sr_2_11_1/028-2566669-4620558

Also ich habs mir gekauft, bin fast durch und ich finds einfach gewaltig!
Das Buch erklärt auch den Mathematischen Teil ziemlich gut und eindrucksvoll!

--

apogryph

zum Seitenanfang zum Seitenende Profil || Suche
014
02.08.2003, 13:50
static_caster



@LSJ Master

Zitat:
Also ich denke, das ich jetzt schon so manches kann (in C++).
hm, und das wäre?

Zitat:
Es ist zawr etwas wage von mir so eine These auftzustellen, aber ich mache das einfach in der Annhame, dass ich das mit der Engine hinbekomme.
naja, *irgendwie* kann man ne ganze menge hinbekommen...

es geht aber nit darum, es *irgendwie* hinzubekommen, weil du ja schon so manches kannst, sondern es geht darum, ein riesiges projekt zu starten, zu designen, nach (vielleicht) 500 000 zeilen code noch die übersicht zu behalten und ABSOLUT sicher in der verwendung der sprache zu sein und du wirst es auch debuggen müssen.

du mußt nicht jedes sprachmittel von deiner lieblingssprache auf abruf haben (ich muß auch immer mal wieder nachgucken), aber du mußt mit der sprache dein problem umsetzen können.

und grad bei c++ kann man "so manches" auf sehr viel verschiedenen wegen erreichen, weswegen sonne aussage eigentlich null aussage hat.

@quest:

Zitat:
bin C , C++ , PHP unter Linux programmierer.
ziemlich gewagtes statement! (wenigstens kein "C/C++ - Programmierer" :)

naja, ich kann mich erinnern, daß doom mal DER technologieknüller war, wo NIEMAND anders das so hinbekommen hat (war bei dem jungen mit dem pogo-stab auch schon so). nur weil die spiele alt sind und scheiße aussehen, heißt das nicht, daß sie simpel sind. (wenn du es gegeneinander abwägst, mußt du in der heutigen zeit z.B. keine low-level grafikroutinen schreiben - es gibt ja ogl & d3d.)

und zum schluss:
warewolf:

Zitat:
Wenn man sich bisher Websites zusammenklickt hat und die fertigen Menüanimationen an die richtigen Koordinaten gesetzt hat, ist man natürlich der Oberguru. Schon klar.
... und kann "C/C++" und asm perfekt!

--

zum Seitenanfang zum Seitenende Profil || Suche
015
02.08.2003, 16:35
quest



Mhh jo jo habt ja recht ich bleib bei 2D *g*, Ach ne is ja auch zu komplex ich mach mach ihn aus und mach wieder Win drauf, am besten noch XP und spiel wieder 9 St. am Tag CS das kann ich wenigstens ;O

Zumindest hat keiner mit "google.de" geantwortet *g* tolle leistung !

--

Das Mag ich: Google
Das Mag ich nicht: Google-Antwort-Geber

zum Seitenanfang zum Seitenende Profil || Suche
016
02.08.2003, 23:30
Retro



google.de

http://www.google.de/search?q=spieleprogrammierung+3d&ie=UTF-8&oe=UTF-8&hl=de&meta=

--

shielding people from their own stupidity is an evolutionary step backwards anyway.

/* God is dead!............Nietzsche */
/* Nietzsche is dead!......God */
/* Nietzsche is God!.......The Dead */

zum Seitenanfang zum Seitenende Profil || Suche
017
04.08.2003, 14:09
Hanfling



Zitat:
WareWolf postete
Ich sag Dir, wenn du das geschafft hast, redest Du von Doom und Wolfenstein nicht mehr von einfachen Programmen für den Anfang...
Erm. so komplex ist Pong nicht. Ich habe mal halbbesoffen eine Implementation hingesaut als ein Kumpel da war, nur um dem zu beweisen das es nicht so extrem komplex ist.
Allerdings ist es vollkommen normal das man die Sache mit 3D Engines überschätzt. Sie wirken einfach eine gewisse faszination aus. Wenn man allerdings der Thematik näherkommt, merkt eigentlich jeder von alleine, wie komplex 3D Engines sind.

Die Sache mit dem HL-SDK ohne C/C++ Kenntnisse seh ich so:
Ich habe auch angefangen mit dem HL-SDK ohne diese Kenntnisse. Es war zwar mehr ein wildes rumbasteln, hat jedoch für das was ich brauchte zusammen mit Tutorials gereicht. Und ich bin nicht der einzige der das so gemacht hat und so am Ende auf nen C++ Trip gekommen ist. :) Irgendwann habe ich dann das HL-SDK ruhen lassen und hab mich dem systematischem lernen von C++ gewidmet. Allerdings habe ich nie irgendwelche dummen Fragen gestellt die man hätte mit geringen C++ Kenntnisse hätte lösen können. Allerdings empfehlen würde ich es nicht. Nur evtl. sich die C++ Tutorial Reihe auf resourcecode.de sich anzugucken + das Klasen Tutorial, als Crash Kurs. Allerdings bitte nur Leute mit einer gewissen Eigenständigkeit.

--

Nun ist deine Zeit gekommen sprach der Tod, stolperte und brach sich das Genick. :o


Dieser Beitrag wurde am 04.08.2003 um 14:10 von Hanfling bearbeitet.
zum Seitenanfang zum Seitenende Profil || Suche
018
04.08.2003, 14:27
Hanfling



Btw. ich würde die Engine so in der Art aufbauen:

In der main Funktion erstellst du ne Instanz der Klasse CEngine
Im Konstruktor davon oder in ner eigenen Funktion der Klasse erstellst du ein Fenster, initialisierst Grafik API, etc.
Dann fügst du zu dieser Klasse nen Mainloop hinzu, wo du halt den Render Code reinpackst und davor Input/Event Handling.

Dann brauchst du noch ne kleine Klasse als Timer CTimer oder so.
Die hat ne Funktion die zu Begin des Mainloops ausgeführt wird und die Zeit die vergangen ist seit dem letzten Aufruf ausrechnet. Du brauchst das zB. um Bewegungen zeitabhängig zu machen z.B.
Quellcode:m_xPos += m_moveSpeed * g_timer->timeSinceLastFrame;
Du brauchst noch evtl. ne CConfig Klasse in der du z.B. Tastaturbelegung, Schwerkraft etc. speicherst. Du kannst es alternativ auch in die CEngine Klasse einbauen.

Dann brauchst du ne CMap Klasse. In der du ne Funktion zum Laden der Map und zeichnen hast vorallem. Die Laden Funktion wird im Konstuktor von CEngine aufgerufen oder so. Die Draw() im Mainloop.

Für Einheiten/Objekte benutzt du am besten ne Basisklasse CObject. Dann leitest du davon Klassen ab für z.B. Einheiten, Map Objecte. Die CObject sollte ne Funktion namens z.B. Think besitzen. In dieser Funktion wird dann erst Ki gehändelt und dann Zeichnen z.B.

Dann schreibst du dir ne CObjectManager Klasse zum managen von den Objekten. Die Einheiten/Objekte werden dort in ner Linked List eingetragen. Und du castest dann die verschiedenen abgeleiteten Objekte zu CObject und rufst für jeden Eintrag der LL die Think() Funtktion auf.

Ich hoffe das ist nen Ansatz der dir hilft. Du kannst auch erstmal sowas in 2D machen, wo es um einges leichter geht, weil man nur zweidimensional Denken muss. So ergänzt mal, ich ergänze auch evtl. noch später. Fertig ist das bei weitem noch ned. Nur so Grundgedanken die ich für den Aufbau von sowas habe.

--

Nun ist deine Zeit gekommen sprach der Tod, stolperte und brach sich das Genick. :o

zum Seitenanfang zum Seitenende Profil || Suche
019
04.08.2003, 20:42
the_viking



Hey, genauso bau ich meine Engines auch immer auf ;)

OOP Hilft vor allem bei den Entitys (also den Objekten, die im Spiel sind)

Allerdings hab ich die Think() funktion schon von der Engine aus in verschiedene Funktionen aufgesplittet:
Tick(double dt) zum aktualisieren
PostRender3D() zum 3D-Rendern und
PostRender2D() zum 2D-Rendern (wobei ich ne canvas klasse hab, die so ähnlich wie die CDC Klassen aus der MFC Funktionieren, halt nur mit OpenGL :) )

Entities kann man des Weiteren ganz einfach per Spawn(klassenname,[pos],[rot]) spawnen. zB:
Spawn("CTank",m_Location); würde einen CTank an der Position der spawnenden Entity spawnen.

Wie man das aber implementiert, lass ich euch jetzt mal raten ;) (kleine Hilfe: guckt euch mal die LINK_CLASS_TO_ENTITY() Makros des HLSDKs an....)

--

thx, cu, MfG the_viking

(( My =]=H=O=M=E=> Page! ))
Coder bei Brainshock-Interactive und bei Z-Software
My ICQ: #160959446

zum Seitenanfang zum Seitenende Profil || Suche
020
04.08.2003, 21:58
theDon



es heißt LINK_ENTITY_TO_CLASS
._°

--

\o tanz den naziprau! o/

And more than ever, I hope to never fall,
Where enough is not the same it was before

zum Seitenanfang zum Seitenende Profil || Suche
021
04.08.2003, 22:51
Hanfling



Mh ja müsste ich mal machen, aber hab kein HL SDK drauf. Obwohl....
Naja jedenfalls versuch ich mir die Sachen selbst zu überlegen erstmal und dann woanders nachzugucken. Ich denke so lernt man am meisten.

--

Nun ist deine Zeit gekommen sprach der Tod, stolperte und brach sich das Genick. :o

zum Seitenanfang zum Seitenende Profil || Suche
022
05.08.2003, 00:24
the_viking



Jo, HL macht es auch noch anders als ich... Hl arbeitet mit Template Functions und ich halt mit normalen ;)..

@Don:
Jaja, hab ich mir schon fast gedacht :)
bei mir heist es halt
DECLARE_SPAWNABLE(CTank);

:D :D :D

--

thx, cu, MfG the_viking

(( My =]=H=O=M=E=> Page! ))
Coder bei Brainshock-Interactive und bei Z-Software
My ICQ: #160959446

zum Seitenanfang zum Seitenende Profil || Suche
023
30.11.2003, 18:07
Der Effektemacher



Zitat:
WareWolf:
langsam käst es mich an. Warum denken in letzter Zeit immer mehr Leute, ein Spiel programmieren zu müssen, die absolut NULL Ahnung davon haben? Das sieht man doch schon an der Fragestellung. Und immer heisst es, was einfaches für den Anfang, Doom, Q1, Wolfenstein.
Das ist nicht einfach!
Ich stimme WareWolf in diesem Punkt vollends zu! Allein ein 2D-Spiel a la Sonic oder so sind keine einfache Sache. Okay, wenn man sich mit der ganzen Materie null auskennt, dann kann man sich vielleicht gar nicht vorstellen, wie komplex es ist ein 3D-Spiel zu erstellen, insofern ist solch ein naives Vorhaben vielleicht verzeihbar. Ich bin selbst kein 3D-Programmierer, aber wenn mich nicht alles täuscht, sind die mathematischen Formeln noch das kleinste Übel...

--

www.de-maps.de.vu - Never touch a running Effekt !
TrainHunters-Modification

zum Seitenanfang zum Seitenende Profil || Suche