我有一個讓太陽系動畫的程序。該計劃吸引了太陽和幾顆軌道行星。我喜歡在背景中放置一個星雲像素圖,但我不知道該如何去做。我所嘗試過的似乎並不奏效。這是我嘗試過的。如何在openGL中繪製背景
1)使用glDrawPixels繪製像素圖。通過這種方法,我能夠繪製像素圖,但它覆蓋了太陽物體。我試圖翻譯像素圖,但也沒有工作。
2)繪製GL_QUADS作爲太陽物體後面的平面。這架飛機是一個微小的平行四邊形。
對於我所知道的這可能是完全錯誤的方法。 如果有人能指引我走向正確的方向,我將不勝感激。以下是方法#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(); }
那麼,什麼是你嘗試號碼2的問題? – kvark 2011-02-15 18:23:59