纹理贴图的干扰问题
源代碼下載 前幾天對旋轉閃屏這個問題很頭疼,網上都是些Win32的demo,我又分不清它移植到MFC上到底哪里出毛病了,今天總算找到了一篇有價值的文章,分析了它的代碼,發現自己以前寫的那個MFC里的框架基本上是對的,旋轉也是采用定時器的方式來實現的,只是在設置像素格式的時候犯了一個小錯誤,才導致了閃屏的現象,修改后就沒有這個毛病了。
但今天又發現了一個奇怪的現象:如果要畫兩個物體,第一個不用紋理貼圖,第2個要紋理貼圖,我就發現第一個的顏色會干擾到紋理貼圖的,結果兩個物體的顏色都變得很怪了,怎么能讓畫完第一個物體后,它的顏色不對第2個產生影響呢?
我想了這么一個辦法:畫完第一個物體后就:glColor3f(1.0f,1.0f,1.0f);可這樣第2個是沒有受到干擾了,但第一個又被干擾了。。。
接著向susu請教了下,她說可以在繪制每個物體前應該把當前狀態先保存到堆棧中,再等繪制完后取出原來的狀態,這樣就可以避免相互干擾了。我試了下,可效果發現和上面一樣,第2個是沒有受到干擾了,但第一個又被干擾了。。。 int COpenGLDemoView::DrawGLScene() ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?? {// Here's Where We Do All The Drawing glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); ? ?// Clear Screen And Depth Buffer glPushAttrib(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT|GL_CURRENT_BIT); glPushMatrix(); glShadeModel(GL_SMOOTH); glLoadIdentity(); ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?// Reset The Current Modelview Matrix glTranslatef(-1.5f,0.0f,-6.0f);//物體左移1.5,向內移6,相當于移動鏡頭一樣,讓物體進入鏡頭中 glRotatef(rTri,0.0f,1.0f,0.0f); glBegin(GL_TRIANGLES); ? ? ? ? ? ? ? ? ? ? ? ? ? ?// 繪制三角形 glColor3f(1.0f,0.0f,0.0f); ? ? ? ? ? ?// 紅色 glVertex3f( 0.0f, 1.0f, 0.0f); ? ? ? ? ? ?// 三角形的上頂點 (前側面) glColor3f(0.0f,1.0f,0.0f); ? ? ? ? ? ?// 綠色 glVertex3f(-1.0f,-1.0f, 1.0f); ? ? ? ? ? ?// 三角形的左下頂點 (前側面) glColor3f(0.0f,0.0f,1.0f); ? ? ? ? ? ?// 藍色 glVertex3f( 1.0f,-1.0f, 1.0f); ? ? ? ? ? ?// 三角形的右下頂點 (前側面) glColor3f(1.0f,0.0f,0.0f); ? ? ? ? ? ?// 紅色 glVertex3f( 0.0f, 1.0f, 0.0f); ? ? ? ? ? ?// 三角形的上頂點 (右側面) glColor3f(0.0f,0.0f,1.0f); ? ? ? ? ? ?// 藍色 glVertex3f( 1.0f,-1.0f, 1.0f); ? ? ? ? ? ?// 三角形的左下頂點 (右側面) glColor3f(0.0f,1.0f,0.0f); ? ? ? ? ? ?// 綠色 glVertex3f( 1.0f,-1.0f, -1.0f); ? ? ? ? ? ?// 三角形的右下頂點 (右側面) glColor3f(1.0f,0.0f,0.0f); ? ? ? ? ? ?// 紅色 glVertex3f( 0.0f, 1.0f, 0.0f); ? ? ? ? ? ?// 三角形的上頂點 (后側面) glColor3f(0.0f,1.0f,0.0f); ? ? ? ? ? ?// 綠色 glVertex3f( 1.0f,-1.0f, -1.0f); ? ? ? ? ? ?// 三角形的左下頂點 (后側面) glColor3f(0.0f,0.0f,1.0f); ? ? ? ? ? ?// 藍色 glVertex3f(-1.0f,-1.0f, -1.0f); ? ? ? ? ? ?// 三角形的右下頂點 (后側面) glColor3f(1.0f,0.0f,0.0f); ? ? ? ? ? ?// 紅色 glVertex3f( 0.0f, 1.0f, 0.0f); ? ? ? ? ? ?// 三角形的上頂點 (左側面) glColor3f(0.0f,0.0f,1.0f); ? ? ? ? ? ?// 藍色 glVertex3f(-1.0f,-1.0f,-1.0f); ? ? ? ? ? ?// 三角形的左下頂點 (左側面) glColor3f(0.0f,1.0f,0.0f); ? ? ? ? ? ?// 綠色 glVertex3f(-1.0f,-1.0f, 1.0f); ? ? ? ? ? ?// 三角形的右下頂點 (左側面 glEnd(); ? ? ? ? ? ? ? ? ? ?&n
本文轉自Phinecos(洞庭散人)博客園博客,原文鏈接:http://www.cnblogs.com/phinecos/archive/2007/08/09/849277.html,如需轉載請自行聯系原作者
但今天又發現了一個奇怪的現象:如果要畫兩個物體,第一個不用紋理貼圖,第2個要紋理貼圖,我就發現第一個的顏色會干擾到紋理貼圖的,結果兩個物體的顏色都變得很怪了,怎么能讓畫完第一個物體后,它的顏色不對第2個產生影響呢?
我想了這么一個辦法:畫完第一個物體后就:glColor3f(1.0f,1.0f,1.0f);可這樣第2個是沒有受到干擾了,但第一個又被干擾了。。。
接著向susu請教了下,她說可以在繪制每個物體前應該把當前狀態先保存到堆棧中,再等繪制完后取出原來的狀態,這樣就可以避免相互干擾了。我試了下,可效果發現和上面一樣,第2個是沒有受到干擾了,但第一個又被干擾了。。。 int COpenGLDemoView::DrawGLScene() ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?? {// Here's Where We Do All The Drawing glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); ? ?// Clear Screen And Depth Buffer glPushAttrib(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT|GL_CURRENT_BIT); glPushMatrix(); glShadeModel(GL_SMOOTH); glLoadIdentity(); ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?// Reset The Current Modelview Matrix glTranslatef(-1.5f,0.0f,-6.0f);//物體左移1.5,向內移6,相當于移動鏡頭一樣,讓物體進入鏡頭中 glRotatef(rTri,0.0f,1.0f,0.0f); glBegin(GL_TRIANGLES); ? ? ? ? ? ? ? ? ? ? ? ? ? ?// 繪制三角形 glColor3f(1.0f,0.0f,0.0f); ? ? ? ? ? ?// 紅色 glVertex3f( 0.0f, 1.0f, 0.0f); ? ? ? ? ? ?// 三角形的上頂點 (前側面) glColor3f(0.0f,1.0f,0.0f); ? ? ? ? ? ?// 綠色 glVertex3f(-1.0f,-1.0f, 1.0f); ? ? ? ? ? ?// 三角形的左下頂點 (前側面) glColor3f(0.0f,0.0f,1.0f); ? ? ? ? ? ?// 藍色 glVertex3f( 1.0f,-1.0f, 1.0f); ? ? ? ? ? ?// 三角形的右下頂點 (前側面) glColor3f(1.0f,0.0f,0.0f); ? ? ? ? ? ?// 紅色 glVertex3f( 0.0f, 1.0f, 0.0f); ? ? ? ? ? ?// 三角形的上頂點 (右側面) glColor3f(0.0f,0.0f,1.0f); ? ? ? ? ? ?// 藍色 glVertex3f( 1.0f,-1.0f, 1.0f); ? ? ? ? ? ?// 三角形的左下頂點 (右側面) glColor3f(0.0f,1.0f,0.0f); ? ? ? ? ? ?// 綠色 glVertex3f( 1.0f,-1.0f, -1.0f); ? ? ? ? ? ?// 三角形的右下頂點 (右側面) glColor3f(1.0f,0.0f,0.0f); ? ? ? ? ? ?// 紅色 glVertex3f( 0.0f, 1.0f, 0.0f); ? ? ? ? ? ?// 三角形的上頂點 (后側面) glColor3f(0.0f,1.0f,0.0f); ? ? ? ? ? ?// 綠色 glVertex3f( 1.0f,-1.0f, -1.0f); ? ? ? ? ? ?// 三角形的左下頂點 (后側面) glColor3f(0.0f,0.0f,1.0f); ? ? ? ? ? ?// 藍色 glVertex3f(-1.0f,-1.0f, -1.0f); ? ? ? ? ? ?// 三角形的右下頂點 (后側面) glColor3f(1.0f,0.0f,0.0f); ? ? ? ? ? ?// 紅色 glVertex3f( 0.0f, 1.0f, 0.0f); ? ? ? ? ? ?// 三角形的上頂點 (左側面) glColor3f(0.0f,0.0f,1.0f); ? ? ? ? ? ?// 藍色 glVertex3f(-1.0f,-1.0f,-1.0f); ? ? ? ? ? ?// 三角形的左下頂點 (左側面) glColor3f(0.0f,1.0f,0.0f); ? ? ? ? ? ?// 綠色 glVertex3f(-1.0f,-1.0f, 1.0f); ? ? ? ? ? ?// 三角形的右下頂點 (左側面 glEnd(); ? ? ? ? ? ? ? ? ? ?&n
本文轉自Phinecos(洞庭散人)博客園博客,原文鏈接:http://www.cnblogs.com/phinecos/archive/2007/08/09/849277.html,如需轉載請自行聯系原作者
總結
- 上一篇: jQuery Mobile和UI合并组新
- 下一篇: JavaScript进行UTF-8编码与