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?
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.
@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?
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)
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.
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.
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 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?
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?
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 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?
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?
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...
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?
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.
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?
Mitglieder in diesem Forum: 0 Mitglieder und 6 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.