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

Aktuelle Zeit: Sa Jul 12, 2025 03:15

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



Ein neues Thema erstellen Auf das Thema antworten  [ 5 Beiträge ] 
Autor Nachricht
BeitragVerfasst: Mi Mai 20, 2009 17:07 
Offline
DGL Member

Registriert: Mi Mai 06, 2009 15:57
Beiträge: 13
Krug zum Gruße.

Ich habe gerade ein wenig damit angefangen mit mit RenderPass zu beschäftigen.
Ich rendere also eine Szene, will dann die Daten aus dem framebuffer in ein array schreiben und nutze dafür glReadPixels(...).

Allerdings ist mir noch nicht ganz aufgegangen, warum ich für jeden Pixel einen Alpha-Wert von 1 erhalte.

Code:
  1.  
  2. C++ - Code:
  3.  
  4.  
  5. float tex[256*256*4];
  6.  
  7. void renderToArray(void) {
  8.     glViewport(0,0,256,256);
  9.     glClearColor(0,0,0,0);
  10.     glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );
  11.     glLoadIdentity();
  12.    
  13.     glEnable(GL_LIGHTING);
  14.     glColor4f(1,1,1,1);
  15.     glTranslatef(0,0,-10);
  16.     glRotatef(rotX,1,1,0);
  17.     glutSolidTorus(1.5,3.5,50,50);
  18.         glReadBuffer(GL_BACK);
  19.     glReadPixels(0,0,256,256,GL_RGBA,GL_FLOAT,tex);
  20.     glDisable(GL_LIGHTING);
  21. }
  22.  


die ClearColor ist ja mit einem Alpha-Wert von 0 angegeben, sollte also dann nach meinem Verständniss auch mit 0,0,0,0 für jeden Pixel in das array geschrieben werden.
Wenn ich mir die Array-Daten allerdings ausgeben lasse ist es eine Folge von 0,0,0,1 ....

Hat jemand eine Idee warum das so ist? Ich hätte gern die Alpha-Daten korrekt abgespeichert um später beim Nutzen der Array-Daten für eine Textur ein Alpha-Blending einzusetzen.[/code]

Nachtrag:
Hm, eigenartig.
Code:
  1.  
  2. int alphabits;
  3. glGetIntegerv(GL_ALPHA_BITS,&alphabits);

gibt bei mir einen Wert von 0 aus - sprich es stünden garkeine Alpha-Werte zur Verfügung. Das is mir ein wenig unklar - werden doch diese immerhin mit 1 (float) in meinen Array geschrieben.

Ausserdem habe ich den Display-Mode folgendermassen gesetzt:

Code:
  1. glutInitDisplayMode (GLUT_DOUBLE | GLUT_RGBA | GLUT_DEPTH | GLUT_ALPHA);


Zuletzt geändert von inter2k3 am Mi Mai 20, 2009 17:39, insgesamt 1-mal geändert.

Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Mai 20, 2009 17:30 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
Hast du bei der Angabe deines Pixelformates auch explizit einen Alphakanal angefordert? Ansonsten bekommst du immer nur 1 für Alpha beim Auslesen.

_________________
www.SaschaWillems.de | GitHub | Twitter | GPU Datenbanken (Vulkan, GL, GLES)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Mai 20, 2009 17:45 
Offline
DGL Member

Registriert: Mi Mai 06, 2009 15:57
Beiträge: 13
Öhm, ich denke dass ich das durch hinzufügen von GLUT_ALPHA beim displaymode erreicht hätte.
Aber ich erhalte nach wie vor immer den Wert 1.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Mai 20, 2009 17:47 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
Erstelle deinen Kontext mal von Hand und setzte im Pixelformatdescriptor den Wert cAlphaBits explizit auf 8, auf die glut-Funktionen würde ich heutzutage nämlich ganz verzichten.

_________________
www.SaschaWillems.de | GitHub | Twitter | GPU Datenbanken (Vulkan, GL, GLES)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Mai 21, 2009 01:46 
Offline
DGL Member

Registriert: Mi Mai 06, 2009 15:57
Beiträge: 13
Sascha Willems hat geschrieben:
.... auf die glut-Funktionen würde ich heutzutage nämlich ganz verzichten.


Gibt es spezelle Gründe, warum ich auf sie verzichten sollte? Es erleichtert und beschleunigt bei einigen Sachen die Arbeit enorm.
Bin aber natürlich für Hinweise dankbar.

Problem übrigens erkannt, allerdings nicht verstanden.

Ich habe freeglut verwendet und da funktioniert eigenartigerweise der Aufruf der glutInitDisplayMode mit GL_ALPHA nicht wie gewünscht.
Nehme ich nur glut - funktioniert es einwandfrei.

LÖSUNG:
Mit Freeglut 2.6.0 Release Candidate 1 funktioniert es glücklicherweise. Bei der stable release ver 2.4.0 war es wohl noch nicht implementiert.


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 5 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:  
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.007s | 16 Queries | GZIP : On ]