SOGO論壇
標題:
glCallList()函數在C++類別上發生"殘留影像"問題
[列印本頁]
作者:
imaging79
時間:
2011-11-11 21:32:22
標題:
glCallList()函數在C++類別上發生"殘留影像"問題
我寫了一個程式,架構很大,我大概說明,
第一個檔案 ref class 裡面有以下函式
bean = glGenLists(1);
glNewList(bean, GL_COMPILE);
glPushMatrix();
glColor3f(0, 0.2, 0.2);
glutSolidSphere(road_width * 0.025,20,20);
glPopMatrix();
glEndList();
這是用來初始list用的,另外同一class有函式
{
glPushMatrix();
for(int i = 0; i < map->return_bean_total_number(); i++)
{
//if(!map->check_bean_eaten(i))
{
glPushMatrix();
if(!map->check_bean_eaten(i))
glTranslatef(map->return_bean_x(i), 1,
map->return_bean_z(i));
else
glTranslatef(map->return_bean_x(i), 3,
map->return_bean_z(i));
glCallList(bean);
glPopMatrix();
}
}
glPopMatrix();
}
每當符合條件就把list的東西改畫到y=3平面上(一開始是畫很多個list的東西都在y=1 平面)
以上這個class是另一個class的data member並使用以上函式
但是當後者的 class render 到螢幕上時,符合條件的時候的確在有把list改畫到y=3,
但是本來在y=1平面上的東西沒有畫卻"大部分"還留在畫面(少部分如預期不見了)...,這是為什麼???
相關的碼放在同一個class直接render(不透過class)y=1平面的東西不會殘留在畫面,
判別式一定沒錯,因為實驗過當符合條件重畫到同一個位置並更改顏色是正確覆蓋的
作者:
alphi
時間:
2011-11-11 21:59:22
標題:
l
本帖最後由 alphi 於 2011-11-11 22:11 編輯
根據你的描述,原本同在Class內的函式可以正常.但你呼叫另一個物件就會造成影像殘留
請問你的物件是宣告何種方式以及呼叫方式.如果是靜態物件跟全域變數一樣.這樣你所儲存的資料有可能保留上一次
另外再呼叫其函式有坐其同步或者redraw動作嗎.或許是您呼叫的Library 並沒有去執行此動作 而造成影響殘留.
看你的部分程式碼應該是使用OpenGL.應該是不會造成此問題才是.
建議你可以把你呼叫的物件中 將你使用的LIST 印出來或者你有Watch windows去做debug trace 就可以知道是資料問題還是其他問題造成
作者:
imaging79
時間:
2011-11-12 09:27:50
找出呼叫次數了,看那數字應該不是殘影問題,在其他地方的遞迴中多了幾次造成
謝謝妳
歡迎光臨 SOGO論壇 (https://oursogo.com/)
Powered by OURSOGO.COM