2012-09-26 44 views
0

我正在研究一個簡單的OpenGL應用程序,該應用程序允許用戶通過單擊並拖動到左側(使其不太強烈)或右側(更強烈)來調整簡單窗口的背景顏色。當拖動到右邊,例如,我有這樣的事情:當您使用負面參數調用glClearColor時會發生什麼?

intensity += 0.0001*x; //where x is the current mouse location 

...到左邊,另一種方式:

intensity -= 0.0001*x; 

intensity是被傳遞給了全局靜態GLfloat glClearColor在顯示功能中,多次調用。當用戶在向右拖動時增強顏色時,此策略可以很好地工作,但當向左拖動時在某一點後會變得模糊:當我拖動時顏色變得不那麼強烈,並且應該返回到黑色,但是隨後加強回到原始的顏色。

我認爲問題在於當我拖得太遠時,應該在0和1之間的強度變爲負值,因此glClearColor只是通過將符號更改爲正值(?)來解決問題。如果是這樣的話,我怎麼能強制傳遞給glClearColor的值保持在適當的範圍內?我試圖通過確保來解決這個問題,目前的強度不會成爲,如果它已經太低就不會發生負/調整,但它似乎沒有工作:

if(x <= xPrev && intensity >= (.0001*x)) //moving left to de-intensify color 
    intensity -= 0.0001*x; 

...我是第這樣做是不正確的,或者是glClearColor處理負值與我預期的不同?

另一個有趣的問題是,我的「強度」調整似乎只適用於r,g和/或b值(即,我將「強度」作爲glClearColor中的一個來使用。值沒有工作......不過,是不是應該改變顏色強度?

+0

「*我該如何強制傳遞給glClearColor的值保持在適當的範圍內?*」您......您不知道如何限制浮點值?你爲什麼不嘗試這樣做,並告訴我們這是否能解決你的問題。 –

回答

1

這聽起來有點像hysteresis問題。目前尚不清楚事件如何接收,或者什麼座標系x中。也許下降一個'anchor'(xStart),當按下按鈕時,處理所有後續值,同時拖動該值作爲該值的偏移量。用於窗口和事件的工具包/庫?如果從控制檯啓動,可能會添加一個跟蹤陳述如:

fprintf(stderr, "%.8e\n", x);

,看是否x值對應於你希望每一幀的內容。

glClearColor將值限制爲[0, 1],所以它可能不是問題。也許痕跡intensity將是有用的?

+1

「* glClearColor將值限制爲[0,1] *」[不,它不會](http://www.opengl.org/wiki/GLAPI/glClearColor)(我*真的*希望OpenGL.org會採取放下那些舊的,過時的和危險的小車頁面)。從4.3開始,'glClearColor'需要'GLfloat's,但是在此之前,規範明確指出如果清除標準化的整數緩衝區,則顏色僅被*鉗位。 –

+0

有趣。我從來沒有遇到過將glClearColor傳遞給負值的情況。 OTOH,'glClearColor'不再被'GLclampf'指定。 –

+0

無論glClearColor是否夾住任何東西,我想知道它對我的值做了什麼。我可以用輸出做一些測試,但是我希望gl在線資源對此更清楚。我正在使用GLUT。 – nicole

相關問題