Buchvorschlag für Spieleprogramierung (2D genügt mir fürs erste)
-
Hy
wie schwer zu erkennen such ich ein gutes buch um c++ zu lernen. kann/sollte auch erstmal auf 2D basis sein (3D trau ich mir noch nicht zu). hab mich in etwa ein halbes jahr mit Java beschäftig und bin dort dann an die grenzen von java + mein PC gekommen. die runtimeengine ist einfach nicht das wirkliche in sachen leistungsinput leistungsoutput.
eine frage hätt ich dann noch gibts für c++ auch kompiler wie für java (bei java hatt ich eclipse und net beans)
thx
Jonny0815
-
Ich selbst bin ebenfalls noch Anfänger bezüglich der C++-Programmierung.
Allerdings denke ich, dass es nicht vorteilhaft ist gleich in die Spieleentwicklung (egal ob 2D oder 3D) einzusteigen, wenn man noch kein Grundwissen der zu verwendenen Sprache (in dem Fall C++) hat.Lieber erstmal einige Bücher / Tutorials zum Thema C++ allgemein lesen, sich mit den Besonderheiten und Unterschieden zu Java vertraut zu machen.
Danach stellt sich natürlich die Frage welche Art von Spielen du entwickeln willst. Soll DirectX oder OpenGL oder keins von beiden genutzt werden etc.
Übrigens: Dass Java signifikant langsamer als C++ ist halte ich für nicht mehr aktuell. Es kommt sicherlich immer auch auf die Abstraktion und die Art und Weise der Implementierung an - aber dass so zu generalisieren halte ich für falsch.
Man kann auch schnelle Java-Programme schreiben, genauso wie man langsame C++ Programme schreiben kann.Eclipse und NetBeans sind IDEs und keine Compiler. Beide unterstützen übrigens auch C++.
Bücher zum Thema Spieleentwicklung kann ich die leider keine empfehlen, da ich bisher keine gelesen habe.
Ich habe mich vor einiger Zeit mal ein wenig mit OpenGL beschäftigt. Es gibt eine Menge guter Tutorials (wie z.B. von NeHe) oder Seiten, die Themen und Aspekte der Spieleentwicklung erläutern (z.B. gamedev.net, spieleprogrammierung.net ...).
Google spuckt hier ne Menge aus
-
Jonny0815 schrieb:
wie schwer zu erkennen such ich ein gutes buch um c++ zu lernen. kann/sollte auch erstmal auf 2D basis sein
Also C++ kennt kein 2D/3D. Dementsprechend wirst du auch kein (gutes) Buch finden, das sich sowohl an C++- als auch an Grafikanfänger richtet. D.h. du solltest erstmal die Grundlagen (=C++) beherrschen und dich dann entweder für eine Engine (Irrlicht, Ogre3D) oder eine Schnittstelle (OpenGL, DirectX) entscheiden. Ich finde es schadet nicht, erstmal mit 2D und OpenGL/DX anzufangen und alles "von Hand" zu zeichnen. Da gibt es dann auch haufenweise Tutorials online, für OpenGL zB NeHe, für DX das SDK und für Irrlicht/Ogre die Wikis.
Wenn du Java gut beherrscht kannst du dir ein dickes C++-Buch eigentlich auch schenken und gleich mit der Grafik loslegen. Du musst als Umsteiger eigentlich nur wissen, was Pointer sind - den Rest gibts in Java auch so oder so ähnlich oder man braucht es für Spiele eh nicht.eine frage hätt ich dann noch gibts für c++ auch kompiler wie für java (bei java hatt ich eclipse und net beans)
Wie bereits gesagt: das sind keine Compiler. Ich würde spontan mal empfehlen: http://www.microsoft.com/germany/express/
Das ist eine IDE + Microsoft Compiler.
-
Alles von "Hand" zeichnen geht wohl nicht mit OpenGL oder DirectX, denn da übernimmt ja die Grafikkarte/Treiber alles was Spaß macht
Wirklich von Hand sieht anders aus, da schreibst du dir eine Routine um ein Pixel darzustellen und den Rest dann selbst, also wie zeichne ich eine Linie wie ein Polygon wie ein schattiertes Polygon und wo weiter und so fort. Vor den 3D-Beschleunigern haben das alle so gemacht, egal ob Firmen oder Einzelpersonen. Aber erst dann kannst du sagen "ich habe es von Hand gemacht".
-
job danke
virsual c++ hab ich inzwischen und einige auszüge aus büchern wo die grundlagen von c++ drinn sind und dann auf die grafikprogramierung umsteigt.
auf directx bzw. openAl wer ich glaub ich erstmal nicht zurückgreifen sonder alles "von hand zeichnen" XD
thx
pls closeJonny0815
-
Jonny0815 schrieb:
auf directx bzw. openAl wer ich glaub ich erstmal nicht zurückgreifen sonder alles "von hand zeichnen" XD
Doch das wirst Du. Denn über OpenGL oder DirectX sprichst Du die Grafikkarte an. Das komplett selber zu programmieren ist schwachsinn. OpenAL is btw sound, nicht grafik.
rya.
-
Alles von Hand machen, ohne die Grafikkarte zu nutzen, ist wohl der einzige Weg um wirklich was über 3D-Grafikprogrammierung zu lernen. Machbar in akzeptabler Zeit ist es auch, wie diverse PC-Demos und Intros aus alten Tagen beweisen, also wo ist das Problem?
-
cppfrager schrieb:
Alles von Hand machen, ohne die Grafikkarte zu nutzen, ist wohl der einzige Weg um wirklich was über 3D-Grafikprogrammierung zu lernen. Machbar in akzeptabler Zeit ist es auch, wie diverse PC-Demos und Intros aus alten Tagen beweisen, also wo ist das Problem?
Hmm, die alten C64 Intros sind aber nicht 3D und die neueren nutzen auch meistens DirectX oder OpenGL. Aber willst Du wirklich sowas auf einer nicht beschleunigten Oberfläche machen? Was willst Du da über 3D Programmierung lernen? Das lernst Du nur mit OpenGL und DirectX. Ausserdem ruckelt doch schon nen Linux 2D Desktop mit Effekten ohne verfügbare Beschleunigung.
Ansonsten viel Spaß dabei die Grafikkarte selber anzusprechen. Denn ohne die geht es nicht. Und ich würde gerne das Resultat dann sehen und den Rechner auf dem das "3D" auch läuft ohne Beschleunigung, solange wir nicht nur von einem drehenden Würfeln reden ;).
rya.
-
Ich rede hier nicht von C64, sondern eher vom PCs in der Zeit in der Quake raus kam. Sicherlich kommt die Geschwindigkeit nicht an der von der Graka ran aber für ein 3D Shooter reicht es locker. So schwer ist das Rendern in den Speicher mit anschließendem anzeigen per glDrawPixels auch wieder nicht.
Was man da über 3D-Grafikprogrammieung lernen will? Die Frage ist nicht dein ernst oder? Beschäftige dich mal mit dem Thema und wirst du die Frage nicht mehr stellen. Hier mal ein paar Punkte was man alles lernen könnte ohne OpenGL Direct X
Koordinatensysteme, Geradengleichung, Bresenham, Polygon, konvex, SchwerpunktTrigonometrischer Kreis, mit Pythagoras-Kreis, Bresenham-Kreis, Ellipse, XOR-Gummiband
2D-Füllen: BoundaryFill, Scanline, Dither-Matrix
Punkt in Polygon, 2D-Clipping von Linien, 2D-Clipping von Polygonen, Transformationen
Transformationen, homogene Koordinaten, Transformationsmatrix, Kurven, Splines
Splines, Bezier, de Casteljau, B-Splines,NURBS
Farbe: Spektrum, Tristimulus, CIE, RGB, CMY, YUV, HSV, Pixelbilder, Auflösung vom Dia
Farbtabelle, GIF, Floyd-Steinberg, LZW, JPEG, Diskrete Cosinus Transformation, RLE, Huffman
Fraktale: Koch'sche Schneeflocke, Lindenmayer, Mandelbrot, Julia, iterierte Funktionensysteme
Länge, Skalarprodukt, Kreuzprodukt, Determinante, Matrixinversion, 3D-Transformationen
Rotation um beliebige Achse, Koordinatensystemwechsel, Normalentransformation, Projektion
Betrachtungstransformationen:Viewing Pipeline, View Mapping, Device Mapping, Clipping
3D-Repräsentation, Polyeder, Zylinder, Kugel, Bezier-Flächen, CSG
Culling: Back Face Removal, z-Buffer, Painter's Algorithm, Span Buffer, BSP-Tree
Rasterung von Flächen: Lichtquellen, Materialeigenschaften, Flat-, Gouraud-, Phong-Shading, Schatten
Texturing: Texture Map, Light Map, Environment Map, Bump Map, Displacement MapDas war nur ein Ausschnitt aus einem Wintersemester Computergrafik und da gibt es noch viel mehr zu lernen.
-
Du redest davon alles ohne DirectX oder OpenGL zu machen und redest dann von glDrawPixels?
-
Scorcher24 schrieb:
Du redest davon alles ohne DirectX oder OpenGL zu machen und redest dann von glDrawPixels?
Mein Güte, ja man kann den Speicher mit dem fertigen Frame per glDrawPixels dann über OpenGL darstellen oder auch über hundert andere Funktionen wie z.B WinAPI bitblt usw. Es ist auf jeden Fall total easy einen Speicherbereich auf den Bildschirm zu bringen. Was nicht easy ist ist alles was OpenGL etc zu bieten hat wirklch per Hand zu programmieren, aber nur so lernt man wirklich alles was die 3D Programmierung ausmacht. Vorausgesetzt man will das lernen, wenn nicht kann man auch alles fix und fertig von der Graka machen lassen und sich nur noch darum kümmern das diese effektiv ausgelastet wird. Ich sage auch nicht dass das einfach ist.