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