OpenGL三維顯示中紋理閃爍和顏色跳變的問題

問題以下;:
一、如今有兩塊區域紋理貼圖,這兩塊區域有部分是重疊在一塊兒的,這個重疊在一塊兒的紋理會閃爍,各位高手有沒有解決的辦法?

二、程序中採用glColor3f函數設置了直線和平面的顏色。可是發現進行視角變換時,這些設置的顏色會發生跳變,好比正確的顏色是藍色,可是進行視角變換後,這些直線和平面的顏色發生了變化。暫時沒有找出緣由,不知道是否是跟紋理的設置有關係?
之前有個帖子「在opengl中用紋理貼圖時,是否對場景中其餘部分的顏色會有影響」
http://community.csdn.net/Expert/TopicView3.asp?id=4565550
對這個問題也有所闡述。java

更多0分享到:設計模式

相關主題推薦: opengl 三維函數

相關帖子推薦:post

對我有用[0] 丟個板磚[0] 引用 | 舉報 管理

回覆次數:12

#1 得分:0回覆於: 2006-07-05 10:17:06

我想第二個問題多半是參數設置的問題。不知道有沒有人碰到過相似的問題,解決思路是什麼?找了幾天也沒有找到緣由,鬱悶。

社區問答第5期:秦小波 設計模式之禪

對我有用[0] 丟個板磚[0] 引用 | 舉報 管理

#2 得分:0回覆於: 2006-07-05 10:37:36

一、最好是消除重疊部分,經過改變紋理座標;
二、由於視角的變化,形成直線和麪的上下和先後的關係發生變化形成的,直線和麪應該在空間上分離開來。

CSDN投訴事項說明

對我有用[0] 丟個板磚[0] 引用 | 舉報 管理

#3 得分:0回覆於: 2006-07-05 15:39:02

在程序中,若是要消除重疊部分,須要進行大量的數據預處理工做。正是基於此,才尋求一種能不能不消除重疊,可以解決閃爍的方案。

對我有用[0] 丟個板磚[0] 引用 | 舉報 管理

#4 得分:0回覆於: 2006-07-05 15:54:34

第二個問題我描述上存在問題,舉例說明以下:
glPushMatrix();

glDisable(GL_BLEND );
glColor3f(0.3f,0.3f,0.5f);

glPolygonMode(GL_FRONT,GL_FILL);

glBegin(GL_QUADS);
          glVertex3f(v1.m_x,v1.m_y,v1.m_z);
          glVertex3f(v2.m_x,v2.m_y,v2.m_z);
          glVertex3f(v3.m_x,v3.m_y,v3.m_z);
          glVertex3f(v4.m_x,v4.m_y,v4.m_z);

glEnd();  

glPopMatrix();
我但願達到這種效果:經過上述代碼繪製的平面永遠保持一種顏色(0.3f,0.3f,0.5f),而無論矩陣如何的變換。可是如今發現的問題是,用戶通過一些操做後,該平面的顏色常常沒有規律的跳變,沒有保持預期的顏色。

對我有用[0] 丟個板磚[0] 引用 | 舉報 管理

#5 得分:0回覆於: 2006-07-05 15:56:42

期待syy64(太平洋)兄和各位達人能給出一點意見,幫我指出一條明路。

對我有用[0] 丟個板磚[0] 引用 | 舉報 管理

#6 得分:0回覆於: 2006-07-05 16:06:08

glPolygonMode(GL_FRONT,GL_FILL);
去掉這句試試。

對我有用[0] 丟個板磚[0] 引用 | 舉報 管理

#7 得分:0回覆於: 2006-07-05 17:14:33

去掉glPolygonMode(GL_FRONT,GL_FILL),顏色不發生跳變了,可是顏色不是指定的顏色。
好比
glPushMatrix();

glDisable(GL_BLEND );
glColor3f(1.0f,0f,0f); //但願是紅色

glBegin(GL_QUADS);
glVertex3f(v1.m_x,v1.m_y,v1.m_z);
glVertex3f(v2.m_x,v2.m_y,v2.m_z);
glVertex3f(v3.m_x,v3.m_y,v3.m_z);
glVertex3f(v4.m_x,v4.m_y,v4.m_z);

glEnd(); 

可是glColor3f沒有起做用,還是藍色,這多是什麼緣由了?

對我有用[0] 丟個板磚[0] 引用 | 舉報 管理

#8 得分:0回覆於: 2006-07-05 17:29:53

按個人理解,在繪製一個幾何圖元,例如直線或者平面,只要使用glColor3f函數設置了顏色,當前顏色應該就是glColor3f函數設置的顏色。我在繪製每一個幾何圖元,都採用了glColor3f函數進行顏色設置,設置的顏色都不相同,可是如今顏色發現都是同樣的,沒有按照預期的顏色進行分配。
不知道緣由?

對我有用[0] 丟個板磚[0] 引用 | 舉報 管理

#9 得分:0回覆於: 2006-07-05 18:19:48

第一個問題,最好把紋理座標設置成同一個點只有一個紋理覆蓋,否則渲染時可能出現問題

第二個問題
你是否是開啓光照了?
材質的漫反射色和環境色設置是藍色?若是開啓光照並且沒有使用函數glColorMaterial,沒開啓GL_COLOR_MATERIAL,glColor設置的顏色將不會影響片元的顏色;
還有光源的設置是怎樣的,光源是否是隨視點變化的,若是是,在不一樣的視點光照影響可能不同,使用平滑着色後偏遠顏色也不同?

對我有用[0] 丟個板磚[0] 引用 | 舉報 管理

#10 得分:0回覆於: 2006-07-05 22:36:12

第二個問題已經解決了,是紋理的影響,在繪製沒有紋理的圖元,應該 glDisable(GL_TEXTURE_2D);
繪製結束時,在打開。
第一個問題,我知道最好紋理不用重複。可是重複的狀況沒有辦法解決,能不能解決或者減輕紋理閃爍的問題了?

對我有用[0] 丟個板磚[0] 引用 | 舉報 管理

#11 得分:0回覆於: 2006-07-06 16:04:12


glEnable(GL_BLEND);
glBlendFunc(GL_SRC_COLOR,GL_ONE_MINUS_SRC_COLOR);

繪製紋理

glDisable(GL_BLEND);

你用這個試試,應該可讓你的紋理重合的部分融合

對我有用[0] 丟個板磚[0] 引用 | 舉報 管理

#12 得分:0回覆於: 2006-07-11 13:04:55

樓上corinna(天使)的方法,得到的是半透明效果.在半透明效果中,紋理重疊的地方仍然出現閃爍.

相關文章
相關標籤/搜索