weisen rand um bild in opengl textur ausblenden
-
hi
arbeite noch nicht lang mit opengl. hab da aber nun für ne idde ein kleines problem. kann mir jemand sagen wie ich einen farbigen rand bei motivbildern in opengl tranzparent mache??
lese die bilder mit
glGenTextures(3, &texture[0]); bitmap = new Graphics::TBitmap; const int Seitenlange=256; GLubyte bits[Seitenlange][Seitenlange][4]; String dateien[]={"dose","mann","wall"}; for (int g = 0; g < 3 ; g++) { bitmap->LoadFromFile(dateien[g]+".bmp"); for(int i = 0; i < Seitenlange; i++) { for(int j = 0; j < Seitenlange; j++) { bits[i][j][0]= (GLbyte)GetRValue(bitmap->Canvas->Pixels[i][j]); bits[i][j][1]= (GLbyte)GetGValue(bitmap->Canvas->Pixels[i][j]); bits[i][j][2]= (GLbyte)GetBValue(bitmap->Canvas->Pixels[i][j]); bits[i][j][3]= (GLbyte)255; } } glBindTexture(GL_TEXTURE_2D, texture[g]); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); glTexImage2D(GL_TEXTURE_2D, 0, 4, Seitenlange, Seitenlange, 0, GL_RGBA, GL_UNSIGNED_BYTE, bits); }ein und verwende die dann z.b...
glBindTexture(GL_TEXTURE_2D, texture[i]); glBegin(GL_QUADS); // Beginne Quadrat zu zeichnen glTexCoord2f(0,0); glVertex3f(0.5+x,0,0.5+y); // Setze TexCoord und Vertice glTexCoord2f(1,0); glVertex3f(-0.5+x,0,0.5+y); // Setze TexCoord und Vertice glTexCoord2f(1,1); glVertex3f(-0.5+x,0,-0.5+y); // Setze TexCoord und Vertice glTexCoord2f(0,1); glVertex3f(0.5+x,0,-0.5+y); // Setze TexCoord und Vertice glEnd();nun mein problem bei dem bild von dem mensch z.b. ist aktuell ausen rum ein weiser rand... wie kann ich das ohne feste alphamap umsetzen... hab das problem, das ich das bild variabel vom benutzer auswählen lass. und such am besten nach ner möglichkeit, wie ich z.b. die farbe des ersten pixels links oben, in dem gesammten bild als tranzparent deklariere. gibts sowas? hat jemand ne idee??
-
ach su und ich benutz c++ Builder drum hab ich das hier reingemacht weis nicht sicher obs hier richtig ist weils da ja garnicht so viel mit zutun hat oder???
-
Dieser Thread wurde von Moderator/in Jansen aus dem Forum VCL (C++ Builder) in das Forum Spiele-/Grafikprogrammierung verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
geht das nicht irgendwie mit dem A wert von RGBA??
-
Also erstmal:
bits[i][j][0]= GetRValue(bitmap->Canvas->Pixels[i][j]);reicht aus, das Casting ist unnoetig.
Zweitens wuerde ich das nicht ueber Pixels machen, weil es extrem langsam ist, sondern mithilfe von Scanline.Und die Transparenz eines Pixels bestimmst du mit dem viertem Byte, also bei dir
bits[i][j][3]= 255;255 waere volle Sichtbarkeit, 0 waere unsichtbar. Musst du halt gucken wie du das machst, kannst ja bei einer bestimmten Farbe (z.B. RGB(255,0,255)) das ganze auf 0 setzen, oder so wie du es haben willst. Muesstest dann aber auch noch Blending oder Alphatest aktivieren.
Achja, und beim Rendern... was sind denn bei dir x und y fuer Werte? Und welche Perspektive nutzt du? Bei Parallelperspektive waeren solltest du nicht mit haben Pixels arbeiten, wenn du GL_NEAREST eingestellt hast.