Aufbau von 3D Spielen

Für allgemeine Fragen zur Programmierung mit PureBasic.
Benutzeravatar
Thorium
Beiträge: 1722
Registriert: 12.06.2005 11:15
Wohnort: Germany
Kontaktdaten:

Beitrag von Thorium »

Rubiko hat geschrieben: Ich vermute mal, das Video wird einfach nur im Hintergrund abgespielt während das Spiel noch weiterläuft (sollte ja eigentlich keine Probleme geben), oder?
Wie gesagt, die Hintergründe sind 2D. Im Prinzip ist ein Video ja auch nur eine Animation. Ist ja kein Problem das Bild oder Ausschnitte des Hintergrunds zu animieren. Einfach nur eine zeitliche aneinanderreihung von Bildern.
Zu mir kommen behinderte Delphine um mit mir zu schwimmen.

Wir fordern mehr Aufmerksamkeit für umfallende Reissäcke! Bild
Benutzeravatar
ZeHa
Beiträge: 4760
Registriert: 15.09.2004 23:57
Wohnort: Friedrichshafen
Kontaktdaten:

Beitrag von ZeHa »

Hmm als Beispiel: Du siehst ein Schiff wegfahren, während Du selbst im Hafen stehst. Das Schiff und das Wasser ist als Video gedreht, und der Hafen und Deine Figur ist 3D. Ist das so richtig verstanden?

Wenn ja, dann gibt's mehrere Möglichkeiten. Entweder es ist doch kein Video, sondern es sind 3D-Objekte die sich durch eine geskriptete Animation bewegen, oder es ist ein Video, das als Texture auf eine große Fläche (in dem Fall sowas wie eine Leinwand) gerendert wird. Vielleicht gibt's noch andere Möglichkeiten, z.B. erst das aktuelle Frame aus dem Video in den Bildbuffer schreiben und danach ganz normal seine 3D-Sachen zu machen, aber da weiß ich letztendlich auch nicht so gut drüber Bescheid.
Bild     Bild

ZeHa hat bisher kein Danke erhalten.
Klicke hier, wenn Du wissen möchtest, woran ihm das vorbeigeht.
Benutzeravatar
Thorium
Beiträge: 1722
Registriert: 12.06.2005 11:15
Wohnort: Germany
Kontaktdaten:

Beitrag von Thorium »

Ich bin auch jemand, der ab und zu mal dazu rät das manche Leute sich erstmal mit simpleren Sachen beschäftigen sollen. Da bitte dann auch mal genauer hinlesen. Ich schreibe nie: Bekommst du sowieso nicht alleine hin. Ich weise darauf hin das eventuell grundlegende Kenntnisse fehlen und in den meisten Fällen gebe ich einen Startpunkt, wo man anfangen kann sein Wissen zu erweitern. Es ist einfach mal so das es ungemein komplexe Themen und Problematiken gibt, die sich so einfach nicht erklären lassen, wenn das Grundwissen fehlt.
Zu mir kommen behinderte Delphine um mit mir zu schwimmen.

Wir fordern mehr Aufmerksamkeit für umfallende Reissäcke! Bild
Benutzeravatar
dllfreak2001
Beiträge: 2925
Registriert: 07.09.2004 23:44
Wohnort: Bayern

Beitrag von dllfreak2001 »

Man kann ja anstatt clearscreen() das Video in Vollbild ausgeben und erst dann die Szene rendern... Auch gab es schon oft Videos auf Texturen rendern...
Man könnte sich also aus mehreren Videos sogar eine Skybox basteln und hätte durch schöne vorgerenderte Sequenzen eine atemberaubende Spielewelt erschaffen.
Gerade bei solchen Fantasyspielen eine interessante Variante.

OT:
Ich denke da wird ein Haufen Grafiker an den Sequenzen sitzen, aber die Japaner sind ja in solche Dinge vernarrt. Animierte Mangas zeichnen sie auch noch am liebsten per Hand CG kommt nur in Kampfszenen vor... (aber das machen mittlerweile meist ja die Koreaner)
Filme nur in CG sind ja eher selten und sehen imho irgendwo auch nicht immer toll aus.
I´a dllfreak2001
Benutzeravatar
ZeHa
Beiträge: 4760
Registriert: 15.09.2004 23:57
Wohnort: Friedrichshafen
Kontaktdaten:

Beitrag von ZeHa »

Man kann ja anstatt clearscreen() das Video in Vollbild ausgeben und erst dann die Szene rendern...
Ja nur ist das nicht immer möglich. Habe das mal mit OpenGL und SDL versucht, wenn ich OpenGL verwende, dann darf ich nicht nebenbei (auch nicht davor oder danach) in den Grafikbuffer zeichnen, das kann zu Abstürzen führen. Die genauen Gründe dafür kenn ich allerdings nicht.

Also es kann schon sein daß es mit anderen APIs funktioniert, nur wie gesagt, in meinem Fall ging das nicht.
Bild     Bild

ZeHa hat bisher kein Danke erhalten.
Klicke hier, wenn Du wissen möchtest, woran ihm das vorbeigeht.
Benutzeravatar
Thorium
Beiträge: 1722
Registriert: 12.06.2005 11:15
Wohnort: Germany
Kontaktdaten:

Beitrag von Thorium »

ZeHa hat geschrieben: Ja nur ist das nicht immer möglich. Habe das mal mit OpenGL und SDL versucht, wenn ich OpenGL verwende, dann darf ich nicht nebenbei (auch nicht davor oder danach) in den Grafikbuffer zeichnen, das kann zu Abstürzen führen. Die genauen Gründe dafür kenn ich allerdings nicht.
Das verstehe ich jetzt nicht ganz. Wenn du nicht in den Grafikbuffer zeichnen darfst, wie bekommst du dann jemals ein Bild auf den Schirm? :freak:
Ich glaub ich hab das jetzt nicht so richtig verstanden. :mrgreen:
Was meinst du mit nebenbei, davor oder danach?
Zu mir kommen behinderte Delphine um mit mir zu schwimmen.

Wir fordern mehr Aufmerksamkeit für umfallende Reissäcke! Bild
DarkDragon
Beiträge: 6291
Registriert: 29.08.2004 08:37
Computerausstattung: Hoffentlich bald keine mehr
Kontaktdaten:

Beitrag von DarkDragon »

Thorium hat geschrieben:
ZeHa hat geschrieben: Ja nur ist das nicht immer möglich. Habe das mal mit OpenGL und SDL versucht, wenn ich OpenGL verwende, dann darf ich nicht nebenbei (auch nicht davor oder danach) in den Grafikbuffer zeichnen, das kann zu Abstürzen führen. Die genauen Gründe dafür kenn ich allerdings nicht.
Das verstehe ich jetzt nicht ganz. Wenn du nicht in den Grafikbuffer zeichnen darfst, wie bekommst du dann jemals ein Bild auf den Schirm? :freak:
Ich glaub ich hab das jetzt nicht so richtig verstanden. :mrgreen:
Was meinst du mit nebenbei, davor oder danach?
Er meint, dass man nicht GDI/2D SDL/Direct Show mit dem Renderingvorgang (OpenGL) auf der Grafikkarte vermischen sollte (Er würde DirectShow in verbindung mit OpenGL bringen). Das trifft hier aber nicht zu, denn wir laden die AVIFrames in eine OpenGL Textur und zeichnen die dann.
Angenommen es gäbe einen Algorithmus mit imaginärer Laufzeit O(i * n), dann gilt O((i * n)^2) = O(-1 * n^2) d.h. wenn man diesen Algorithmus verschachtelt ist er fertig, bevor er angefangen hat.
Benutzeravatar
Thorium
Beiträge: 1722
Registriert: 12.06.2005 11:15
Wohnort: Germany
Kontaktdaten:

Beitrag von Thorium »

DarkDragon hat geschrieben:
Thorium hat geschrieben:
ZeHa hat geschrieben: Ja nur ist das nicht immer möglich. Habe das mal mit OpenGL und SDL versucht, wenn ich OpenGL verwende, dann darf ich nicht nebenbei (auch nicht davor oder danach) in den Grafikbuffer zeichnen, das kann zu Abstürzen führen. Die genauen Gründe dafür kenn ich allerdings nicht.
Das verstehe ich jetzt nicht ganz. Wenn du nicht in den Grafikbuffer zeichnen darfst, wie bekommst du dann jemals ein Bild auf den Schirm? :freak:
Ich glaub ich hab das jetzt nicht so richtig verstanden. :mrgreen:
Was meinst du mit nebenbei, davor oder danach?
Er meint, dass man nicht GDI/2D SDL/Direct Show mit dem Renderingvorgang (OpenGL) auf der Grafikkarte vermischen sollte (Er würde DirectShow in verbindung mit OpenGL bringen).
Oh, ja das macht Sinn, das des nicht gehen kann.
Zur Zeit von FF7 waren AVI's sowieso untypisch für Spiele. Die meisten haben eigene Filmformate verwendet und so auch die Filme zu Fuß auf Texturen gezeichnet ohne irgendwelche API's.
Gab auch extra kommerzielle Filmformate für Spiele, wie z.b. Bink. Wird aber heute immer unpopulärer.
Zu mir kommen behinderte Delphine um mit mir zu schwimmen.

Wir fordern mehr Aufmerksamkeit für umfallende Reissäcke! Bild
Benutzeravatar
dllfreak2001
Beiträge: 2925
Registriert: 07.09.2004 23:44
Wohnort: Bayern

Beitrag von dllfreak2001 »

Ich meine aber das ink nicht zum zeichen auf Texturen verwendet wurde.
Das war nur ein x-beliebiges Videoformat für Zwischensequenzen ohne Interaktion. Es gibt ja noch nen haufen anderer Buffer in OpenGL... da kann man auch rumkritzeln les mich grad in eine interessante Seite ein:

http://wiki.delphigl.com/index.php/Tuto ... -Tutorials

Aber direkt auf PB übertragen kann man es nicht so einfach.
I´a dllfreak2001
DarkDragon
Beiträge: 6291
Registriert: 29.08.2004 08:37
Computerausstattung: Hoffentlich bald keine mehr
Kontaktdaten:

Beitrag von DarkDragon »

dllfreak2001 hat geschrieben:Ich meine aber das ink nicht zum zeichen auf Texturen verwendet wurde.
Das war nur ein x-beliebiges Videoformat für Zwischensequenzen ohne Interaktion. Es gibt ja noch nen haufen anderer Buffer in OpenGL... da kann man auch rumkritzeln les mich grad in eine interessante Seite ein:

http://wiki.delphigl.com/index.php/Tuto ... -Tutorials

Aber direkt auf PB übertragen kann man es nicht so einfach.
Auf welche Buffer willst du denn kritzeln? Du musst auf jeden Fall die Videoframes auf eine Textur packen. Direkte Zugriffe auf die Framebuffers sind nicht erlaubt. Selbst bei den modernen FBOs.

Und wobei hast du Probleme es nach PB zu übertragen?
Angenommen es gäbe einen Algorithmus mit imaginärer Laufzeit O(i * n), dann gilt O((i * n)^2) = O(-1 * n^2) d.h. wenn man diesen Algorithmus verschachtelt ist er fertig, bevor er angefangen hat.
Antworten