【Qt OpenGL教程】06:紋理對映
阿新 • • 發佈:2019-01-25
這次我們需要讓物件依次繞x、y、z軸旋轉,旋轉多少依賴於變數m_xRot、m_yRot、m_zRot的值。下面我們呼叫glBindTexture()函式來選擇要繫結的紋理,第2個引數表示所要繫結的紋理。當想改變紋理時,應該繫結新的紋理,要注意的是,我們不能在glBegin()和glEnd()直接繫結紋理,那樣繫結的紋理時無效的。void MyGLWidget::paintGL() //從這裡開始進行所以的繪製 { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); //清除螢幕和深度快取 glLoadIdentity(); //重置模型觀察矩陣 glTranslatef(0.0f, 0.0f, -5.0f); //移入螢幕5.0單位 glRotatef(m_xRot, 1.0f, 0.0f, 0.0f); //繞x軸旋轉 glRotatef(m_yRot, 0.0f, 1.0f, 0.0f); //繞y軸旋轉 glRotatef(m_zRot, 0.0f, 0.0f, 1.0f); //繞z軸旋轉 glBindTexture(GL_TEXTURE_2D, m_Texture); //選擇紋理 glBegin(GL_QUADS); //開始繪製立方體 glTexCoord2f(1.0f, 1.0f); glVertex3f(1.0f, 1.0f, -1.0f); //右上(頂面) glTexCoord2f(0.0f, 1.0f); glVertex3f(-1.0f, 1.0f, -1.0f); //左上(頂面) glTexCoord2f(0.0f, 0.0f); glVertex3f(-1.0f, 1.0f, 1.0f); //左下(頂面) glTexCoord2f(1.0f, 0.0f); glVertex3f(1.0f, 1.0f, 1.0f); //右下(頂面) glTexCoord2f(0.0f, 0.0f); glVertex3f(1.0f, -1.0f, 1.0f); //右上(底面) glTexCoord2f(1.0f, 0.0f); glVertex3f(-1.0f, -1.0f, 1.0f); //左上(底面) glTexCoord2f(1.0f, 1.0f); glVertex3f(-1.0f, -1.0f, -1.0f); //左下(底面) glTexCoord2f(0.0f, 1.0f); glVertex3f(1.0f, -1.0f, -1.0f); //右下(底面) glTexCoord2f(1.0f, 1.0f); glVertex3f(1.0f, 1.0f, 1.0f); //右上(前面) glTexCoord2f(0.0f, 1.0f); glVertex3f(-1.0f, 1.0f, 1.0f); //左上(前面) glTexCoord2f(0.0f, 0.0f); glVertex3f(-1.0f, -1.0f, 1.0f); //左下(前面) glTexCoord2f(1.0f, 0.0f); glVertex3f(1.0f, -1.0f, 1.0f); //右下(前面) glTexCoord2f(0.0f, 0.0f); glVertex3f(1.0f, -1.0f, -1.0f); //右上(後面) glTexCoord2f(1.0f, 0.0f); glVertex3f(-1.0f, -1.0f, -1.0f); //左上(後面) glTexCoord2f(1.0f, 1.0f); glVertex3f(-1.0f, 1.0f, -1.0f); //左下(後面) glTexCoord2f(0.0f, 1.0f); glVertex3f(1.0f, 1.0f, -1.0f); //右下(後面) glTexCoord2f(1.0f, 1.0f); glVertex3f(-1.0f, 1.0f, 1.0f); //右上(左面) glTexCoord2f(0.0f, 1.0f); glVertex3f(-1.0f, 1.0f, -1.0f); //左上(左面) glTexCoord2f(0.0f, 0.0f); glVertex3f(-1.0f, -1.0f, -1.0f); //左下(左面) glTexCoord2f(1.0f, 0.0f); glVertex3f(-1.0f, -1.0f, 1.0f); //右下(左面) glTexCoord2f(1.0f, 1.0f); glVertex3f(1.0f, 1.0f, -1.0f); //右上(右面) glTexCoord2f(0.0f, 1.0f); glVertex3f(1.0f, 1.0f, 1.0f); //左上(右面) glTexCoord2f(0.0f, 0.0f); glVertex3f(1.0f, -1.0f, 1.0f); //左下(右面) glTexCoord2f(1.0f, 0.0f); glVertex3f(1.0f, -1.0f, -1.0f); //右下(右面) glEnd(); //立方體繪製結束 m_xRot += 0.6f; //x軸旋轉 m_yRot += 0.4f; //y軸旋轉 m_zRot += 0.8f; //z軸旋轉 }