Frage zur 3d Grafik
-
Hallo,
ich frage mich wie man 3d Grafik erzeugt bzw. was alles dazu nötig ist?
Battlezone von 1980 war ja das erste kommerzielle 3d Spiel.
https://www.youtube.com/watch?v=Ff3Rjr-oExwWie 2d Grafik entsteht ist für mich nachvollziehbar, da der Bildschirm ja auch 2d ist. Aber bei 3d kann ich es mir nicht vorstellen. Ich hoffe, dass jemand versteht was ich meine. Vielleicht kennt ja auch jemand ein gutes Buch.
mfg tori
-
tori1117 schrieb:
ich frage mich wie man 3d Grafik erzeugt bzw. was alles dazu nötig ist?
Mathematik & Algorithmen
-
-
tori1117 schrieb:
Wie 2d Grafik entsteht ist für mich nachvollziehbar, da der Bildschirm ja auch 2d ist. Aber bei 3d kann ich es mir nicht vorstellen.
-
Irgendwie ist es immer noch schwer zu verstehen.
Was ich mich auch Frage ist, wenn man sich einer 3d Welt
bewegt, existiert die virtuelle Welt ja irgendwo im PC.
Wie kann man sich das vorstellen. Steckt die 3d Welt dann
im vram? Ich weiß, die Frage hört sich bestimmt bescheuert an.
-
Die Welt wird in der Regel modelliert aus Dreiecken, welche beschrieben werden durch die Koordinaten ihrer Eckpunkte...
-
Ich habe mir den Weg in die 3D-Programmierung dadurch erschlossen, indem ich aus lauter 3D-Punkten ein Würfel gemalt habe, welcher sich dann einfach dreht.
Stell dir mal vor du hast ein willst ein Würfel malen, wo man nur die Kanten sieht. Jeder Eckpunkt des Würfels hat eine 3D-Koordiante (x,y,z)
Zum zeichnen hast du aber nur SetPixel(x,y) und DrawLine(x1, y1, x2, y2)
Du musst also die Punkte von 3D in 2D umrechnen. Dinge, die weiter weg sind, werden ja kleiner.
Aus diesen Gedanken herraus kannst du folgende Formel zur Umrechnung von 3D nach 2D ermitteln.
Der Bildschirm ist 800 mal 600 Pixel groß
XM = 400
YM = 3002D-x = (x - XM) / z
2D-y = (y - YM) / zDiese Formel wendet du für jeden Eckpunkt des Würfels an. Schon kannst du ein 3D-Wüfel malen.
-
tori1117 schrieb:
Irgendwie ist es immer noch schwer zu verstehen.
Was ich mich auch Frage ist, wenn man sich einer 3d Welt
bewegt, existiert die virtuelle Welt ja irgendwo im PC.
Wie kann man sich das vorstellen. Steckt die 3d Welt dann
im vram? Ich weiß, die Frage hört sich bestimmt bescheuert an.Ja und wenn du den Rechner ausschaltest müssen alle Bewohner sterben!!!!
-
Ein Foto ist auch 2D und das was aufgenommen wurde war ursprünglich 3D. Bei Computer wird halt berechnet, was auf dem Foto sichtbar ist.
PS: Die Naivität von tori ist irgendwie süß^^
-
oenone schrieb:
PS: Die Naivität von tori ist irgendwie süß^^
Mir ist das ja schon klar, da ich ja auch einen 3d Würfel
auf ein Blatt Papier zeichnen kann. Möchte halt ganz genau die
Vorgänge verstehen, wie alles zusammen wirkt (Hardware, Software)
Denn viele Menschen denken sie haben Sachen verstanden, haben es aber
oft gar nicht oder nicht wirklich alles verstanden. Und fragen nicht weiter aus welchem Grund auch immer. Man merkt das schon, wenn von
ihnen verlangt wird was zu lernen. Es wird auswendig gelernt. Sobald sich
was kleines ändert, können sie die Aufgabe nicht mehr lösen. Deswegen frage ich, solange bis ich es zu 100 % verstanden habe.
-
-
Ok werde mir das Buch ansehen.
Was für Hardware ist denn nötig um 3d darzustellen?
Weil es ja vor 1980 keine 3d games gab.
Das hat ja dann damals bestimmt die cpu berechnet?
-
tori1117 schrieb:
oenone schrieb:
PS: Die Naivität von tori ist irgendwie süß^^
Mir ist das ja schon klar, da ich ja auch einen 3d Würfel
auf ein Blatt Papier zeichnen kann. Möchte halt ganz genau die
Vorgänge verstehen, wie alles zusammen wirkt (Hardware, Software)
Denn viele Menschen denken sie haben Sachen verstanden, haben es aber
oft gar nicht oder nicht wirklich alles verstanden. Und fragen nicht weiter aus welchem Grund auch immer. Man merkt das schon, wenn von
ihnen verlangt wird was zu lernen. Es wird auswendig gelernt. Sobald sich
was kleines ändert, können sie die Aufgabe nicht mehr lösen. Deswegen frage ich, solange bis ich es zu 100 % verstanden habe.wenn du es ganz genau wissen willst, darfst du aber nicht erwarten, dass dir die antwort in einem online forum zufliegt
für 3d braucht man auch keine spezielle hardware, das kann jede cpu.
im prinzip steckt ja nur mathematik dahinter. diese geschickt angewandt führt zu den tollsten effekten.
überlege dir, wie du einen 3d würfel auf ein blatt papier darstellst: du projeziert ihn - wenn vielleicht auch unbewusst.
jetzt stell dir den würfel als modell in einem computerprogramm vor. jeder eckpunkt des würfels ist in 3d koordinaten angegeben (x,y,z). was ist die einfachste variante, diesen würfel einen 2d bildschirm zu projezieren? einfach die z koordinate weglassen und die (x,y) koordinaten einzeichnen.
das war einfach.
was tun, wenn sich zwei punkte genau überdecken, weil sie hintereinanderliegen, also z.B. die punkte (1,2,3) und (1,2,5)? na dann nimmst du eben den näheren punkt und zeichnest diesen ein, der andere ist ja dahinter verdeckt.in meinem beispiel haben wir letztlich objekte im 3d raum in den 2d raum umgewandelt.
nichts anderes passiert bei großen graphikprogrammen/spielen. nur das da halt noch einiges dazu kommt. die koordinaten werden zuerst noch umgerechnet, z.b. weil ein objekt gedreht werden soll. außerdem werden nur objekte betrachtet, die in einem bestimmten bereich (sichtbereich) liegen, alles andere wird verworfen.
hat man dann die koordinaten umgerechnet, so muss das bild ja auch noch erzeugt werden. das nennt man rastern. ein punkt ist einfach: einfach den nächstbesten pixel anmalen. bei einer linie muss man mehrere pixel anmalen. und stets muss man darauf achten, dass nähere objekte fernere objekte übermalen, also muss man noch in einem eigenen puffer sich merken, wie weit das objekt weg war, dass man da eingezeichnet hat.
flächige objekte zerteilt man üblicherweise in dreiecke, denn diese kann man recht bequem rastern.kauf dir ein buch wie "Fundamentals of Computer Graphics", versuche die mathematik zu verstehen, und wende das dann auch praktisch an. muss ja nicht gleich ein spiel sein. programmier ein paar graphikeffekte, oder einen einfachen raytracer. oder eine eigene, simple graphik pipeline. dann verstehst du das prinzip das dahintersteckt.
-
tretert schrieb:
tori1117 schrieb:
oenone schrieb:
PS: Die Naivität von tori ist irgendwie süß^^
Mir ist das ja schon klar, da ich ja auch einen 3d Würfel
auf ein Blatt Papier zeichnen kann. Möchte halt ganz genau die
Vorgänge verstehen, wie alles zusammen wirkt (Hardware, Software)
Denn viele Menschen denken sie haben Sachen verstanden, haben es aber
oft gar nicht oder nicht wirklich alles verstanden. Und fragen nicht weiter aus welchem Grund auch immer. Man merkt das schon, wenn von
ihnen verlangt wird was zu lernen. Es wird auswendig gelernt. Sobald sich
was kleines ändert, können sie die Aufgabe nicht mehr lösen. Deswegen frage ich, solange bis ich es zu 100 % verstanden habe.wenn du es ganz genau wissen willst, darfst du aber nicht erwarten, dass dir die antwort in einem online forum zufliegt
für 3d braucht man auch keine spezielle hardware, das kann jede cpu.
im prinzip steckt ja nur mathematik dahinter. diese geschickt angewandt führt zu den tollsten effekten.
überlege dir, wie du einen 3d würfel auf ein blatt papier darstellst: du projeziert ihn - wenn vielleicht auch unbewusst.
jetzt stell dir den würfel als modell in einem computerprogramm vor. jeder eckpunkt des würfels ist in 3d koordinaten angegeben (x,y,z). was ist die einfachste variante, diesen würfel einen 2d bildschirm zu projezieren? einfach die z koordinate weglassen und die (x,y) koordinaten einzeichnen.
das war einfach.
was tun, wenn sich zwei punkte genau überdecken, weil sie hintereinanderliegen, also z.B. die punkte (1,2,3) und (1,2,5)? na dann nimmst du eben den näheren punkt und zeichnest diesen ein, der andere ist ja dahinter verdeckt.in meinem beispiel haben wir letztlich objekte im 3d raum in den 2d raum umgewandelt.
nichts anderes passiert bei großen graphikprogrammen/spielen. nur das da halt noch einiges dazu kommt. die koordinaten werden zuerst noch umgerechnet, z.b. weil ein objekt gedreht werden soll. außerdem werden nur objekte betrachtet, die in einem bestimmten bereich (sichtbereich) liegen, alles andere wird verworfen.
hat man dann die koordinaten umgerechnet, so muss das bild ja auch noch erzeugt werden. das nennt man rastern. ein punkt ist einfach: einfach den nächstbesten pixel anmalen. bei einer linie muss man mehrere pixel anmalen. und stets muss man darauf achten, dass nähere objekte fernere objekte übermalen, also muss man noch in einem eigenen puffer sich merken, wie weit das objekt weg war, dass man da eingezeichnet hat.
flächige objekte zerteilt man üblicherweise in dreiecke, denn diese kann man recht bequem rastern.kauf dir ein buch wie "Fundamentals of Computer Graphics", versuche die mathematik zu verstehen, und wende das dann auch praktisch an. muss ja nicht gleich ein spiel sein. programmier ein paar graphikeffekte, oder einen einfachen raytracer. oder eine eigene, simple graphik pipeline. dann verstehst du das prinzip das dahintersteckt.
Danke hast du gut erklärt und danke für die anderen Antworten. Es ist jetzt alles viel klarer. Werde mal die Bücher durcharbeiten.
War der Grund, dass es vorher keine 3d Spiele gab der, dass es ziemlich rechenintensiv ist 3d Grafik zu berechnen und die Prozessoren noch nicht
stark genug waren?Das Spiel, welches ich genannt habe hat ja eine Vektorgrafik mit einem Drahtgitter. Die CPU hat es berechnet und die Grafikkarte wurde nur zur Darstellung und nicht zur Berechnung genutzt richtig?
-
War der Grund, dass es vorher keine 3d Spiele gab der, dass es ziemlich rechenintensiv ist 3d Grafik zu berechnen und die Prozessoren noch nicht
stark genug waren?Graphikkarten sind halt genau auf ihre Aufgabe zugeschnitten und erledigen das dafür umso besser.
Vor allem können Graphikkarten viele Berechnungen gleichzeitig anstellen. Nehmen wir wieder einen Würfel als Beispiel mit seinen 8 Eckpunkten. Wenn nun der Würfel verschoben werden soll, so würde man auf der CPU jeden Eckpunkt einzeln verschieben.
Auf der Graphikkarte wird hingegen jeder Eckpunkt unseres Würfels zum gleichen Zeitpunkt verschoben.CPUs sind hingegen viel allgemeiner ausgelegt. Natürlich ist auch die Leistung der CPUs gestiegen, auch auf CPUs kann man heute tolle Bilder rendern.
-
XMAMan schrieb:
Ich habe mir den Weg in die 3D-Programmierung dadurch erschlossen, indem ich aus lauter 3D-Punkten ein Würfel gemalt habe, welcher sich dann einfach dreht.
Das Drehen des Würfels ist auch nicht unbedingt völlig trivial, oder?
Als Tipp für den Threadersteller: In Dragonball Z wird an einer Stelle Programmcode gezeigt, der eine Rotation in 3D realisiert:
-
Gregor schrieb:
Das Drehen des Würfels ist auch nicht unbedingt völlig trivial, oder?
Eigentlich schon. Das Raumschiff rollen zu lassen (im Sinne Rollen&Stampfen) ist kniffliger. Hab damals fast geweint. Hab's mit Abiturwissen nicht selber hingekriegt, komischer Quaternionencode tat es dann, den ich nicht verstand.
Gregor schrieb:
Als Tipp für den Threadersteller: In Dragonball Z wird an einer Stelle Programmcode gezeigt, der eine Rotation in 3D realisiert:
https://www.youtube.com/watch?v=Ppz0I8nCni0Jo, das geht.
(C64 Video - Elite) https://www.youtube.com/watch?v=ltsqeUbPuEM
-
tori1117 schrieb:
oenone schrieb:
PS: Die Naivität von tori ist irgendwie süß^^
Mir ist das ja schon klar, da ich ja auch einen 3d Würfel
auf ein Blatt Papier zeichnen kann. Möchte halt ganz genau die
Vorgänge verstehen, wie alles zusammen wirkt (Hardware, Software)
Denn viele Menschen denken sie haben Sachen verstanden, haben es aber
oft gar nicht oder nicht wirklich alles verstanden. Und fragen nicht weiter aus welchem Grund auch immer. Man merkt das schon, wenn von
ihnen verlangt wird was zu lernen. Es wird auswendig gelernt. Sobald sich
was kleines ändert, können sie die Aufgabe nicht mehr lösen. Deswegen frage ich, solange bis ich es zu 100 % verstanden habe.Kenn ich. Mich macht das auch oft verrückt irgendwas zu verwenden wovon ich nicht genau weiss was es eigentlich tut. Das führt aber auch oft dazu das man seine Zeit damit verschwendet alles mögliche nachzubauen was eigentlich schon irgendwo fertig existiert. Man sollte das also nicht übertreiben. Hier ist übrigens etwas Kram wo Projektion relativ schnell und gut beschrieben ist: http://www-gs.informatik.tu-cottbus.de/cg_v06b.pdf und http://www.3dsource.de/deutsch/3Dmathe.htm Als Buch kann ich dir das empfehlen: http://www.amazon.de/Computergrafik-Zhigang-Xiang/dp/3826609085/
...du wirst dann wahrscheinlich irgendwann merken das dein Gehirn wehtut und es sterbenslangweilig ist und einfach OpenGL benutzen
-
tori1117 schrieb:
Weil es ja vor 1980 keine 3d games gab.
Was gab es vor 1980 überhaupt an grafischen Videospielen? Es gab damals einfach keinen Bedarf, keinen Markt dafür. Die technische Leistungsfähigkeit spielt natürlich auch eine Rolle. Allerdings kann man auch heute noch staunen, was manche Leute mit Uralt-Konsolen hinbekommen (demos).
PS: Es gab auch vor Battlezone 3D-Spiele: "1974: Both Maze War (on the Imlac PDS-1 at the Ames Research Center in California) and Spasim (on PLATO) appeared, pioneering examples of early multi-player 3D first-person shooters."