Mam program do animowania układu słonecznego. Program rysuje słońce i kilka orbitujących planet. Lubię umieszczać w tle mapę mgławicy, ale nie wiem, jak to zrobić. To, co próbowałem, nie działa. Oto, co próbowałem.Jak narysować tło w openGL
1) Użyj programu glDrawPixels, aby narysować pixmapę. Dzięki takiemu podejściu udało mi się narysować pixmapę, ale pokryła ona obiekty słoneczne. Próbowałem przetłumaczyć pixmapę, ale to też nie zadziałało.
2) Narysuj GL_QUADS jako płaszczyznę za obiektami słonecznymi. Samolot był jak maleńki równoległobok.
Z tego, co wiem, może to być całkowicie błędne podejście. Byłbym wdzięczny, gdyby ktoś wskazał mi właściwy kierunek. Oto kod dla metody # 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(); }
Więc jaki jest problem z twoją próbą numer 2? – kvark