//Salva attributi e matrice glPushMatrix(); glPushAttrib(GL_TEXTURE_BIT | GL_CURRENT_BIT | GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); /* However, if you want blending to occur when the primitive is texture mapped (i.e., you want parts of the texture map to allow the underlying color of the primitive to show through), then don't use OpenGL blending. Instead, you'd use glTexEnv(), and set the texture environment mode to GL_BLEND. In this case, you'd want to leave the texture environment color to its default value of (0,0,0,0). */ glBindTexture(GL_TEXTURE_2D, tex.id); // bindo la texture glDisable(GL_BLEND); // I documenti dicono di disattivare il blending glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_DECAL); // decal sembra la modalità che fa per me // Crea i quads e mappa sulla texture ... // Ripristina gli attributi e la matrice glPopAttrib(); glPopMatrix();
glGenTextures(1, &text.id); // Seleziono la texture su cui voglio lavorare glBindTexture(GL_TEXTURE_2D, text.id); // Imposto come deve essere scalata l'immagine, rispettivamente se è più grande della texture, o più piccola glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); // cheap scaling when image bigger than texture glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); // cheap scaling when image smalled than texture // 2d texture, level of detail 0 (normal), internal format (GL_RGBA), x size from image, y size from image, // border 0 (normal), rgb color data, unsigned byte data, and finally the data itself. glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, img.getSizeX(), img.getSizeY(), 0, GL_RGBA, GL_UNSIGNED_BYTE, img.getData());
devi colorare i quads quando li disegni, per quello che sono neri (non hai messo il colore )prova a mettere glColor3ub ( 255,255,255); e vedrai che leggi le scritte
Anzi io i decal te li sconsiglierei, se metti ad esempio una funzione di blend classica tipo :...glEnable(GL_BLEND);glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);e sei apposto.
GLfloat colore[4] = {1.0f, 1.0f, 1.0, 1.0f}; // Colore del testoglTexEnvfv(GL_TEXTURE_ENV, GL_TEXTURE_ENV_COLOR, colore );
/spiegazione "spannometrica" ON I decal sono degli "stickers o figurine" che appiccichi su poligoni colorati per i quali hai bisogno di vedere sia il colore dell'oggetto, che ovviamente la "figurina" incollata sopra. Pensa ad esempio ad una macchina con incollata sulla portiera una pubblicità/spiegazione "spannometrica" OFF