Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: Fr Jul 18, 2025 04:34

Foren-Übersicht » Programmierung » Einsteiger-Fragen
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 11 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Weltraum
BeitragVerfasst: Do Jul 10, 2008 14:55 
Offline
DGL Member

Registriert: Fr Dez 28, 2007 20:24
Beiträge: 62
Wohnort: Berlin
Ich habe mir gedacht das es irgentwie einfacher ist ein Weltraum Spiel zu proggen als ein "normales". Ich meine damit das Leveldesign weil ja z.b. ein Shooter viele Wände, Häuser, was auch immer hat.
Ein Weltraumgame is nen Leerer raum mit ab und zu nem Sonnensystem, nen paar Stationen und Asteroidengürteln.

Wie erstelle ich einen Weltraum? Also sozusagen einen 360° Hintergrund mit Sternen und Nebeln, aber so das der Spieler nie die Textur erreichen kann?

Geht das indem man eine riesen Kugel um den Spieler rendert, die größer ist als alles andere, mit der Textur auf der Innenseite?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Jul 10, 2008 15:07 
Offline
DGL Member
Benutzeravatar

Registriert: Do Sep 02, 2004 19:42
Beiträge: 4158
Programmiersprache: FreePascal, C++
Ja, du renderst eine Kugel mit der Textur an der Innenseite. Die machst du aber nicht unbedingt größer als alles andere. Du nimmst am besten einen Radius, der mindestens doppelt so groß ist wie die NearPlane, die du bei gluPerspective angibst. Dann renderst du das vor allem anderen und löschst danach den Tiefenpuffer. Dazu positionierst du es immer an der Kameraposition, soll heißen, du führst von der Kamera nur die Rotationen durch, nciht die Translationen.

Damit erreichst du, dass die Kugel immer da is, wo sie sein soll, der Spieler kann sie nie erreichen, weil sie mitwandert und Objekte können sie nicht "durchstoßen", weil sie keinen einfluss auf den Tiefenpuffer hat.

Gruß Lord Horazont

_________________
If you find any deadlinks, please send me a notification – Wenn du tote Links findest, sende mir eine Benachrichtigung.
current projects: ManiacLab; aioxmpp
zombofant networkmy photostream
„Writing code is like writing poetry“ - source unknown


„Give a man a fish, and you feed him for a day. Teach a man to fish and you feed him for a lifetime. “ ~ A Chinese Proverb


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Jul 10, 2008 15:11 
Offline
DGL Member

Registriert: Fr Dez 28, 2007 20:24
Beiträge: 62
Wohnort: Berlin
Nach der Kugel muss der Tiefenpuffer aber wieder Aktiviert werden nehme ich an?

Falls löschen deaktivieren heisst?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Jul 10, 2008 15:38 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Jan 31, 2005 11:02
Beiträge: 432
Wohnort: Rheinlandpfalz
Hi,
löschen heisst
Code:
  1. glClear(GL_DEPTH_BUFFER_BIT);

du deaktivierst den Tiefentest ja nicht wirklich.

//Edit:
Du kannst ja auch ne Weltraum SkyBox statt der Kugel nehmen...
ist, denke ich, einfacher. Es sollten sich auch einige im Netz finden lassen. :wink:

_________________
http://texelviews.delphigl.com


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Jul 10, 2008 15:48 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Okt 03, 2007 14:22
Beiträge: 388
Wäre eine Überlegung wert, keine Textur zu nehmen, sondern zu zeichnen. Also aufblitzende Sterne usw. Sind im Prinzip doch wieder Texturen, welche sich ändern oder überblendet werden, dürfte aber eindrucksvoll aussehen. Ich denke auch als Einsteiger müsste so etwas zu machen sein, ist eben die Frage wie die Performance ist - dazu kann ich leider nichts sagen. Da du schon 49 Beiträge hast, denke ich aber dass du schon eingestiegen bist....


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Jul 10, 2008 15:53 
Offline
DGL Member

Registriert: Fr Dez 28, 2007 20:24
Beiträge: 62
Wohnort: Berlin
Ich bin grade dabei was umzusetzen mal sehen was draus wird, ich psote es dann hier mal.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Jul 10, 2008 16:50 
Offline
DGL Member
Benutzeravatar

Registriert: So Jun 04, 2006 12:54
Beiträge: 263
Eigendlich ist ein weltraum game nicht einfacher zu code, da eine ganze reihe von fallen auf einen warten:

Erst mal die render technischen probleme:
In der Regel hat man auf einem monitor einen sinvollen öffnungswinkel von gerade mal 60 Grad (und nur 40 Grad in der höhe) wirklich grob über den daumen gerechnet ist das nicht mal 1/30 der ganzen voll kugel. Ensprechen ist die wahrscheinlichkeit hoch, das man ein objekt nicht sofort wieder findet.

Der Hintergrund besteht häufig aus Sternen, die hauptsachlich aus hochfrequenten Bildanteilen bestehen (quasi nur ein texel) Wenn die 60 grad bild öffnung durch die volle HDR auflösung geteilt werden (1920 breite), dann entspricht einpixel einer auflösung von 0,031 Grad. Ungerechnet auf eine Cubemap ist rein rechnerisch schon eine mit 5760 pixel Kantenlänge notwendig, allerdings werden aufgrund der verzerrungen die 8192 ger version sinnvoll, die verbraucht sage und schreibe 402MPixel zu je 4 byte, ohne zusätzlichen aufwand lässt sich die volle auflösung gar nicht nutzen, da keine graka eine solche cube map handhaben kann.
Da blebt nur noch die lösung eine 4096ger cubemap zu benutzen, welche nur lächerliche 384MB
verbraucht.

Jetzt gibt es schöne standbilder, aber jede bewegung endet ein einem flimmern, was jede orientierung verhindert. Der grund ist das die die stern position um weit aus mehr als ein texel verschoben hat. die grenzrotationszeit liegt bei umfang in texel (1920 * 6) dividiert die frames per sekunde. Damit darf sich das schiff genau einmal in 192 sekunden einmal um eine achse drehen (toter Wahl) Nun kann man noch den anisotropen filter dazu missbrauchen das temporale antialiasing zu bekämpfen. 16x AF drücken die zeit auf 12 Sekunden. Um ein taumeln mit einer periode von 1sekunde zu realisieren muss man ungefähr 192 bis 256 textursamples pro pixel verechnen, um das temporale antialiasing bei 60 FPS noch unter kontrole zu bringen.
Ohne auf GPGPU techniken zurückzugreifen, die eine schnelle faltung ermöglichen würde , wird absolut jeder GPU damit überfordert.
Früher zu VGA zeiten war es einfacher magere 320ger auflösung bei 60 FPS und einzeln rerenderte sterne machten es einfacher....

Die projektion des hintegrundes ist übrigens extrem einfach wenn man ein quad auf die far plane rendert und als texturkoordinaten die vektoren zu den eckpunkten als cubemapkoordinaten benuzt.

_________________
Lumina plattform unabhängige GLSL IDE


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Jul 10, 2008 19:00 
Offline
DGL Member

Registriert: Fr Dez 28, 2007 20:24
Beiträge: 62
Wohnort: Berlin
Code:
  1.  
  2.  glEnable(GL_CULL_FACE);
  3.  glCullFace(GL_FRONT);
  4. ...
  5.  TexMan.FillTexture:= 'all.jpg';
  6.  Space :=gluNewQuadric();
  7.  gluQuadricTexture(Space,true);
  8.  glusphere(Space,100,10,10);
  9.  glDisable(GL_Texture_2D);
  10.  


So geht das erstmal, das all.jpg is ne größere Textur die voll mit Sternen und Nebeln ist.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Jul 11, 2008 09:14 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Jun 20, 2003 13:59
Beiträge: 134
Das Problem welches durch das zeitliche alising entsteht sehe ich nicht als solches da man ja durch die Nebel und Sterne die sehr nah sind sehr große orientierungspunkte hat (haben kann) und dadurch das man sieht das sich ein großes Objekt in eine Richtung bewegt fällt einem das flackern welches die Sterne erzeugen nicht so stark auf ausser man hat unmengen von sternen da könnte es schon stören aber das sieht dann ja unnätürluich aus da man im all ja eh nicht so viele sieht wenn es einen nahen stern gibt.

_________________
ghost-site.de


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Jul 11, 2008 15:32 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Aug 18, 2007 18:47
Beiträge: 694
Wohnort: Köln
Programmiersprache: Java
PhoenixGL hat geschrieben:
da man im all ja eh nicht so viele sieht wenn es einen nahen stern gibt.


Uh? Wenn dann hat das aber weniger mit dem "nahen" Stern zutun als mit einer Atmosphäre oder sonstigen Wolken/Lichtbrechern/etc. wie etwa dem Kuipergürtel oder der Oortschen Wolke.


Sry OT... :)

Eigentlich sollte für den Anfang eine stinknormale Skybox reichen. Da malt man sich ein paar Punkte und Wolken drauf und gut ist. Übertreiben kann mans nachher immernoch und die Sterne dynamisch erzeugen bzw verschieben oder eine Sonne leicht glühen lassen etc pp...

_________________
Es werde Licht.
glEnable(GL_LIGHTING);
Und es ward Licht.


Zitat aus einem Java Buch: "C makes it easy to shoot yourself in the foot; C++ makes it harder, but when you do it blows your whole leg off"

on error goto next


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Jul 12, 2008 16:50 
Offline
DGL Member

Registriert: Fr Dez 28, 2007 20:24
Beiträge: 62
Wohnort: Berlin
Hab mal als Hintergrund Gitter genommen damit ich sehe wie die Textur verzerrt wird.


Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 11 Beiträge ] 
Foren-Übersicht » Programmierung » Einsteiger-Fragen


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 2 Gäste


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
cron
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.008s | 14 Queries | GZIP : On ]