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

Aktuelle Zeit: Fr Jul 18, 2025 16:52

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



Ein neues Thema erstellen Auf das Thema antworten  [ 25 Beiträge ]  Gehe zu Seite 1, 2  Nächste
Autor Nachricht
 Betreff des Beitrags: Alpha (Ver)Blendet
BeitragVerfasst: Mo Feb 27, 2006 02:07 
Offline
DGL Member
Benutzeravatar

Registriert: Do Mär 06, 2003 15:27
Beiträge: 281
Wohnort: Bochum
hey jungs ich reiß mir hier alle haare aus, n kumpel von mir hat ne GF 4 TI und das blending bei ihm functioniert einfach nich korrekt. ich befüll den alphakanal seperat mit werten und will anschließend per glBlendFunc(GL_DST_ALPHA,GL_ONE); mit dem alphawert der bereits gesetzt ist modulieren, doch sobald ich GL_DST_ALPHA einstelle klappt alles nich mehr... bei mir funktioniert es einwand frei... woran kann das liegen ?

PS: würd ja denken ich hätte grundsätzlich n prog-fehler gemacht aber dann würd es ja nich bei mir funktionieren... oder ?!

edit: so hier mal für alle zum selber testen der src und zwei vergleichs-screenshots.

das test_prog


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

_________________
www.extrawurst.org


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Feb 28, 2006 17:51 
Offline
DGL Member

Registriert: So Sep 26, 2004 05:57
Beiträge: 190
Wohnort: Linz
Generell ist die Verwendung von DST_ALPHA mit Vorsicht zu geniesen. Dafür brauchst du im Framebuffer Alphawerte. Vor allem bei älteren Modellen wird dadurch auch des öfteren in Softwaremodus umgeschalten.

Hast du im Pixel Format explizit angegeben dass du Alphawerte haben willst? Denn meist setzt man diesen Wert ja auf 0.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Feb 28, 2006 22:35 
Offline
DGL Member
Benutzeravatar

Registriert: Do Mär 06, 2003 15:27
Beiträge: 281
Wohnort: Bochum
den PIXELFORMATDESCRIPTOR forder ich an, ist doch korrekt so, oder ?
Code:
  1.  
  2. PIXELFORMATDESCRIPTOR :
  3.     {
  4.         sizeof(PIXELFORMATDESCRIPTOR),  // Size Of This Pixel Format Descriptor
  5.         1,                              // Version Number
  6.         PFD_DRAW_TO_WINDOW |            // Format Must Support Window
  7.         PFD_SUPPORT_OPENGL |            // Format Must Support OpenGL
  8.         PFD_DOUBLEBUFFER,               // Must Support Double Buffering
  9.         PFD_TYPE_RGBA,                  // Request An RGBA Format                         !!!!
  10.         32,                         // Select Our Color Depth
  11.         0, 0, 0, 0, 0, 0,               // Color Bits Ignored
  12.         8,                              // 8bit Alpha Buffer                                !!!!!
  13.         0,                              // Shift Bit Ignored
  14.         0,                              // No Accumulation Buffer
  15.         0, 0, 0, 0,                     // Accumulation Bits Ignored
  16.         0,                              // NoZ-buffer
  17.         0,                              // No Stencil Buffer
  18.         0,                              // No Auxiliary Buffer
  19.         PFD_MAIN_PLANE,                 // Main Drawing Layer
  20.         0,                              // Reserved
  21.         0, 0, 0                         // Layer Masks Ignored
  22.     };
  23.  

davon ab du hast geschrieben "bei älteren Modellen", aber das Problem kam bei einer GF 4TI das kann doch nicht sein, oder ?!

_________________
www.extrawurst.org


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

Registriert: Di Mai 18, 2004 16:45
Beiträge: 2623
Wohnort: Berlin
Programmiersprache: Go, C/C++
Ich würde generell mal auf veraltete Treiber tippen oder überschriebene Werte für OpenGL Settings von seiten des Treibers. Wenn die Treiber gleich sind und auch die Settings würde ich mal sagen "Its not a bug, its a feature.".

_________________
"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 01, 2006 08:26 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Wobei das Pixelformat mit Vorsicht zu genießen ist. Wenn die Karte etwas nicht unterstützt, dann kann sie es dir auch nicht liefern. Um Sicher zugehen ob das gewählte Pixelformat deinen Wünschen entsprichst musst das PixelFormat mit DescribePixelFormat einmal komplett auslesen und siehst dann genau was untestützt wird oder nicht unterstützt wird.

PS: Hat es einen Grund warum dein ZBuffer auf 0 steht? Gleiches Problem. Auf moderneren Karten ist der in der Regel 24 Bit groß. Aber auf alten Karten mit begrenztem Speichervorrat kann der evtl tatsächlich weggelassen werden. Außer das ist natürlich volle absicht gewesen dann kannste den Abschnitt vergessen. ;-)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Mär 01, 2006 09:23 
Offline
DGL Member
Benutzeravatar

Registriert: Do Mär 06, 2003 15:27
Beiträge: 281
Wohnort: Bochum
z-buffer hab ich mit absicht auf 0, ja... das liegt daran das ich ihn bisher nich gebraucht habe in dem projekt!
das mit describe* werd ich jetzt mal integrieren, ich muss ja irgend ein fehler anzeigen können wenn keine alpha-buffer-bits unterstützt werden, weil ohne die gehts nicht...

edit: wie läuft ds denn mit describePixelFormat, versuch ich mir erst mit ChoosePixelFormat das gewünschte format zu holen und guck hinterher mit describePixelFormat was ich bekommen habe oder wie ?

_________________
www.extrawurst.org


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Mär 01, 2006 10:33 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Genau. Du suchst dir mit ChoosePixelformat ein Format aus und Fragst anschließend mit DescribePixelFormat den DC nach einer detailierten Beschreibung des Selbigen. Dabei ist es nicht nötig das Format erst zu setzen. Das nur mal so am Rande.

Allerdings muss ich gestehen, dass ich mir nicht vorstellen kann, dass eine GF4 TI da solche Probleme bei hat. Was mir da gerade zu einfällt. Kann es sein, dass dein Kumpel 24 oder 32 Bit Farbtiefe eingestellt hat und dein Programm im Fenster läuft? Wenn ja dann kann es durchaus sein. Dann richtest du dich nämlich an die Weisungen von Windows und dann hast du mitunter nur einen 16 Bit Framebuffer und ein Alphakanal ist nicht zwingend vorhanden. Oder er wird per Software emuliert was langsam ist.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Mär 01, 2006 11:47 
Offline
DGL Member
Benutzeravatar

Registriert: Do Mär 06, 2003 15:27
Beiträge: 281
Wohnort: Bochum
ok alles klar werd das mit describe mal ausprobieren.
bei meinem kumpel war es genau wie du gesagt hast, er hatte 32bit im fenstermodus an und dabei wurde da ich alphabits auf 0 hatte kein alphabuffer bereitgestellt, wenn ich im pixelformatdesc.. 8bit alpha anforder kalppt es bei ihm auch. allerdings "nur" in 70 fps... weiß jetzt nich ob das bedeutet das es in software läuft oder das es daran liegt das die GF4Ti und sein gesamtes system einfach zu lahm is...
was meinst du lossy ?

_________________
www.extrawurst.org


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

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Also ne GF4 TI sollte mit Sicherheit mehr bringen. In Software allerdings nicht ansatzweise so viel. Hat er vielleicht V-Sync an? Ich meine bei NVidia wäre VSync Standardmäßig an.

Was mich allerdings ein bisschen wundert ist die Tatsache, dass die bei 32 Bit keinen Alphakanal mit anlegt. Der ist ja praktisch schon vorhanden. Aber es kann natürlich sein, dass sich NVidia genauer an das gewünschte Pixelformat orientiert.

Habe gerade mal getestet sobald ich im Windows 16 Bit einstelle und einen Alphakanal anfordere werde ich gnadenlos in den Softwaremodus verfrachtet. Evtl solltest du dich auch mal nach einer anderen Methode umschauen. Also wie du deine Lichter rendern kannst. Also eine Ohne den Alphakanal im Framebuffer zu verwenden.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Mär 01, 2006 13:53 
Offline
DGL Member
Benutzeravatar

Registriert: Do Mär 06, 2003 15:27
Beiträge: 281
Wohnort: Bochum
naja ich denke die methode reicht für mich super aus, son lang das game ab gf 4 TI aufwärts läuft find ich das in ordnung...
nur eine frage, wie finde ich heraus ob ich in den software modus verfrachtet wurde ? auch über describePixelformat... ?

_________________
www.extrawurst.org


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Mär 01, 2006 14:26 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Auch. Du kannst in OpenGL den Vendor abfragen. Da sollte dann in der Regel Microsoft drinne stehen oder du wertest das dwFlags von dem PixelFormatDescriptor aus. Da sollte dann das Flag PFD_GENERIC_FORMAT und das Flag PFD_GENERIC_ACCELERATED nicht enhalten sein.

Wie machen so etwas denn moderne Spiele? Kann mir nicht vorstellen, dass das so außergewöhnlich ist und an 32 Bit Farbtiefe binden halte ich auch nicht für sonderlich gut. Im Vollbildmodus wenn man den Modus selber wechselt mag es ja noch gehen aber im Fenster ist das doch ein wenig unglücklich gelöst. Vielleicht genügt es ja auch einfach ne andere Blendfunc zu benutzen.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Mär 01, 2006 14:34 
Offline
DGL Member
Benutzeravatar

Registriert: Do Mär 06, 2003 15:27
Beiträge: 281
Wohnort: Bochum
1) ich kann mir nich vorstellen das heute noch irgendwo 24bit unter windows eingestellt is und wenn dann wohl nich bei denjenigen die zocken...
2) wird mein game hauptsächlich in fullscreen laufen, windowed nur zu debug zwecken.
3) ginge es nich auch alpha bits bei einer farbtiefe von 24bit zu reservieren ?

edit: wüsste nich wie ich mit einer anderen blendfunc die alpha-werte im framebuffer berücksichtigen kann beim rendern...

_________________
www.extrawurst.org


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Mär 01, 2006 14:54 
Offline
DGL Member
Benutzeravatar

Registriert: Di Mai 18, 2004 16:45
Beiträge: 2623
Wohnort: Berlin
Programmiersprache: Go, C/C++
Quake3 läuft meines wissens standardmässig auf 24Bit Farbtiefe und kann zusätzlich noch auf 16 und 32 umgestellt werden.
Einige puffer kann man sogar per console auf 64Bit hochstellen. Deswegen denke ich wird es alternativen geben.

_________________
"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 01, 2006 14:57 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Alphabits in 24 Bit. Ich glaube nicht, dass das sinn machen würde. Da müsste man von jedem Kanal 2 Bytes abschneiden um einen Alphakanal mit 6 Bits zu bekommen. Es gibt auch Texturformate die haben nur einen 1Bittigen Alphakanal aber als Framebuffer ist das alles andere als üblich. ATI Bietet aber auch gar keinen 24 Bit Modus mehr an. Im Windows kann man nur noch 16 oder 32 Bit auswählen.

Klar unter Hardcoregamern ist es unwahrscheinlich, dass jemand unter 32 Bit arbeitet. Wobei eigentlich alle Spiele auch 16 Bit Farbtiefe anbieten. Da spart man schließlich schon mal die Hälfte an Speicher und Bandreite. Wenn kein Alphakanal dabei ist dann hat man immernoch halbwegs gute Qualität.

Blendfunc: Okay. Eine andere Blendfunc alleine würde wohl nicht so viel bringen. Ich dachte eher daran ein bisschen was am Rendern umzustellen und eine andere Blendfunc zu benutzen. Es wäre ja auch Möglich auf deine Wand eine normale Schadowmap zu legen (selbst wenn diese nur schwarz wäre) und dann die Lichter ganz normal als dynamische Lichte zu behandeln und die Wand aufzuhellen. Das ist ne Technick die selbst in UT so eingebaut ist.

Vom Prinzip und ergebniss her ist doch genau das was du jetzt mittels Framebufferalphakanal erreicht hast, oder?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Mär 01, 2006 15:48 
Offline
DGL Member
Benutzeravatar

Registriert: Di Mai 18, 2004 16:45
Beiträge: 2623
Wohnort: Berlin
Programmiersprache: Go, C/C++
Ich glaub ich verstehe da was nicht ganz richtig. Die Farbtiefe selber enthält garkein alpha sondern nur 32Bit an RGB Farben.
Egal was OpenGL mit den Formaten macht am ende kommt eine RGB maske raus von daher ist es doch völlig egal welche farbtiefe gegeben ist, da diese nur einfluss auf die feinheit der abstufungen der Farben hat. Der Alphakanal ist doch eher ein internes OpenGL problem.

_________________
"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  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 25 Beiträge ]  Gehe zu Seite 1, 2  Nächste
Foren-Übersicht » Programmierung » OpenGL


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 6 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.009s | 14 Queries | GZIP : On ]