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

Aktuelle Zeit: Sa Jul 19, 2025 16:25

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



Ein neues Thema erstellen Auf das Thema antworten  [ 3 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: [gelöst] Tutorial 7 (Blending)
BeitragVerfasst: Sa Dez 01, 2007 11:08 
Offline
DGL Member

Registriert: Mi Nov 28, 2007 17:37
Beiträge: 17
Wohnort: Berlin
Guten Tag allerseits.
Ich bin neu hier und hab mich bis jetzt immer alleine zu helfen gewusst wenn
Probleme aufgetreten sind, aber nun ist Schluss, ich finde den Fehler einfach nicht
und bin auf eure Hilfe angewiesen. Ich würde euch auch mal das ganze Programm
schicken falls ihr wollt oder mir nicht so weiter helfen könnt, aber ich denke mal
(oder hoffe) das ich mein Problem hier ausführlich erkläre.

Also komme ich dann auch mal direkt zu meinem Problem. Ich habe mich nun durchgearbeitet
bis Tutorial 7 und komme dort einfach nicht weiter, weil ich nicht weis ob das Blending überhaupt
ordnungsgemäß funktioniert. Ich stecke genau bei der Teilüberschrift Gleichheit für Alles!
fest. Man soll dort erst ein Viereck rendern mit einer Felstextur (Source) und danach noch ein
Viereck mit einer Grastextur (Destination). Beide Texturen sollen schön ineinander laufen
so das sie aussehen wie eine einzige. Doch das einzige was bei mir passiert ist das durch
glColor4f(1,1,1,0.5); beide Texturen dunkler werden und sie werden dabei auch nicht
transparent. Sie sind einfach nur dunkler als ob jemand einfach das Licht herunter dreht.

Bei der Textur - Prozedur sei noch gesagt das ich SDL zum laden meiner Texturen benutze
und bei anderem Varianten sehe ich nicht durch. Deswegen hilft mir auch nicht die Beispieldatei
zu Tutorial 7 weiter, da dort nicht SDL benutzt wird zum laden und ich den Teil dadurch nicht
verstehe. An irgendwelchen Problemen mit der Grafikkarte oder anderen computerspezifischen
Problemen kann es nicht liegen da ich mir ja die Beispieldatei herunter geladen habe und diese
trotzdem einwandfrei funktioniert.
Ich vermute auch noch nicht einmal das es großartige Fehler in der Render - Prozedur gibt .
Meiner Meinung nach liegt der Fehler irgendwo in der Textur - Prozedur beim laden.
Ich hab ja auch schon überlegt bei dieser anstatt GL_RGB einfach
GL_RGBA zu setzen damit er den Alphakanal mit lädt, aber dabei kompiliert
Delphi erst gar nicht meine Anwendung und es erscheint eine Fehlermeldung.

Bitte Helft mir bei meinem Problem, ich komme dadurch kein Stück mehr voran. :(


Zum Quelltext sei noch gesagt das ich das 2. Viereck größer gemacht habe damit
ich erkenne ob dahinter auch wirklich die Grastextur vorhanden ist.
Code:
  1.  
  2. var
  3.   tex : PSDL_Surface;
  4.   TexID : array[1..2] of gluInt;
  5.  
  6.  
  7.  
  8.  
  9.  
  10.  
  11. procedure TForm1.Textur;
  12. begin
  13.     glGenTextures(2, @TexID[1]);
  14.     glBindTexture(GL_TEXTURE_2D,TexID[1]);
  15.     tex := IMG_Load(PChar('./Textur/Fels.jpg'));
  16.     glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
  17.     glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
  18.     glTexImage2D(GL_TEXTURE_2D, 0, 3, tex^.w, tex^.h,0, GL_RGB, GL_UNSIGNED_BYTE, tex^.pixels);
  19.     SDL_FreeSurface(tex);
  20.  
  21.  
  22.     glGenTextures(2, @TexID[2]);
  23.     glBindTexture(GL_TEXTURE_2D,TexID[2]);
  24.     tex := IMG_Load(PChar('./Textur/Gras.jpg'));
  25.     glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
  26.     glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
  27.     glTexImage2D(GL_TEXTURE_2D, 0, 3, tex^.w, tex^.h,0, GL_RGB, GL_UNSIGNED_BYTE, tex^.pixels);
  28.     SDL_FreeSurface(tex);
  29. end;
  30.  
  31.  
  32.  
  33.  
  34.  
  35.  
  36. procedure TForm1.Render;
  37. begin
  38.    glClearColor(0,0,0,0);
  39.    glClear (GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);
  40.     glMatrixMode (GL_PROJECTION);
  41.     glLoadIdentity;
  42.     gluPerspective(45.0, ClientWidth/ClientHeight, NearClipping, FarClipping);
  43.     glMatrixMode (GL_MODELVIEW);
  44.     glLoadIdentity;
  45.  
  46.  
  47. glScalef(2,2,2);
  48.  
  49.  
  50. glEnable(GL_BLEND);
  51. glBlendFunc(GL_SRC_ALPHA,GL_ONE);
  52. glColor4f(1,1,1,0.5);
  53.  
  54. glBindTexture(GL_TEXTURE_2D,TexID[1]);
  55. glBegin(GL_QUADS);
  56.     glTexCoord2f(1,0); glVertex3f(0,1,0);
  57.     glTexCoord2f(0,0); glVertex3f(0,0,0);
  58.     glTexcoord2f(0,1); glVertex3f(1,0,0);
  59.     glTexCoord2f(1,1); glVertex3f(1,1,0);
  60. glEnd;
  61.  
  62.  
  63. glBindTexture(GL_TEXTURE_2D,TexID[2]);
  64. glBegin(GL_QUADS);
  65.     glTexCoord2f(1,0); glVertex3f(-0.2 ,1.2 ,0);
  66.     glTexCoord2f(0,0); glVertex3f(-0.2 ,-0.2,0);
  67.     glTexcoord2f(0,1); glVertex3f(1.2  ,-0.2,0);
  68.     glTexCoord2f(1,1); glVertex3f(1.2  ,1.2 ,0);
  69. glEnd;
  70.  
  71.  
  72.     SwapBuffers(DC);
  73. end;
  74.  

_________________
Es ist ein großer Vorteil im Leben, die Fehler, aus denen man
lernen kann, möglichst früh zu begehen.


Zuletzt geändert von Mastiguas am So Dez 02, 2007 11:56, insgesamt 1-mal geändert.

Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Dez 01, 2007 11:47 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 02, 2002 15:41
Beiträge: 867
Wohnort: nahe Stuttgart
Ich tippe mal... das, was mir jetzt am wahrscheinlichsten erscheint:
Versuchs mal mit
Code:
  1. glDisable(GL_DEPTH_TEST);

oder mit
Code:
  1. glDepthFunc(GL_LEQUAL);

Letzteres steht so im downloadbaren Sample.

Wenn es dann klappt: Was ist passiert?
Du hast wahrscheinlich irgendwo den Tiefentest mit glEnable(GL_DEPTH_TEST) aktiviert. Das kannst du auch einfach entfernen, das hat den gleichen Effekt. Wenn man aber den Tiefentest nur aktiviert, steht er am Anfang auf glDepthFunc(GL_LESS), das bedeutet, OpenGL zeichnet nur Sachen, die näher am Betrachter sind als bereits Gezeichnetes (LESS than). GL_LEQUAL bedeutet, dass OGL zusätzlich Sachen zeichnet, die exakt so weit vom Betrachter entfernt sind wie bereits Gezeichnetes (LESS OR EQUAL than).
Und somit hat der Tiefentest immer das nähere oder eines der zwei gleich weit entfernten Quads entfernt.

MfG


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Dez 01, 2007 12:49 
Offline
DGL Member

Registriert: Mi Nov 28, 2007 17:37
Beiträge: 17
Wohnort: Berlin
Ach neeeeeiiin ...
Ich habe jetzt wirklich die ganze Zeit die einzelnen Forenbeiträge durchwühlt
und diesen Fehler auf Seite 23 bei Einsteiger schon gefunden. Dort hat man genau das
selbe vorgeschlagen. Erst danach habe ich geguckt ob schon jemand auf meinen
Beitrag geantwortet hat.
... und ja ...
Genau daran lag es ...
Man, man, man ... immer diese “Kleinigkeiten”. :roll:

Aber deine Erklärung dazu gefällt mir. So viel habe ich mich ja
noch nicht mit der Funktion beschäftigt. Habe sie eher als Verbesserung
der Performance hingenommen und das war es dann auch.
Jetzt weis ich doch wieder ein kleines Stück mehr und habe auch
noch gleichzeitig eine neue Funktion kennen gelernt. :D

Ich bedanke mich bei dir für deine Hilfe und beim nächsten
mal gucke ich doch erst noch genauer die Beiträge durch und
poste es dann auch in den Anfängerbereich.

_________________
Es ist ein großer Vorteil im Leben, die Fehler, aus denen man
lernen kann, möglichst früh zu begehen.


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


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 10 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.008s | 15 Queries | GZIP : On ]