Использую VC++6, glut.
Задача такая: есть прямоугольник на него надо наложить текстуру (допустим: фон и на нем черным написана буква).
Проблема: Прямоугольник красится цветом фона текстуры.
BOOL CDlg::OnInitDialog()
{
...
m_QuadrObj = gluNewQuadric();
glEnable(GL_DEPTH_TEST);
glEnable(GL_TEXTURE_2D);
glPixelStorei(GL_UNPACK_ALIGNMENT,1);
m_pTextureIDs = new int[1];
glGenTextures(NUM_LETTERS,(unsigned int*) m_pTextureIDs);
if (!LoadBMP(g_strFilesNamesLetters[0], &m_imageLetters[0])) {
MessageBox("Изоб не загужено", "Ошибка", MB_OK | MB_ICONSTOP);
return FALSE;
}
glBindTexture(GL_TEXTURE_2D, m_pTextureIDs[0]);
gluBuild2DMipmaps(GL_TEXTURE_2D, GL_RGB, m_imageLetters[0].width, m_imageLetters[0].height,
GL_RGB, GL_UNSIGNED_BYTE, m_imageLetters[0].data);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, (float) GL_LINEAR);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, (float) GL_LINEAR);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, (float) GL_REPEAT);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, (float) GL_REPEAT);
glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, (float) GL_REPLACE);
...
gluQuadricTexture(m_QuadrObj, GL_TRUE);
CreateListForCube(m_nNumCube);
}
На строчку
m_pTextureIDs = new int[1];
не ругайтесь - у меня не один прямоугольник
void CDlg::CreateListForCube(int numCube)
{
glNewList(numCube, GL_COMPILE);
glEnable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D, m_pTextureIDs[0]);
glBegin(GL_QUADS);
glNormal3f(0,0,1);
glVertex3f(0,0,0);
glVertex3f(1,0,0);
glVertex3f(1,1,0);
glVertex3f(0,1,0);
glEnd();
...
glDisable(GL_TEXTURE_2D);
glEndList();
}
void CDlg::OnPaint()
{
...
glClear(GL_DEPTH_BUFFER_BIT | GL_COLOR_BUFFER_BIT);
glClearColor(0, 0, 0, 1);
glLoadIdentity();
glPushMatrix();
glColor3ub(255, 0, 255);
glTranslatef(-0.5,0.2,-7);
glRotatef(m_nAngle, 0, 1, 0);
glScalef(1, 1, 0.08);
glCallList(m_nNumCube);
glPopMatrix();
...
SwapBuffers(m_initGL.m_hDC);
...
}
Может я что-то делаю неправильно? Подскажите пожалуйста.