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

Aktuelle Zeit: Fr Jul 18, 2025 16:44

Foren-Übersicht » Programmierung » OpenGL
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 25 Beiträge ]  Gehe zu Seite Vorherige  1, 2
Autor Nachricht
 Betreff des Beitrags:
BeitragVerfasst: Mi Mär 01, 2006 16:35 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Vom Prinzip her hast du da recht. Wobei die RGB Kanäle bei 32 Bits genau die selbe Auflösung habe wie sie es bei 24 Bit haben. Nämlich 8 Bit. Nur bei 32 Bit hat man praktischerweise noch 8 Bit über. Die man recht einfach als Alpha benutzen kann. Bei 16 Bit hat man nicht so viel Platz und da man zu Anfangs eigentlich keinen Alpha im Framebuffer brauchte hat man das einfach aufgeteilt und den Alpha raus gelassen. Man hatte so auch mehr Qualität und da der Alpha eh nicht groß genutzt wurde wars kein großer Verlust. Bei Texturen wird so ziemlich jedes Format unterstützt, da es ja eigentlich auch vorgeschrieben ist. Aber bei den Pixelformaten muss sich der Treiber nun mal danach richten was im Windows eingestellt ist und was es für gebräuchliche Formate gibt.

Es ist nun mal nicht vorgeschrieben was für Pixelformate unterstützt werden müssen und außer die wirklich gebräuchlichen werden leider kaum welche unterstützt. Wobei man da mal auf die Kombinationen achten muss. Sampling, Accu, Depth, Stencil, DoubleBuffering und das in alles erdenklichen Kombinationen. Wenn man dann noch viele unterschiedliche Formate einbauen würde hätte man mal eben mehrere tausend Formate. Es sind ja jetzt schon etwas an die paar Hundert. Schätzungsweise.

Mir gehts hauptsächlich darum, dass man eher ein bisschen mehr implementiert als irgendwelche Restriktionen aufstellt. Vor allem wenn es um etwas vergleichweise sehr gebräuchliches geht. Wenn man SM3.0 verlangt mag das eine Sache sein aber wenn man eine GF4 TI wegen dynamischer Lichter aussperrt ist das etwas anderes. Okay. Die GF4 geht ja mittlerweile nur sollte es niemand wagen das Programm mit weniger als 32 Bit Farbtiefe zu starten. Das ganze im Vorfeld zu ersticken ersparrt vor allem Extrawurst eine Menge fragen die im nachhinein auftauchen werden. Könnte wetten, dass mit sicherheit der ein oder andere unbetuchtere Nutzer da erst mal doof aus der Wäsche schauen wird.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Mär 04, 2006 17:52 
Offline
DGL Member
Benutzeravatar

Registriert: Do Mär 06, 2003 15:27
Beiträge: 281
Wohnort: Bochum
hmm wie sonst kann ich pixelgenaues dynamisch licht in 2D auf einer Karte wie der GF4 TI realisieren ? bei höherer hardware ist es natürlich kein problem aber es geht ja eben um jene gattung... nur ein denkanstoss bitte !

_________________
www.extrawurst.org


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Mär 05, 2006 11:56 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Auch bei höheren Karten kannst du es problemlos erreichen, dass sie über keinen Alphakanal im Framebuffer verfügen.

Also ich bin kein Crack was Lichter angeht. Aber eine Idee wäre zum Beispiel auch, dass du zu erst ne schwarze Fläche rendest die Lichter normal addierst GL_ONE GL_ONE und dann die Texture drüber machst. Also ich denke mal, dass es da durchaus mehrere Möglichkeiten gibt. So richtig kann ich dir da aber nicht sagen was du machen musst, da ich so was bisher auch noch nicht groß gemacht habe. Nenn mich Naiv aber ich kann mir nicht vorstellen, dass es dazu nur eine Möglichkeit gibt. ;-)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Mär 05, 2006 19:56 
Offline
DGL Member
Benutzeravatar

Registriert: Do Mär 06, 2003 15:27
Beiträge: 281
Wohnort: Bochum
da brächte man dann GL_DST_COLOR ... muss ma drüber nachdenken...

_________________
www.extrawurst.org


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Mär 06, 2006 08:54 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Wie wird das eigentlich in aktuellen Spielen gemacht? Oder vergiss das aktuell. Bei Unreal Tournament wird das ja auch schon so gemacht. Also in dunkeln Ecken sieht man das ganz gut. Durch das Lightmap wird die Textur sehr dunkel gemacht und irgendwelche Lichtquellen sorgen dann wieder dafür, dass es heller wird. Und alles ohne Shader oder sonst etwas. Musste mal rumschauen. Wäre dann aber mal interessant zu erfahren wie du das dann gelöst hast. :-)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Mär 06, 2006 17:46 
Offline
Forenkatze
Benutzeravatar

Registriert: Mi Okt 22, 2003 18:30
Beiträge: 1945
Wohnort: Närnberch
Programmiersprache: Scala, Java, C*
Durch projezierte Texturen vielleicht?

_________________
"Für kein Tier wird so viel gearbeitet wie für die Katz'."


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Mär 08, 2006 00:29 
Offline
DGL Member
Benutzeravatar

Registriert: Di Mai 18, 2004 16:45
Beiträge: 2623
Wohnort: Berlin
Programmiersprache: Go, C/C++
UT2k4 ist so highpoly, dass selbst vertexbased lightning gut aussieht.
Texturebased Lightning ist ja bei kleinen levels ja sehr praktisch aber des so komplexer es wird des so schneller explodiert der platz und die fps. Ich denke die für heutigen mittlere grafiken sollte man schon auf shader umsteigen.
Alles schwarz und ein texelbased shader der lichter durch aufhellen darstellt.

Mitlerweile werden auch viele "neue" Techniken genutzt die auf radiocity oder unser verhalten der augen auf Hell und dunkel basieren.Da man dann diese berechnungen dann über ein shader machen kann, wird es effizienter.

_________________
"Wer die Freiheit aufgibt um Sicherheit zu gewinnen, der wird am Ende beides verlieren"
Benjamin Franklin

Projekte: https://github.com/tak2004


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Mär 08, 2006 12:19 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Ja schon. Für komplexere Aufgaben magst du da durchaus recht haben. Nur wundert es mich, dass zum Beispiel UT1 welches keine hohe Polyanzahl und keine Shader benutzt so etwas spielend hinbekommt. Also muss es ja doch auch gehen. Wenn auch nicht nicht ganz so optimal und sauber wie dies mit Shadern möglich wäre. Speziell wenn man das Licht komplett im Shader berechnen würde so könnte man sich auch die 3 Lichttexturen sparen. Ich habe mal ein bisschen rumgespielt. Und folgendes hinbekommen.

Das ganze benutzt 4 TUs und läuft ab Kern OpenGL 1.3. Da es aber Multitexturing auch als Extension gibt und der Rest OpenGL 1.1 ist sollte es auch Problemlos auf einer TNT 2 laufen können. Sofern diese in der Lage wäre 4 Texturen darzustelllen. ;-)

Code:
  1.   glColor3f(0.1, 0.1, 0.1);
  2.  
  3.   glActiveTexture(GL_TEXTURE0);
  4.   FLightMap.Bind;
  5.   TempColor[0] := 0.5;
  6.   TempColor[1] := 0.5;
  7.   TempColor[2] := 1;
  8.   TempColor[3] := 0;
  9.   glTexEnvfv(GL_TEXTURE_ENV, GL_TEXTURE_ENV_COLOR, @TempColor);
  10.   glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_BLEND);
  11.  
  12.   glActiveTexture(GL_TEXTURE1);
  13.   FLight.Bind;
  14.   TempColor[0] := 0.5;
  15.   TempColor[1] := 1;
  16.   TempColor[2] := 0.5;
  17.   TempColor[3] := 0;
  18.   glTexEnvfv(GL_TEXTURE_ENV, GL_TEXTURE_ENV_COLOR, @TempColor);
  19.   glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_BLEND);
  20.  
  21.   glActiveTexture(GL_TEXTURE2);
  22.   FLight2.Bind;
  23.   TempColor[0] := 1;
  24.   TempColor[1] := 1;
  25.   TempColor[2] := 1;
  26.   TempColor[3] := 0;
  27.   glTexEnvfv(GL_TEXTURE_ENV, GL_TEXTURE_ENV_COLOR, @TempColor);
  28.   glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_BLEND);
  29.  
  30.   glActiveTexture(GL_TEXTURE3);
  31.   FLena.Bind;
  32.   glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
  33.  
  34.   glBegin(GL_QUADS);
  35.     glMultiTexCoord2f(GL_TEXTURE0, 0, 0);
  36.     glMultiTexCoord2f(GL_TEXTURE1, 0, 0);
  37.     glMultiTexCoord2f(GL_TEXTURE2, 0, -1);
  38.     glMultiTexCoord2f(GL_TEXTURE3, 0, 0);
  39.     glVertex3f(-1,  1, 0);
  40.  
  41.     glMultiTexCoord2f(GL_TEXTURE0, 0, 1);
  42.     glMultiTexCoord2f(GL_TEXTURE1, 0, 1);
  43.     glMultiTexCoord2f(GL_TEXTURE2, 0, 1);
  44.     glMultiTexCoord2f(GL_TEXTURE3, 0, 1);
  45.     glVertex3f(-1, -1, 0);
  46.  
  47.     glMultiTexCoord2f(GL_TEXTURE0, 1, 1);
  48.     glMultiTexCoord2f(GL_TEXTURE1, 1, 1);
  49.     glMultiTexCoord2f(GL_TEXTURE2, 2, 1);
  50.     glMultiTexCoord2f(GL_TEXTURE3, 1, 1);
  51.     glVertex3f( 1, -1, 0);
  52.  
  53.     glMultiTexCoord2f(GL_TEXTURE0, 1, 0);
  54.     glMultiTexCoord2f(GL_TEXTURE1, 1, 0);
  55.     glMultiTexCoord2f(GL_TEXTURE2, 2, -1);
  56.     glMultiTexCoord2f(GL_TEXTURE3, 1, 0);
  57.     glVertex3f( 1,  1, 0);
  58.   glEnd;


Durch Anpassung der Texturkoordinaten können die Lichter verschoben werden. Allerdings müssen die Koordinaten für jede Fläche seperat berechnet werden. Was nicht unbedingt ein geringer Aufwand ist. Evtl kann man für diesen Fall auch 3D Texturen benutzen. Das würde die Berechnung wohl vereinfachen.

Muss allerdings gestehen, dass das Ergebniss nicht ganz richtig dargestellt wird. GL_BLEND ersetzt leider die Farben. Sollte man einen Scheinwerfer mit höchster Intensität haben so würde dessen Farbe die Farbe der anderen überdecken. Soll bedeuten, dass rotes Licht + blaues Licht nicht Violett wäre sondern Blau. Sollte das Spotlicht nicht ganz so hell sein so würde das darunter noch hindurchscheinen. Allerdings addieren sich die Farben so auch nicht.

Ich hatte es auch mal mit GL_ADD ausprobiert aber dabei wurden die gesetzten Farben ignoriert und das Bild wurde überbelichtet. Also bei zu vielen Lichtern auf einer Stelle wurden die Farben der Textur ein wenig zu hell. Was mit dem TEXTURE_ENV_COMBINE allerdings noch alles möglich ist kann ich so jetzt nicht sagen. Der kann ja selbst simples Bumpmapping machen.


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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Mär 08, 2006 14:47 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Deine Freundin? ;)

_________________
Blog: kevin-fleischer.de und fbaingermany.com


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Mär 08, 2006 14:56 
Offline
Forenkatze
Benutzeravatar

Registriert: Mi Okt 22, 2003 18:30
Beiträge: 1945
Wohnort: Närnberch
Programmiersprache: Scala, Java, C*
Lena ;)

Aber ok. Lossy, ich meinte mit den Projezierten Texturen die dynamischen Lichter in UT. Wenn man mit einer Knarre deiner Wahl, z.B. die Pulse Rifle, herumschießt, wird man feststellen, dass die Geschosse, die da rauskommen, die Umgebung beleuchten. Ich vermute, das da einfach 8 Texturen würfelmäßig von so einem Geschoss aus auf die Umgebung projeziert werden. Klingt einfach, dürfte aber etwas Hirnschmalz beim Implementieren erfordern, da hm... wie beschreib ich das jetzt? Am besten gar net ;) Einfach selber ausprobieren ^^

_________________
"Für kein Tier wird so viel gearbeitet wie für die Katz'."


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 25 Beiträge ]  Gehe zu Seite Vorherige  1, 2
Foren-Übersicht » Programmierung » OpenGL


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 8 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:  
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.009s | 15 Queries | GZIP : On ]