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

Aktuelle Zeit: So Jul 20, 2025 00:26

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



Ein neues Thema erstellen Auf das Thema antworten  [ 11 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Blending will nicht!!!
BeitragVerfasst: Mo Sep 13, 2004 22:40 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Jun 09, 2003 16:47
Beiträge: 35
Wohnort: Bielefeld
Hi@ll

Ich hab 2 texturen geladen, eine schwarz weisse (Schrifttextur) und eine bunte(energy.bmp aus euren tut) jetzt wollte ich die schwarze schrift textur über die energytextur legen:

Code:
  1.             procedure TestTextures();
  2.             begin
  3.               glTranslatef(5,5,10);
  4.               glColor4f(1,1,1,1);
  5.  
  6.               glEnable(GL_BLEND);
  7.                   glBindTexture(GL_TEXTURE_2D, TEX[0]);
  8. //                  glBlendFunc(GL_ZERO,GL_SRC_COLOR);
  9.                   glBindTexture(GL_TEXTURE_2D, TEX[2]);
  10.                   glBegin(GL_QUADS);
  11.                     glTexCoord2f(0,0); glVertex3f(0,0,0);
  12.                     glTexCoord2f(0,1); glVertex3f(0,2,0);
  13.                     glTexCoord2f(1,1); glVertex3f(2,2,0);
  14.                     glTexCoord2f(1,0); glVertex3f(2,0,0);
  15.                   glEnd;
  16.               glDisable(GL_BLEND);
  17.             end;


wenn ich BlendFunc aktiviere, dann sehe ich nichts. wenn ich es auskommentiert lasse dann sehe ich jeweil die zuletzt definierte textur, in diesem fall Tex[2]. Was ist hierdran falsch??

ich lade die texturen so beim programmstart...jaja ich optimiere später, wenns besser läuft:
Code:
  1. procedure TGLForm.LoadTextures();
  2. VAR
  3.     texture1: PTAUX_RGBImageRec;
  4. begin
  5.     texture1 := auxDIBImageLoadA('./texture/wall1.bmp');
  6.     glGenTextures(2, @tex[0]);
  7.     glBindTexture(GL_TEXTURE_2D, tex[0]);
  8.     glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);
  9.     glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);
  10.     glTexImage2D(GL_TEXTURE_2D, 0, 3,
  11.                             texture1^.sizeX, texture1^.sizeY, 0,
  12.                             GL_RGB, GL_UNSIGNED_BYTE, texture1^.data);
  13.  
  14.     texture1 := auxDIBImageLoadA('./texture/wall.bmp');
  15.     glBindTexture(GL_TEXTURE_2D, tex[1]);
  16.     glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);
  17.     glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);
  18.     glTexImage2D(GL_TEXTURE_2D, 0, 3,
  19.                             texture1^.sizeX, texture1^.sizeY, 0,
  20.                             GL_RGB, GL_UNSIGNED_BYTE, texture1^.data);
  21.  
  22.     texture1 := auxDIBImageLoadA('./texture/energy.bmp');
  23.     glBindTexture(GL_TEXTURE_2D, tex[2]);
  24.     glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);
  25.     glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);
  26.     glTexImage2D(GL_TEXTURE_2D, 0, 3,
  27.                             texture1^.sizeX, texture1^.sizeY, 0,
  28.                             GL_RGB, GL_UNSIGNED_BYTE, texture1^.data);
  29. end;

_________________
Ich bin n00b und das ist auch gut so!


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Sep 13, 2004 23:29 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
Du hast das Prinzip von Blending bzw. Multitexturing komplett falsch verstanden, les dir also am besten mal unsere Tuts durch. Beim Blending rendert man mehrere Primitiven mit den unterschiedlichen Texturen, beim Multitexturing nur einmal, allerdings bindet man dann die Texturen an unterschiedliche Textureinheiten. Du machst gar nichts davon, sondern bindest zuerst Textur A an die aktuelle TMU und dann Textur B, wodurch (die GL ist ja eine Statemachine) das Binden von Textur A überschrieben wird.

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Sep 14, 2004 11:00 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Jun 09, 2003 16:47
Beiträge: 35
Wohnort: Bielefeld
irgendwie kann man das ja nicht verstehen, wenn das beispiel im tutorial noch nicht einmal klappt:

Code:
  1.             procedure TestTextures();
  2.             begin
  3.               glBindTexture(GL_TEXTURE_2D, tex[2]);
  4.               glBegin(gl_Quads);
  5.                   glColor4f(1,1,1,1);
  6.                   glTexCoord2f(0,0);
  7.                   glVertex3f(-1,-1,0);
  8.  
  9.                   glColor4f(1,1,1,0);
  10.                   glTexCoord2f(1,0);
  11.                   glVertex3f(1,-1,0);
  12.                   glTexCoord2f(1,1);
  13.                   glvertex3f(1,1,0);
  14.  
  15.                   glColor4f(1,1,1,1);
  16.                   glTexCoord2f(0,1);
  17.                   glvertex3f(-1,1,0);
  18.               glEnd;
  19.  
  20.  
  21.               glEnable(GL_BLEND);
  22.                   glBlendFunc(GL_SRC_ALPHA,GL_DST_ALPHA);
  23.                   glBindTexture(GL_TEXTURE_2D, tex[0]);
  24.                   glBegin(gl_Quads);
  25.                       glColor4f(1,1,1,0);
  26.                       glTexCoord2f(0,0);
  27.                       glVertex3f(-1,-1,0);
  28.  
  29.                       glColor4f(1,1,1,1);
  30.                       glTexCoord2f(1,0);
  31.                       glVertex3f(1,-1,0);
  32.                       glTexCoord2f(1,1);
  33.                       glvertex3f(1,1,0);
  34.  
  35.                       glColor4f(1,1,1,0);
  36.                       glTexCoord2f(0,1);
  37.                       glvertex3f(-1,1,0);
  38.                   glEnd;
  39.               glDisable(GL_BLEND);
  40.             end;


euer Beispiel:
Code:
  1.  
  2. Rock.SetTexture;
  3.     glBegin(gl_Quads);
  4.         glColor4f(1,1,1,1);
  5.         glTexCoord2f(0,0);
  6.         glVertex3f(-1,-1,0);
  7.  
  8.         glColor4f(1,1,1,0);
  9.         glTexCoord2f(1,0);
  10.         glVertex3f(1,-1,0);
  11.         glTexCoord2f(1,1);
  12.         glvertex3f(1,1,0);
  13.  
  14.         glColor4f(1,1,1,1);
  15.         glTexCoord2f(0,1);
  16.         glvertex3f(-1,1,0);
  17.     glEnd;
  18.  
  19.     glEnable(GL_BLEND);
  20.     glBlendFunc(GL_SRC_ALPHA,GL_DST_ALPHA);
  21.  
  22.     gras.SetTexture;
  23.     glBegin(gl_Quads);
  24.         glColor4f(1,1,1,0);
  25.         glTexCoord2f(0,0);
  26.         glVertex3f(-1,-1,0);
  27.  
  28.         glColor4f(1,1,1,1);
  29.         glTexCoord2f(1,0);
  30.         glVertex3f(1,-1,0);
  31.         glTexCoord2f(1,1);
  32.         glvertex3f(1,1,0);
  33.  
  34.         glColor4f(1,1,1,0);
  35.         glTexCoord2f(0,1);
  36.         glvertex3f(-1,1,0);
  37.     glEnd;


Habe Lediglich die zeilen, wo ***.SetTexture; steht, geändert. Wieso funktioniert dieser texturüberlauf bei mir nicht?

_________________
Ich bin n00b und das ist auch gut so!


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Sep 14, 2004 11:02 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
Weil du zu 100% einen falschen Tiefentest eingestellt hast, der verhindert dass die zweite Primitive über die erste geblendet wird. Also einfach korrekten Tiefentest einstellen und schon geht das Beispiel.

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Sep 14, 2004 11:14 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Jun 09, 2003 16:47
Beiträge: 35
Wohnort: Bielefeld
ahhh thx jetzt funktioniert es wunderbar...

_________________
Ich bin n00b und das ist auch gut so!


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Okt 20, 2004 16:42 
Offline
DGL Member

Registriert: Sa Okt 16, 2004 11:41
Beiträge: 8
Wohnort: Panketal
ich hab auch ein problem mit dem blending..
was muss ich denn bei tiefentest einstellen und wie mach ich das
ist mein code von der sache her überhaupt richtig?

Code:
  1.  
  2. glEnable(Gl_Blend);
  3.  
  4. glBindTexture(Gl_Texture_2d,Tex[1]);
  5. glBegin(Gl_Quads);
  6.   glTexCoord2f(0,0); glVertex3f(-1,-1,0);
  7.   glTexCoord2f(1,0); glVertex3f(1,-1,0);
  8.   glTexCoord2f(1,1); glVertex3f(1,1,0);
  9.   glTexCoord2f(0,1); glVertex3f(-1,1,0);
  10. glEnd;
  11.  
  12.  
  13. glBlendFunc(GL_SRC_ALPHA,GL_ONE);
  14.  
  15. glBindTexture(Gl_Texture_2d,Tex[2]);
  16. glBegin(Gl_Quads);
  17.   glTexCoord2f(0,0); glVertex3f(-1,-1,0);
  18.   glTexCoord2f(1,0); glVertex3f(1,-1,0);
  19.   glTexCoord2f(1,1); glVertex3f(1,1,0);
  20.   glTexCoord2f(0,1); glVertex3f(-1,1,0);
  21. glEnd;
  22.  
  23. glDisable(gl_Blend);


????

_________________
Wer lesen kann ist klar im Vorteil!


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Okt 20, 2004 19:13 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
glDepthTest() ist die Funktion für den Tiefen test.
(Wenn du Fragen zu Funktionen etc. Hast dann geh einfach ins WIKI (wiki.delphigl.com) und gib den Suchbegriff in der Suche ein. )

Die Texturcoordinaten werden aber höchstwahrscheinlich davür sorgen, dass die Textur gedreht gemappt wird. (glaube im Tutorial auf dem Bild sieht man wies funktionieren sollte.)

Rein von der Praxis her solltest du das glEnable direkt vor dem glBlendFunc() stellen, da es ja auch sein könnte, dass schon eine ganz unmögliche Blendfunc eingestellt ist, und die würde dann auch schon das erste Quad beeinflussen.

Du scheinst 2 Texturen auf eine Fläche mappen zu wollen. Da wäre Multitexturing besser als Blending. Blending is mehr für sachen wie Durchsichtige Dinge über andere Drüberlegen (Glasscheiben).

Gute Tuts gibts auf SoS's...ähm Sashas Homepage delphigl.de. (Sollten aber auch hier im Tutorial Bereich verlinkt sein.)

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Okt 21, 2004 09:53 
Offline
DGL Member
Benutzeravatar

Registriert: Di Feb 25, 2003 15:10
Beiträge: 147
Wohnort: Koblenz a. Rhein
Macht man solche Art von Blendings nicht besser mit MultiTexturing?
Weil Grakas könnens eh alle die halbwegs zu was fähig sind und dann muss man nich alles doppelt zeichnen,
was bei ner Map (für LightMap z.B.) ja evtl. gut Leistung schluckt.

_________________
mir fällt kein Spruch mehr ein für meine Signatur :( naja... :D


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Okt 21, 2004 11:21 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Dez 28, 2002 11:13
Beiträge: 2244
Multitexturing ist da auf jeden Fall besser, weil schneller und einfacher zu programmieren ist es auch, weil man damit unabhängig vom Blend Modus wird.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Okt 21, 2004 12:00 
Offline
DGL Member
Benutzeravatar

Registriert: Di Feb 25, 2003 15:10
Beiträge: 147
Wohnort: Koblenz a. Rhein
Ebendrum.. nur da is halt die Hardwareabhängigkeit vorhanden, wobei das glaub ich ab GF2(bin zu faul nachzugucken) schon verfügbar war oder so..aber sonst is das auf jeden fall besser weil was macht man wenn man textur + lightmap + noch eine textur (z.B. bei schootern einschusslöcher etc.) hat ? das ganze 3ma rendern O_o ?
darum --> MultiTex ^^

_________________
mir fällt kein Spruch mehr ein für meine Signatur :( naja... :D


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Okt 21, 2004 12:10 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
Multitexturing gibts seit der RivaTNT und ist seit dieser Generation auch so gut wie Standard. Unt Multitexturing ist auch nicht unbedingt schneller, sondern eigentlich eher dann wenn man über den Vertexdurchsatz beschränkt ist. Aber darauf zu verzichten ist heutzutage keine gute Idee, besonders wenn man Shader nutzt kann man mit Multitexturing sehr viele Dinge tun.

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


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 11 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.009s | 15 Queries | GZIP : On ]