Registriert: Mo Dez 26, 2005 22:27 Beiträge: 117
Programmiersprache: Pascal, C++
Ich will meine Texturen den schwarzen Außen rand wegschneiden und zwar mit folgenden Code
Code:
glEnable(GL_ALPHA_TEST);
glAlphaFunc(GL_GREATER,0.1);
for i:=0tolength(main.asteroids)-1dobegin
glBindTexture(GL_TEXTURE_2D, main.asteroids[i]);
glPushMatrix;
glTranslatef(x_aster[i], y_aster[i],0);
glBegin(GL_QUADS);
glTexCoord2f(0,1); glVertex3f(0,0,0);
glTexCoord2f(1,1); glVertex3f(20,0,0);
glTexCoord2f(1,0); glVertex3f(20,20,0);
glTexCoord2f(0,0); glVertex3f(0,20,0);
glEnd;
glPopMatrix;
end;
glDisable(GL_ALPHA_TEST);
Eigentlich sollte er mir jetzt schwarze Pixel nicht anzeigen. (oder? )
Naja, er macht absolut nichts... Ich habe auch schon alle anderen Parameter wie GL_LESS usw. ausprobiert, aber er macht gar nichts.
Vielleicht liegt es an meinen Bildformat.. Ich benutze das TARGA-Bildformat..
Kann mir jemand sagen woran das liegt? Wird der Alpha-Kanal etwa nicht richtig geladen?
_________________ Ein Computer wird das tun, was Du programmierst - nicht das, was Du willst.
Probier's mal mit glEnable(GL_BLEND) oder so ähnlich. Jedenfalls muss AFAIK für einen funktionierenden Alphatest Blending aktiv sein.
Und TGAs sind prädestiniert für Alphatests wegen dem Alphachannel. Insofern solltest du dir da keine Sorgen machen
Bei Alphatests solltest du danach aber noch irgendwie die Ränder abschneiden... Denn am Rand der Alphamaske werden halbdurchsichtige Texel übrigbleiben. Und die schauen sehr strange aus, bei genauerem Betrachten. Man kann die aber wegbekommen. Ich weiß bloß nicht, wie
_________________ "Für kein Tier wird so viel gearbeitet wie für die Katz'."
Registriert: Do Dez 05, 2002 10:35 Beiträge: 4234 Wohnort: Dortmund
Frase: Alphamasking und Blending sind zwei ähnliche aber völlig getrennte Dinge. Die können natürlich auch unabhängig voneinander benutzt werden.
Zitat:
Nein, ich habe 24 Bit... Ist das von Bedeutung?
Natürlich. Ohne Alphakanal kannst du auch keinen Alphatest machen. Wollte auch gerade danach fragen aber irgendwie bin ich heute zu langsam.
Und etwas zum Verständnis schwarze Pixel sind nicht gleich Alphakanal. Schwarze Pixel sind schwarze Pixel wärend ein Alphakanal so etwas ist wie die Farbe blau nur, dass die regelt wie sichtbar deine einzelnen Pixel sind. Und genau den müsstest du in deinem Grafikprogram erstellen. Du musst beim Hochladen der Texturdaten dann natürlich mit angeben, dass ein Alphakanal vorhanden ist. Sonst lässt den OpenGL mit weg.
Das was Frase meint resultiert durch den Weichzeichner in OpenGL. Der blendet die Pixel schon so leicht über wärend sie aber noch sichtbar sind. Wegbekommen tut man diese nur, indem man dafür sorgt, dass die ausgeblendeten Pixel genau die selbe farbe haben wie die noch sichtbaren. Also solltest du am einfachsten die Bilder in einem Grafikprogramm bearbeiten und den Rand entsprechend anpassen und das ausblenden mittels Alphakanal machen. Bei Texturen für Modelle hat ihr bestimmt auch schon mal gesehen, dass die Kanten nie direkt aufhören sondern noch ein bisschen weiter gehen. Genau das selbe Phänomen.
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.