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

Aktuelle Zeit: Mi Jul 09, 2025 20:53

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



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

Registriert: Sa Mär 14, 2009 17:48
Beiträge: 99
Programmiersprache: D, Java, C++
Hi,
ich habe irgendwie Probleme damit, meinen Texturenspeicher mit Daten aus dem Colorbuffer zu befüllen, so sieht mein Code aus:

Texture Klasse:
Code:
  1. class Texture {
  2.     private uint textureName;
  3.    
  4.     private int width;
  5.     private int height;
  6.    
  7.     public this(int width, int height) {
  8.         this.width = width;
  9.         this.height = height;
  10.        
  11.         ubyte texture[];
  12.         texture.length = width * height * 3;
  13.        
  14.         glGenTextures(1, &textureName);
  15.        
  16.         bind();
  17.         glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, width, height, 0, GL_RGB, GL_UNSIGNED_BYTE, texture.ptr);
  18.         glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
  19.         glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
  20.        
  21.         delete texture;
  22.     }
  23.    
  24.     public void fromColorBuffer() {
  25.         bind();
  26.         glCopyTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, 0, 0, width, height, 0);
  27.     }
  28.    
  29.     public void bind() {
  30.         glBindTexture(GL_TEXTURE_2D, textureName);
  31.     }
  32. }



Render Loop:
Code:
  1.         glClearColor(0, 0, 0, 0);
  2.         glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
  3.         glViewport(0, 0, 256, 256);
  4.        
  5.         glMatrixMode(GL_PROJECTION);
  6.         cpm.loadMatrix();
  7.        
  8.         glMatrixMode(GL_MODELVIEW);
  9.         cmm.loadMatrix();
  10.        
  11.         glEnable(GL_LINE_SMOOTH);
  12.         glEnable(GL_DEPTH_TEST);
  13.  
  14.         glLoadIdentity();
  15.        
  16.         drawScene();
  17.        
  18.         texture.fromColorBuffer();
  19.        
  20.        
  21.         glClearColor(0, 0.2, 0, 0);
  22.         glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
  23.         glViewport(0, 0, 800, 600);
  24.        
  25.         glMatrixMode(GL_MODELVIEW);
  26.         glLoadIdentity();
  27.        
  28.         glEnable(GL_TEXTURE_2D);
  29.        
  30.         texture.bind();
  31.         glBegin(GL_QUADS);
  32.             glTexCoord2f(0, 0);
  33.             glVertex3f(-5, -5, -10);
  34.            
  35.             glTexCoord2f(1, 0);
  36.             glVertex3f( 5, -5, -10);
  37.            
  38.             glTexCoord2f(1, 1);
  39.             glVertex3f( 5,  5, -10);
  40.            
  41.             glTexCoord2f(0, 1);
  42.             glVertex3f(-5,  5, -10);
  43.         glEnd();
  44.        
  45.         glDisable(GL_TEXTURE_2D);


Erwartetes Ergebnis: Meine Szene (ein rotierender Würfel) auf ein Quad geheftet auf dem Bildschirm, tatsächliches Ergebnis:
Bild

Es werden aus irgendeinem Grund scheinbar nur die Rot Werte kopiert, so sehe ich nur zwei Seiten meines Würfels, allerdings wohl nur deren Rot Anteil und den "Boden", auch nur den Rot Anteil. Woran kann das liegen???


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Mai 17, 2009 18:55 
Offline
DGL Member
Benutzeravatar

Registriert: Do Sep 02, 2004 19:42
Beiträge: 4158
Programmiersprache: FreePascal, C++
Bist du sicher, dass die Szene überhaupt richtig gezeichnet wird? Also hast dus mal ohne Render-To-Texture ausprobiert?

Ansonsten wäre außerdem noch glCopyTexSubImage2D anstatt glCopyTexImage2D angebracht. Denn letzteres erstellt die Textur immer neu, während die erste der beiden Funktionen wirklich nur den Inhalt kopiert. Allerdings sollte das eher ein Performance-Aspekt sein und nicht mit dem eigentlichen Problem zusammen hängen.

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: So Mai 17, 2009 19:10 
Offline
DGL Member

Registriert: Sa Mär 14, 2009 17:48
Beiträge: 99
Programmiersprache: D, Java, C++
Ja, ich bin sicher, dass die Szene korrekt dargestellt wird, hier auchmal ein Screenshot, habe den unteren Teil der Render Loop weggelassen:

Bild

//Edit:
Es sieht so aus, als ob er nur die Farbe übernimmt, welche zuletzt mittels glColor3f gesetzt wurde... Habs mal auf Blau geändert, jetzt sind zwei Seiten meines Würfels und der Boden blau...


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

Registriert: Fr Jan 04, 2008 21:29
Beiträge: 419
Wohnort: Lübeck
hast du nach dem erstellen der textur glcolor3f wieder auf reines weiß gestellt, wenn nicht, dann liegt wohl da das Problem, da deine endgültige Szene mit dem Farbwert der zuletzt an glColor3f(); übergeben würde multipliziert wird, wenn das blau ist, dann wird alles maximal blau, bei rot wird alles rot.

_________________
Klar Soweit?


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

Registriert: Sa Mär 14, 2009 17:48
Beiträge: 99
Programmiersprache: D, Java, C++
Sellmann hat geschrieben:
hast du nach dem erstellen der textur glcolor3f wieder auf reines weiß gestellt, wenn nicht, dann liegt wohl da das Problem, da deine endgültige Szene mit dem Farbwert der zuletzt an glColor3f(); übergeben würde multipliziert wird, wenn das blau ist, dann wird alles maximal blau, bei rot wird alles rot.


Exakt das war es, danke dir!!


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.014s | 17 Queries | GZIP : On ]