Grüner Rand bei transparenten Bildern aufgrund GL_LINEAR
-
Sgt. Nukem schrieb:
joomoo schrieb:
Sgt. Nukem schrieb:
WTF???

Und woher soll TGGC als DirectX-ler wissen, wie man Dein OpenGL-Problem löst...

Gar nicht? Dann soll er auch nicht antworten, wenn er die Lösung nicht weiß oder keinen sinnvollen Vorschlag hat.
Spinner! Er hatte ja vernünftige Lösungsvorschläge gemacht, nur hat er sie Dir nicht auf dem Silbertablett serviert!

Vielleicht solltest Du ihm Deinen kompletten Code schicken, dann programmiert er das Ding weiter...
Hier: nehe.gamedev.net - bitte bei Tutorial 1 anfangen.

Vernünftige Lösungvorschläge? Bilineare Filterung ausschalten. Toller Vorschlag.
Außerdem hab ich den kompletten Code schon geschickt.
In den Nehe Tutorials steht auch nichts zu diesem Problem drinn.
TGGC schrieb:
Was erzählst du? Ich hab doch von Anfang an gesagt, was du machen muss. Vielleicht solltest du es mal lesen.
aha? Erster Beitrag von dir: Du schlägst vor bilineares Filtern auszumachen oder das grün wegzumachen. Ich sage das ich eine Lösung MIT bilinearem Filtern will und frage dich welche Farbe ich anstatt Grün denn nehmen soll - Keine Antwort von dir.
Nächster Vorschlag von dir: Ein Alphakanal mit weichem Übergang (was immer das sein mag). Auf die Frage wie das geht oder wie du dir das vorstellst: Keine Antwort!
Nächster Vorschlag, der eigentlich kein nächster Vorschlag ist: Ich soll bilineares Filtern ausmachen. Vielleicht solltest DU mal meine Beiträge lesen?
So, und das wars auch schon. Also wo soll ich ansetzen??? Ich hab keine Ahnung. Entweder beschreibst du mir das mit dem "weichen Alphakanal" nochmal oder du sagst mir, dass es keine andere Lösung als bilineares Filtern auszuschalten gibt. Und ne andere Farbe als grün nehmen, wird auch nichts nützen, da dann der Rand einfach ne andere Farbe haben wird.
-
Ich habe mir mal den ganzen Thread durchgelesen und konnte mir das Lachen echt nicht verkneifen, vorallem joomoo, wieso stellst du dich so stur an?
Es gibt den Lösungsvorschlag Billineares Filtering auszumachen. Nagut. Und du sagst, dass du das nicht willst, weil's dann scheisse (entschuldigung) aussehen würde. Aber du weißt auch nicht, wie man es abschaltet, wenn ich das richtig in Erinnerung habe. *Woher* weißt du dann, wie es aussieht, wenn du es abschaltest?
-
xindon schrieb:
Ich habe mir mal den ganzen Thread durchgelesen und konnte mir das Lachen echt nicht verkneifen, vorallem joomoo, wieso stellst du dich so stur an?
Es gibt den Lösungsvorschlag Billineares Filtering auszumachen. Nagut. Und du sagst, dass du das nicht willst, weil's dann scheisse (entschuldigung) aussehen würde. Aber du weißt auch nicht, wie man es abschaltet, wenn ich das richtig in Erinnerung habe. *Woher* weißt du dann, wie es aussieht, wenn du es abschaltest?
Ich gehe mal davon aus das man es mit GL_NEAREST anstatt GL_LINEAR als Textur Parameter ausschalten. Wusste nicht, das man dieses "Weichzeichnen" wie ich es zuerst genannt hab Bilineares Filtern nennt. Weiß es immer noch nicht, da mich auch keiner Aufklärt. Ich dachte halt auch zuerst, das TGGC was ganz anderes meint. Dann habe ich einfach mal bei google gesucht und eine beschreibe zu bilinearem Filtern gefunden. Und dann konnte ich mir natürlich vorstellen wie es aussieht.
Jetzt habe ich eine Frage:Stelle ich bilineares Filtern mit
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_NEAREST);
ab?Wenn ja:
Das sieht scheisse aus, und das meinte ich auch von Anfang an, mit dem Weichzeichnen.Wenn nein:
Wie stell ich es dann aus? Tut mir leid, aber ich hab bei google und auf opengl.org nichts zu diesem Thema gefunden.
-
joomoo schrieb:
Ich sage das ich eine Lösung MIT bilinearem Filtern will und frage dich welche Farbe ich anstatt Grün denn nehmen soll - Keine Antwort von dir.
[...]
Entweder beschreibst du mir das mit dem "weichen Alphakanal" nochmal oder du sagst mir, dass es keine andere Lösung als bilineares Filtern auszuschalten gibt. Und ne andere Farbe als grün nehmen, wird auch nichts nützen, da dann der Rand einfach ne andere Farbe haben wird.Als weichen Übergang würde ich einen Gradienten von 0 nach 255 im Alphakanal bezeichnen, aber keine Ahnung was du dir darunter vorstellst. Da du sowas wolltest, müsst du ja wissen, wie es aussieht. Und wieso sollte eine andere Farbe als Grün nichts nützen? Alphablending geht mit jeder Farbe. Und egal welche du nimmst: wenn es kein Grün ist, kommt kein grüner Balken. Versprochen.
Bye, TGGC (Demo or Die)
-
TGGC schrieb:
joomoo schrieb:
Ich sage das ich eine Lösung MIT bilinearem Filtern will und frage dich welche Farbe ich anstatt Grün denn nehmen soll - Keine Antwort von dir.
[...]
Entweder beschreibst du mir das mit dem "weichen Alphakanal" nochmal oder du sagst mir, dass es keine andere Lösung als bilineares Filtern auszuschalten gibt. Und ne andere Farbe als grün nehmen, wird auch nichts nützen, da dann der Rand einfach ne andere Farbe haben wird.Als weichen Übergang würde ich einen Gradienten von 0 nach 255 im Alphakanal bezeichnen, aber keine Ahnung was du dir darunter vorstellst. Da du sowas wolltest, müsst du ja wissen, wie es aussieht. Und wieso sollte eine andere Farbe als Grün nichts nützen? Alphablending geht mit jeder Farbe. Und egal welche du nimmst: wenn es kein Grün ist, kommt kein grüner Balken. Versprochen.
Bye, TGGC (Demo or Die)
Allerdings stelle ich mir den weichen Übergang, zwischen zwei Pixeln vor. Und da der Alphakanal die gleiche Auflösung hat, wie der Rest vom Bild, krieg ich das nicht über Zwischenwerte hin.
Also ich drücke mich anders aus: Ich will überhaupt keinen Balken, egal in welcher Farbe. Das war halt nur ein Beispiel mit dem Grün.Ich hab mal ein Bild gemacht, wie ich mir das vorstelle:
http://joomoo.g2host.de/Bild1.pngmfg.
-
joomoo schrieb:
Ich will überhaupt keinen Balken, egal in welcher Farbe. Das war halt nur ein Beispiel mit dem Grün.
Ich hab mal ein Bild gemacht, wie ich mir das vorstelle:
http://joomoo.g2host.de/Bild1.pngAber "keine Farbe" gibt es nicht, irgendeine Farbe ja in den Pixeln sein. Also entweder willst den Texturfilter, dann werden die (jetzt noch grünen) Pixel gelesen. Oder du schaltest ihn aus. Die GraKa kann nunmal nicht erraten, welche Farbe du gern hättest. Und auf deinem Beispielbild sind doch auch grüne Balken an einigen Stellen.
Bye, TGGC (Demo or Die)
-
TGGC schrieb:
Und auf deinem Beispielbild sind doch auch grüne Balken an einigen Stellen.
Echt? Ich seh keine. Für mich ist da ein schöner weicher Übergang. Falls da wirklich welche sind, dann sind auf keinen Fall so extrem, wie bei mir. Also muss das doch irgentwie gehen.
mfg.
PS: Das Spiel ist übrigens Sonic Adventure DX. Ich weiß jetzt nicht welche API das nimmt, aber ich glaube DirectX. Kennt jemand auch OpenGL Spiele, wo es diesen Effekt gibt?
-
joomoo schrieb:
ChockoCookie schrieb:
Setze alle Nachbarpixel eines grünen Pixels auch auf Transparent (auf das wärst auch du gekommen), dann funkt bilinear, nur bei anisotrop kanns noch Probleme geben.
Gar nicht mal so schlecht. Nur es gehen dann halt ein paar Pixel verloren. Aber wenn ich recht bedenke ist das nicht so schlimm. Werde ich mal ausprobieren.
War ich nicht drauf gekommen, ich hatte mir gedacht, die grünen Pixel am Rand mit der Benachbarten Farbe zu belegen, also sozusagen den untransparenten bereich zu vergrößern. Das war mir dann zu kompliziert. Deine Lösung ist besser, werde ich gleiche mal ausprobieren. DANKE!So, das habe ich jetzt mal ausprobiert. Der Code sieht so aus:
GLuint BildGroesse = TextureImage[loop]->sizeX * TextureImage[loop]->sizeY; GLubyte TextureTemp[BildGroesse * 4]; for(int i=BildGroesse;i>0;i--) { TextureTemp[4*i-1] = 255; // A } for(int i=BildGroesse;i>0;i--) { TextureTemp[4*i-4] = TextureImage[loop]->data[3*i-3]; // R TextureTemp[4*i-3] = TextureImage[loop]->data[3*i-2]; // G TextureTemp[4*i-2] = TextureImage[loop]->data[3*i-1]; // B if(TextureImage[loop]->data[3*i-3] == 0 &&TextureImage[loop]->data[3*i-2] == 255 &&TextureImage[loop]->data[3*i-1] == 0) { TextureTemp[4*i-1] = 0; // Mitte if(i > TextureImage[loop]->sizeY) TextureTemp[4*i-1 - TextureImage[loop]->sizeY * 4] = 0; // Unten if(i > TextureImage[loop]->sizeY + 1) TextureTemp[4*i-1 - TextureImage[loop]->sizeY * 4 - 4] = 0; // Untenlinks if(i > TextureImage[loop]->sizeY - 1) TextureTemp[4*i-1 - TextureImage[loop]->sizeY * 4 + 4] = 0; // Untenrechts if(i < BildGroesse - TextureImage[loop]->sizeY) TextureTemp[4*i-1 + TextureImage[loop]->sizeY * 4] = 0; // Oben if(i - 1 < BildGroesse - TextureImage[loop]->sizeY) TextureTemp[4*i-1 + TextureImage[loop]->sizeY * 4 - 4] = 0; // Obenlinks if(i + 1 < BildGroesse - TextureImage[loop]->sizeY) TextureTemp[4*i-1 + TextureImage[loop]->sizeY * 4 + 4] = 0; // Obenrechts if(i < BildGroesse) TextureTemp[4*i-1+4] = 0; // Links if(i + 1 > 0) TextureTemp[4*i-1-4] = 0; // Rechts } }Allerdings ist diese Lösung nicht ganz so gut wie auf dem Screenshot von Sonic Adventure. ich frag mich wie die das gemacht haben. Weiß das zufällig jemand?
mfg.
-
Die haben grüne Pixel gesetzt, und zwar dort, wo sie grüne Kanten wollten. Z.b. unten rechts.
Bye, TGGC (Demo or Die)
-
TGGC schrieb:
Die haben grüne Pixel gesetzt, und zwar dort, wo sie grüne Kanten wollten. Z.b. unten rechts.
Bye, TGGC (Demo or Die)
Hä? Weiß jetzt nicht was du meinst. Unten Rechts in meinem Screenshot? Naja egal.
Was mir eigentlich gerade in den Sinn kommt, ist, dass die das bestimmt nicht mit einem Alpha Kanal gemacht haben, oder? Und Masking schließe ich auch aus. Also wie dann?
mfg.