Tengo un programa para animar el sistema solar. El programa dibuja el sol y algunos planetas en órbita. Me gusta poner un mapa de puntos de la nebulosa en el fondo, pero no sé cómo hacerlo. Lo que he intentado no parece funcionar. Esto es lo que he intentado.Cómo dibujar fondo en openGL
1) Use glDrawPixels para dibujar pixmap. Con este enfoque, pude dibujar el mapa de píxeles, pero cubría los objetos solares. Traté de traducir el mapa de puntos pero tampoco funcionó.
2) Dibuje un GL_QUADS como plano detrás de los objetos solares. El avión estaba arriba como un pequeño paralelogramo.
Por lo que sé, este podría ser un enfoque totalmente equivocado. Agradecería que alguien me señale la dirección correcta. Aquí está el código para el método # 1.
void universe::createObj() { QPixmap map ("hst_orion_nebula.jpg"); glTexImage2D (GL_TEXTURE_2D,0, GL_LUMINANCE, map.width(), map.height(), 0, GL_BGRA,GL_UNSIGNED_BYTE, map.convertToImage().bits()); callId = glGenLists(itemId::next()); glNewList(callId, GL_COMPILE); glDrawPixels (map.width(), map.height(), GL_RGBA, GL_UNSIGNED_BYTE, map.convertToImage().bits()); glEnable (GL_TEXTURE_2D); glEndList(); } void universe::draw() { glPushMatrix(); glPushAttrib (GL_COLOR_BUFFER_BIT | GL_LIGHTING_BIT); glCallList (callId); glPopMatrix(); glPopAttrib(); } ///////////////////////////////// void sun::createObj() { QPixmap map ("sunmap.jpg"); glGenTextures (10, canvas::_instance->_texture); glBindTexture(GL_TEXTURE_2D, canvas::_instance->_texture[0]); glTexImage2D(GL_TEXTURE_2D,0, GL_LUMINANCE, map.width(), map.height(), 0, GL_BGRA,GL_UNSIGNED_BYTE, map.convertToImage().bits()); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); callId = glGenLists(itemId::next()); glNewList(callId, GL_COMPILE); GLUquadricObj *sphere_quadric = gluNewQuadric(); gluQuadricTexture(sphere_quadric, GL_TRUE); gluQuadricDrawStyle(sphere_quadric, (GLenum)GLU_SMOOTH); gluSphere(sphere_quadric, 25, 36, 36); glEnable (GL_TEXTURE_2D); glEndList(); } void sun::draw() { glEnable(GL_LIGHTING); glPushMatrix(); glPushAttrib (GL_COLOR_BUFFER_BIT | GL_LIGHTING_BIT); GLfloat color1[4] = {1, 0.50, .0, 1 }; glRotated (_xangle, 1, 0, 0); glRotated (_yangle, 0, 1, 0); glRotated (_zangle, 0, 0, 1); glBindTexture(GL_TEXTURE_2D, canvas::_instance->_texture[0]); GLfloat shine[1] = {128}; glMaterialfv(GL_FRONT_AND_BACK, GL_EMISSION, color1); glMaterialfv(GL_FRONT_AND_BACK, GL_SHININESS, shine); glCallList (callId); glPopMatrix(); glPopAttrib(); }
Entonces, ¿cuál es el problema con el número de su intento 2? – kvark