Alphatextur (OpenGL)
-
Hi Leute,
ich würde gerne in OpenGL ne Textur mit Alphakanal haben, damit halt einfach so teile unsichtbar sind. Nur will cih dafür halt trotzdem Bitmaps oder so verwenden, deshalb würde ich gerne die textur gerne aus ner normalen textur und ner Schwarz-Weiß masking Textur mischen. Aber halt schon beim Laden und nicht erst so komisch uneffizient während des Anzeigens wie beim Nehe Tut... oder geht das überhaupt nicht??Vorschläge und Code Beispiele wären sehr nett
-
ich verstehe zwar nur 50% von dem was da oben steht und das nehe tut kenne ich auch nicht welche lesson ?
aber vielleicht meinst du das// fügt beim laden eines bitmaps einen zusätzlichen alpha-kanal hinzu // zum laden wird die aux bibilothek benutzt AUX_RGBImageRec *pFontImage = NULL; if((pFontImage = auxDIBImageLoad("irgendetwas.bmp")) == NULL) return false; glGenTextures(1, &m_TexFont); // id glPixelStorei(GL_UNPACK_ALIGNMENT, 1); glBindTexture(GL_TEXTURE_2D, m_TexFont); unsigned long size = pFontImage->sizeX * pFontImage->sizeY * 4; unsigned char *pData = new unsigned char[size]; for(unsigned long i = 0; i < (unsigned)pFontImage->sizeX * pFontImage->sizeY; i++) { unsigned char red, green, blue; red = pFontImage->data[(i * 3) + 0]; green = pFontImage->data[(i * 3) + 1]; blue = pFontImage->data[(i * 3) + 2]; pData[(i * 4) + 0] = red; pData[(i * 4) + 1] = green; pData[(i * 4) + 2] = blue; if(blue == 0 && green == 0 && red == 0) // schwarz als transparent pData[(i * 4) + 3] = 0; else pData[(i * 4) + 3] = 255; } gluBuild2DMipmaps( GL_TEXTURE_2D, 4, pFontImage->sizeX, pFontImage->sizeY, GL_RGBA, GL_UNSIGNED_BYTE, pData); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_NEAREST); glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
-
ja so ungefähr meins ichs
wobei ich halt noch eine zweite textur laden will (schwarz- weiß) und überall wo die schwarz ist dann die erste transprent mache... Also das ich den alphakanal aus ner anderen Textur bekomme!
Mit dem umständlichen Nehe tut meine ich das hier: http://nehe.gamedev.net/data/lessons/lesson.asp?lesson=20Aber danke schon mal
-
aber wieso willst du eine zweite laden ?
du hast doch schon alles was in deim bitmap scharz ist transparent gemacht.
jetzt musst du nur noch alpha-blending einschaltenglEnable(GL_BLEND); glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA); // tu was du nicht lassen kannst glDisable(GL_BLEND);
-
aber wenn ich zB das schwarze nicht transparent haben will? Naja, du hast eigentlich schon recht, irgend ne Farbe die den "Alphakanalknecht" macht wird sich wohl immer finden. Dann werd ichs wohl auch so machen, ist eigentlich auch einfacher und Platzsparender.
Vielen Dank für diese tolle Lösung und den Code
-
Wenn du Schwarz brauchst dann nimmst du eben RGB 0,0,1
Ich glaube kaum, das jemand den Unterschied merkt