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

Aktuelle Zeit: Fr Jul 04, 2025 04:00

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



Ein neues Thema erstellen Auf das Thema antworten  [ 18 Beiträge ]  Gehe zu Seite 1, 2  Nächste
Autor Nachricht
 Betreff des Beitrags: Colorkey & Farbe bei Display-Listen
BeitragVerfasst: Mo Jan 27, 2003 09:54 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Jul 12, 2002 07:15
Beiträge: 916
Wohnort: Dietzhölztal / Hessen
Programmiersprache: C/C++, Obj-C
Irgendwie steh' ich grad' mächtig auf dem Schlauch.

1. Wie zum Geier kann ich in OpenGL einen Colorkey definieren, desse Werte beim Zeichnen dann weggelassen werden (bin im Ortho-Modus und will 'n Mauszeiger aus 'ner Textur mit 'nem Quad darstellen).

2. Gibt es eine möglichkeit, die Farbei einer Display-Liste umzudefinieren? Denn wenn ich glColor(blabalbla) aufrufe und dann mein CallList mache, wird irgendwie immer die Farbe wärend der Erstellung der Liste verwendet. (Ich vermute, das es keine Möglichkeit gibt, aber man darf doch noch hoffen, oder?!? ;)) Bevor jemand sagt: "Da muste eben Vertex-Arrays verwenden" soll mir derjenige sagen, wie ich eine Windows-Font in ein Vertex-Array konvertiere ;)

_________________
Und was würdest Du tun, wenn Du wüsstest, dass morgen Dein letzter Tag auf dieser Erde ist?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Jan 27, 2003 12:40 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Dez 28, 2002 11:13
Beiträge: 2244
1. Benutze des Alpha-Kanal der Texture um einzustellen, ob ein Pixel sichtbar ist. Beim Zeichnen verwendest du dann einfach den AlphaTest, um nur die Pixel anzuzeigen, deren Alphawert ein bestimmtes Kriterium erfüllt.
Bsp:
Hier werden nur die Pixel angezeigt, deren Alpha wert größer als 0.5 ist.
glenable(gl_Alpha_Test);
glalphafunc(gl_greater,0.5)

2.Wenn man mit wglUseFontOutlines bzw. wglUseFontBitmaps eine DisplayList erstellt, dann werden normalerweise keine Farb-Befehle mit in die Liste eingebunden. Vielleicht liegt der Fehler wo anders.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Jan 27, 2003 14:01 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Jul 12, 2002 07:15
Beiträge: 916
Wohnort: Dietzhölztal / Hessen
Programmiersprache: C/C++, Obj-C
@DisplayListen: Hm, komisch. Die Farbe, die ich VOR dem Aufruf von wglUseBitmapFonts einstelle, wird auch angezeigt, wenn ich die Schrift mit glCallLists bzw. glCallList aufrufe.

@Alpha: Gibt's auch noch 'ne andere (evtl. schnellere) Methode? Und wenn nicht, wie stell ich den Alpha-Wert eines Bildes ein. Ich hab' versucht, mit Paint Shop Pro einen Alpha-Wert hinzuzufügen, aber irgendwie hab' ich das nicht hinbekommen. Vielleicht mal mit Photo Paint versuchen...

_________________
Und was würdest Du tun, wenn Du wüsstest, dass morgen Dein letzter Tag auf dieser Erde ist?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Jan 27, 2003 14:22 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Mai 06, 2002 20:27
Beiträge: 479
Wohnort: Bremen
alpha wert setzt ein 32bit format voraus. ich hab recht gute erfahrungen mit tgas gemacht. einfach ein bmp als tga speicher und alpha-kanal hinzufügen.... der ist dann greyscale und kann von dir wie alles andere auch editiert werden. (bezieht sich auf photoshop ... würde mich aber wundern, wenn es in den anderen programmen nicht geht)

-lith

_________________
Selber Denken macht klug!


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Jan 30, 2003 20:17 
Ich hatte das selbe problem und habe es dann auch mit tgas und alpha channels hingekriegt. Wichtig ist das du bei PSP(7) eine selection hast. Dann gibt es da irgendwa eine option "add alpha channel' (glaube unter dem selection menu) und auch "save alpha channel to disk". Das problem bei der Sache ist das PSP die Ränder von der alpha map etwas blured $@$#@! Es gibt auch rigendwo eine option mit der mann alles was blau ist selectieren kann.

Wenn du das brauchst dann kann ich mal nachschauen wie ich das gemacht habe.

An die experten: Es muss doch eine bessere Lösung geben! Ich weiss das man bei delphix eine farbe definieren kann dazu also geht es mit opengl garantiert. Und da alle grossen Spiele das konnen (siehe HL) muss das sowieso gehen.


Nach oben
  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Jan 30, 2003 20:33 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
Zitat:
An die experten: Es muss doch eine bessere Lösung geben! Ich weiss das man bei delphix eine farbe definieren kann dazu also geht es mit opengl garantiert. Und da alle grossen Spiele das konnen (siehe HL) muss das sowieso gehen.


Wenn du die glBMP-Library von <a href='http://delphigl.cfxweb.net' target='_blank'>http://delphigl.cfxweb.net</a> benutzt, gibts mit der Funktion ColorKey(R,G,B,Tolerance) des TglBMP Objekts eine sehr einfache Methode eine fest definierte Farbe einer Textur transparent zu machen.

Ich bevorzuge allerdings die manuelle Erstellung des Alpha-Kanals.Besonders einfach geht das übrigens mit dem Picture Publisher von MicroGrafx.Nachdem ich meine Texturen im Photoshop gebastelt hab, erstell ich dann mit diesem Programm den Alphakanal.

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Jan 31, 2003 08:51 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Jul 12, 2002 07:15
Beiträge: 916
Wohnort: Dietzhölztal / Hessen
Programmiersprache: C/C++, Obj-C
Hmmm, ich hab's mit PSP versucht (version 5 & 6.02) bin gescheiter. Dann hab' ich's mit Photo Paint 8 versucht. Hat geklappt, jedoch weigert sich Photopaint wehement ein Bild mit Alpha-Channel als TGA zu speichern. Das einzigste, was Photopaint akzeptiert ist TIF. Und dazu fehlt mir der Loader :cry: Naja, dann muss ich den Alpha-Wert eben in ein eigenes File ablegen oder ein eigenes Foramt definieren. Ist vielleicht sowieso besser... Aber gibt's außer der Alpha-Geschichte wirklich kein ColorKey in OpenGL (so wie in D3D)? Geht das nur über Alpha-Blending?

@SOS: Dein Sample über "ColorKey via Alpha" ist ja ganz nett, aber warum iss das so langsam?

_________________
Und was würdest Du tun, wenn Du wüsstest, dass morgen Dein letzter Tag auf dieser Erde ist?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Jan 31, 2003 09:49 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
Zitat:
... Aber gibt's außer der Alpha-Geschichte wirklich kein ColorKey in OpenGL (so wie in D3D)? Geht das nur über Alpha-Blending?

Nein, gibts (leider) nicht, aber ich gehe mal davon aus, das D3D das auch über den Alphakanal macht.
Und wenn du wissen willst, wie man nen ColorKey in OpenGL realisiert, dann lad dir die glBMP-Library herunter (Link steht ja oben) und sieh dir den Quellcode an.Besonders kompliziert ist diese Funktion übrigens nicht.

Zitat:
@SOS: Dein Sample über "ColorKey via Alpha" ist ja ganz nett, aber warum iss das so langsam?

Langsam?Auf meinem Rechner läuft das Sample mit knapp 600fps.Welche Grafikkarte steckt denn in deinem System?

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Jan 31, 2003 11:26 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Jul 12, 2002 07:15
Beiträge: 916
Wohnort: Dietzhölztal / Hessen
Programmiersprache: C/C++, Obj-C
GeForce 2 MX 400. Je nach dem ob ich direkt vor dem Baum oder kurz nach dem Start der Anwendung steht hab ich zischen 129 und 60 FPS :cry:
Es sei denn, ich stell die Textur-Farbtiefe au f16-Bit ein. Dann geht' schneller. Aber eben nur mit 16Bit farbtiefe. Ok, müsste theoretisch reichen, aber...

BTW, wie kann man eigentlich bei der Erstellung der Textur die Farbtiefe auf 16Bit begrenzen? Also so rein Programm-Technisch?

_________________
Und was würdest Du tun, wenn Du wüsstest, dass morgen Dein letzter Tag auf dieser Erde ist?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Jan 31, 2003 12:49 
Offline
DGL Member
Benutzeravatar

Registriert: Do Jan 02, 2003 13:38
Beiträge: 104
Wohnort: Bremen
Mit Photoshop 7 kann ich beim Speichern problemlos die Farbtiefe angeben...

_________________
------------------------------------------------------- <br>Wer andern eine Brawurst brät, <br>hat ein Bratwurst Bratgerät...... <br> <br>So long, Howard ^^ <br>-------------------------------------------------------


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Jan 31, 2003 13:59 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Jul 12, 2002 07:15
Beiträge: 916
Wohnort: Dietzhölztal / Hessen
Programmiersprache: C/C++, Obj-C
Bring aber nix, denn wenn OpenGL intern 32Bit farbtiefe verwendet (weil es z.B. in der System-Steuerung so eingestellt ist), werden Deine 16-Bit Bilder auf 32-Bit erweitert. Umgekehrt übrigens das gleiche.

_________________
Und was würdest Du tun, wenn Du wüsstest, dass morgen Dein letzter Tag auf dieser Erde ist?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Jan 31, 2003 14:08 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
Zitat:
Bring aber nix, denn wenn OpenGL intern 32Bit farbtiefe verwendet (weil es z.B. in der System-Steuerung so eingestellt ist), werden Deine 16-Bit Bilder auf 32-Bit erweitert. Umgekehrt übrigens das gleiche.

Muss dich *leider* enttäuschen, denn deine Aussage ist komplett falsch :!:

Wenn du mit gluBuild2DMipmaps() deine Textur erstellst, dann kannst du das interne Texturformat mittels des format-Paramaters selbst wählen.

Welche Formate es gibt, und wie dabei die Bits auf die einzelnen Kanäle aufgeteilt werden, kannst du hier nachlesen : <a href='http://www.opengl.org/developers/code/sig99/advanced99/notes/node51.html' target='_blank'>http://www.opengl.org/developers/code/sig9...tes/node51.html</a>

Das was du gesagt hast, hat nur dann Gültigkeit, wenn du ein nicht-spezifisches internes Format wie z.B. GL_RGB oder GL_RGBA verwendest.In diesem Fall wählt die OpenGL-Implementation (also der Grakatreiber) den passensten Modus aus.Allerdings wird wohl kein Treiber auf die Idee kommen, aus einer 16Bit-Textur eine 32Bit-Textur zu machen, nur weil der Anzeigemodus auch 32Bit hat...

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Jan 31, 2003 15:13 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Jul 12, 2002 07:15
Beiträge: 916
Wohnort: Dietzhölztal / Hessen
Programmiersprache: C/C++, Obj-C
Stimm auch nicht ganz. In der Systemsteuerung kann man bei den Optionen der NVidia-Karten festlegen, ob 16-Bit, 32-Bit oder die Desktop-Farbtiefe für die Texturen verwendet werden soll. Deswegen hab' ich mich gewundert.

_________________
Und was würdest Du tun, wenn Du wüsstest, dass morgen Dein letzter Tag auf dieser Erde ist?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Jan 31, 2003 15:19 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
Zitat:
Stimm auch nicht ganz. In der Systemsteuerung kann man bei den Optionen der NVidia-Karten festlegen, ob 16-Bit, 32-Bit oder die Desktop-Farbtiefe für die Texturen verwendet werden soll. Deswegen hab' ich mich gewundert.

Dazu verweise ich auf das letzte Kaptiel meines vorherigen Postings.Diese Option zieht AFAIK nur dann, wenn man seine Texturen mit einem nicht-spezifischem Format erstellt, bei dem dann der Grafikkartentreiber die Wahl hat, andernfalls wäre diese Option nämlich ziemlich sinnlos, denn wenn man schon ein spezifisches Texturenformat festlegt, möchte man dies auch nutze ohne das der Grafikkartentreiber da reinpfuscht.

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Jan 31, 2003 15:41 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Jul 12, 2002 07:15
Beiträge: 916
Wohnort: Dietzhölztal / Hessen
Programmiersprache: C/C++, Obj-C
Hmm.. glaub', ich muss mal in's Redbook schaun.
BTW, wenn ich eine Textur im RGBA-Format (32-Bit) hab und dann gluBuild2DMipmaps eine 16-Bit Textur in Auftrag gebe, werden die dann wenigstens von OpenGL entsprechend konvertiert? Ich persönlich finde nämlich das Handling von 24- oder 32-Bit Texturen deutlich einfacher als das von 16-Bit Texturen.

Wie les' ich den eigentlich die 16-Bit-Werte aus einem TBitmap-Objekt (über Scanline) aus? Ich meine, das Wissen "Ich hab' 16 Bit" reicht ja nicht aus. Denn dann weis ich immer noch nicht, ob ich jetzt R5G6B5 oder... momentmal, das andere ist ja R5G5B5 und somit nur 15 bit, was dann in PixelFormat mit pf15bit zurückgeliefert wird...*grübel*

_________________
Und was würdest Du tun, wenn Du wüsstest, dass morgen Dein letzter Tag auf dieser Erde ist?


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


Wer ist online?

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