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

Aktuelle Zeit: Mi Jul 16, 2025 15:34

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



Ein neues Thema erstellen Auf das Thema antworten  [ 16 Beiträge ]  Gehe zu Seite 1, 2  Nächste
Autor Nachricht
 Betreff des Beitrags: Masking
BeitragVerfasst: Sa Mär 20, 2004 13:47 
Offline
DGL Member
Benutzeravatar

Registriert: Di Jul 29, 2003 00:11
Beiträge: 436
Hi,
irgendwie will Masking hier nicht hinhauen...
Code:
  1.  
  2.   glEnable(GL_BLEND);
  3.   glDisable(GL_DEPTH_TEST);
  4.   glLoadName(MenuItems[1]);
  5.   DrawTexQuad(GetVector(-1,-0.5,-15),
  6.               GetVector(-1,0.5,-15),
  7.               GetVector(-3,0.5,-15),
  8.               GetVector(-3,-0.5,-15),
  9.               MenuItems[1]);
  10.   glBlendFunc(gl_dst_color,gl_one);
  11.   DrawTexQuad(GetVector(-1,-0.5,-15),
  12.               GetVector(-1,0.5,-15),
  13.               GetVector(-3,0.5,-15),
  14.               GetVector(-3,-0.5,-15),
  15.               TestMask);
  16.   glDisable(GL_BLEND);
  17.   glEnable(GL_DEPTH_TEST);
  18.  

Nunja, das Ergebnis ist nicht wirklich ein Button mit abgerundeten Ecken...
So sieht das ganze aus:


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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Mär 20, 2004 14:39 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Dez 28, 2002 11:13
Beiträge: 2244
Eine Idee wäre die Maske direkt im Alpha Kanal der Texture zu speichern und dann ganz normal mit

Code:
  1. glAlphaFunc(GL_GREATER,0);
  2. glenable(GL_ALPHA_TEST);


die Maskierung einzustellen.

Wenn das aber mit 2 Texturen sein soll, dann schreib die Maske erst nur in den Alpha Kanal und blende nacher die normale Texture darüber. Dafür muß die Maskentexture aber einen Alpha Kanal haben.

Code:
  1. glDisable(GL_BLEND);
  2. glColorMask(false,false,false,true);
  3.  
  4. //Maske Rendern;
  5.  
  6. glEnable(GL_BLEND);
  7. glBlendFunc(GL_DST_ALPHA,GL_ONE_MINUS_DST_ALPHA);
  8. glColorMask(true,true,true,true);
  9.  
  10. //Texture Rendern;


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Mär 20, 2004 15:30 
Offline
DGL Member
Benutzeravatar

Registriert: Di Jul 29, 2003 00:11
Beiträge: 436
Gut, mit TGA-Dateien mit Alphachannel geht das ganze.

Bloß würde mich doch interessieren, warum das mit der Maske nicht geklappt hat.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Mär 20, 2004 15:47 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Dez 28, 2002 11:13
Beiträge: 2244
Du hast die Maske mit glBlendFunc(gl_dst_color,gl_one); geblendet.
Das heißt es wurde folgendes berechnet:
BasisTexture+Maske*BasisTexture=BasisTexture*(1+Maske)
An den Stellen an denen die Maske 1 stehen ja, wurde die Basistexture mit 2 multipliziert und dadurch doppelt so hell. An dem Screenshot kann man erkennen, daß sich dort ein abgerundeter Bereich befindet, der doppelt so hell ist wie der Rest.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Mär 26, 2004 17:48 
Offline
DGL Member
Benutzeravatar

Registriert: Di Jul 29, 2003 00:11
Beiträge: 436
Das mit der Transparenz haut noch nicht wirklich hin...

Schon fast peinlich, wie oft ich hier nachfragen muss. :)


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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Mär 26, 2004 18:06 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
Hast du es auch als 32-Bit TGA gespeichert? 24-Bit (Voreinstellung bei PS) beinhaltet logischerweise (8Bit pro Farbkanal) keinen Alpha. Ansonsten musst du die Alphamaske dann natürlich auch laden und Alphamasking aktivieren (hat Lars ja oben geschrieben wie).

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Mär 26, 2004 18:23 
Offline
DGL Member
Benutzeravatar

Registriert: Di Jul 29, 2003 00:11
Beiträge: 436
Zu allem: Ja.
Die Texturen lade ich mit der Textures.pas.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Mär 26, 2004 18:24 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Neben den 32 Bit TGA's solltest du auf jeden Fall noch die Filterung von den Texturen ausstellen. Also Min und Mag auf GL_LINEAR. Es kann manchmal zu Verzerrungen der Ränder durch die Filterung kommen. Dadurch hatte ich teilsweise auch schon komische Effekte gehabt.

PS: Um mal ein bisschen Werbung zu machen. ;-)
In diesem Projekt habe die Quellen von meinen OpenGL Komponenten veröffentlich. Für den Fall, dass du etwas GUI ähnliches machen möchtest kannst du dir das ja mal anschauen. Das dürfte dir evtl. reichlich arbeit ersparren.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Mär 26, 2004 18:28 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
Sieht für mich spontan so aus als würde die Alphainformation ignoriert werden, allerdings nutze ich auch die Textures.pas (aber stark modifiziert und zusammen mit nem eigenen Texturenmanager) und habe damit keine Probleme.
Versuch mal die Datei als 32-Bit und komprimiert zu speichern, da der Loader vllt. nur dann den Alpha mitlädt. Ansonsten hast du entweder doch was im Bezug auf Alphatesting vergessen, oder du nutzt ne alte Version die den Alphawert noch nicht korrekt lädt.

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Mär 26, 2004 20:35 
Offline
DGL Member
Benutzeravatar

Registriert: Di Jul 29, 2003 00:11
Beiträge: 436
Eben nochmal bei sulaco aus einem aktuellem Openglprogramm dort eine neue Texture.pas runtergeladen. Auch alle möglichen Varianten mit dem TGA-Export von PS durchprobiert.
Hier wäre die Funktion, mit der ich den Button zeichne:
Code:
  1.  
  2. procedure TGLButton.Draw;
  3. var
  4.   Texture: gluInt;
  5. begin
  6.   Texture := Textura;
  7.   case fState of
  8.     1: Texture := Texturb;
  9.     2: Texture := Texturc;
  10.   end;
  11.   glAlphaFunc(GL_GREATER,0);
  12.   glenable(GL_ALPHA_TEST);
  13.   glLoadName(fOGLName);
  14.   DrawTexQuad(GetVector(fX + fWidth, fy,-15),
  15.               GetVector(fX + fWidth, fY + fHeight,-15),
  16.               GetVector(fX, fY + fHeight,-15),
  17.               GetVector(fX, fY,-15),
  18.               Texture);                  
  19.   glDisable(GL_ALPHA_TEST);
  20. end;
  21.  


Anbei nochmal ein Screenshot, bei dem deutlich zu sehen ist, wie der um den transparenten bereich noch eine weiße Kontur zeichnet. Attachment 2 ist die momentane Textur.

Und danke für das Gui-Lib-Angebot. Aber ansich ist meine Buttonklasse soweit fertig und funktioniert. :) Bis auf diese eine Sache halt...


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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Mär 26, 2004 20:52 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
Das Problem ist AFAIK PS selber, weil das die Ränder der Transparenz weichzeichnet. Das "Bild" auf dem Anhang habe im PS gemacht, und der gestrichelte Rand zeigt (anderes Bildbearbeitungsprogramm) die Alphamaske an, die wie man sieht nicht den Objektkonturen entspricht. Deshalb mache ich meine Transparenz nicht im PS, sondern im PicturePublisher, da hab ich mehr Kontrolle und die Sache mit den Masken geht dort einfacher.

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Mär 26, 2004 21:24 
Offline
DGL Member
Benutzeravatar

Registriert: Di Jul 29, 2003 00:11
Beiträge: 436
Das muss man doch mit PS hinkriegen? Ich hätte sonst noch TheGimp 2 installiert (Neugier), aber sonst. Das Ding hab ich damit schon ausprobiert, aber es zeichnet auch die Ränder weich, bloß in schwarz.
Aber vielen dank, ich versuch dann mal rauszufinden, wie ich das mache.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Mär 27, 2004 10:41 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
Schau mal in der PS-Hilfe unter Erstellen von Alpha-Kanälen (Photoshop) nach, da wird gezeigt wie man für den Alphakanal eine eigene Ebene erstellt. Ich habs zwar selbst noch nicht probiert, aber evtl. hat man da mehr Einflussmöglichkeiten, denn im Bezug auf das weichzeichnen des Alphakanals bei Verwendung der Transparenz kann man allem Anschein nach wirklich nichts einstellen.

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Mär 27, 2004 10:46 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Dez 28, 2002 11:13
Beiträge: 2244
Zur Not könnte man ja auch die Maske und das Farbbild getrennt und erstellen und das dann selber als TGA zusammenfügen.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Mär 27, 2004 18:54 
Offline
DGL Member
Benutzeravatar

Registriert: Di Nov 26, 2002 22:12
Beiträge: 259
Wohnort: Dresden
Behebt vielleicht ein Aufruf von glColor4* mit einem geringen Alphawert dein Problem?

Code:
  1. glAlphaFunc(GL_GREATER, 0.1);
  2. glEnable(GL_ALPHA_TEST);
  3. glColor4f(1,1,1, 0.12);

_________________
Nichts auf der Welt ist so gerecht verteilt wie der Verstand. Denn jederman ist überzeugt, dass er genug davon habe.
Rene Descartes, frz. Mathematiker u. Philosoph, 1596-1650


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 16 Beiträge ]  Gehe zu Seite 1, 2  Nächste
Foren-Übersicht » Programmierung » OpenGL


Wer ist online?

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