簡體   English   中英

打印某些內容后如何在OpenGL中刷新屏幕?

[英]How to refresh the screen in OpenGL after something is printed?

我有幾個if語句,如果其中一個是正確的,它將在屏幕上打印一個字符。

char d = 'a';
char c = 'b';

if(A == TRUE) //see comments below
{
Print(200,200,d);
}

if(B == TRUE)
{
Print(200,200,c);
}

void Print(int x, int y, char u)
{
glRasterPos2f(x,y);
glutBitmapCharacter(GLUT_BITMAP_HELVETICA_18, u);
}

問題是,如果A為true,則它將在屏幕上正確打印“ a”,但是如果之后B為true,而A再也沒有,則當字符“ a”仍在屏幕上時,它將在屏幕上打印“ b”。 我該如何解決,以便屏幕上只有一個字符。 任何幫助,將不勝感激。

非常感謝datenwolf。 最重要的是將glutPostRedisplay放置在正確的位置。 我將其放在我的無效Print(..)函數的末尾。 我只是看了一下應該放置的位置,對我來說現在可以工作了(這只是很小的調整)。

OpenGL的設計基於以下前提:如果需要更改,則重繪while窗口。 通常,所有繪圖操作都應僅通過中央顯示功能完成。 應該通過准備要繪制的事物列表來處理需要在屏幕上可見的內容中反映的更改,然后發出完整的重繪事件。

更新資料

其實你有一個完全不同的問題

在語句if(A = TRUE)中,發生了兩件事:

  • A分配了值TRUE

  • 對該賦值的結果(為TRUE)進行了真實性測試,因此它將始終通過。

if(B = TRUE)

正確的運算符是== (連續兩個等號)。 對於大多數編譯器,您可以啟用警告並將其轉換為錯誤,分支語句中不允許進行分配。 一種風格上的方法是將相等性測試寫為

if( TRUE == A )

這樣可以避免像您這樣的事故。 但是,根據您的情況,您可以簡單地編寫

if( A )

根本沒有任何比較運算符。 我強烈建議您這樣做。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM