Re: [問題] opengl 物件與背景透明度設定問題

作者: iamstudent (stu)   2014-06-27 15:28:15
畫面會閃爍
是因為你在一次畫出時
做了不只一次的畫面刷新動作 (glutSwapBuffers)
你的initView
最後面有個glutSwapBuffers
而你的check_data
一開始先呼叫了initView
就已經更新了一次畫面
後面畫了東西之後
又呼叫一次glutSwapBuffers
所以畫面會閃就是這個原因
我的建議是這樣的
把glutSwapBuffers從initView抽出
移動到display的後方
但是整個程式的運作邏輯需要改善
現在這樣設計簡直就像麵線團一樣糾纏
你一方面用glutTimeFunc定時重畫
但是check data裡面又呼叫glutPostRedisplay
這是讓display函數在下次的mainloop會被呼叫
你這樣子非常難確定到底是mainloop呼叫display在重畫
還是glutTimeFunc的呼叫造成重畫
何不這樣設計?
把畫東西的邏輯都只放在display中
然後就只有一個地方有swap buffer
display裡面根據flag決定什麼要畫、什麼略過不畫
至於要畫什麼功能可以抽出成為易懂的函數
讓display負責呼叫畫出與管理buffer的控制
glutPostRedisplay就放在display底端
讓電腦能畫多快就多快
display裡面自己抓兩次畫出的時間差來決定更新量
不需要用到glutTimerFunc
這樣畫出的動作就只有一個迴圈負責在做
不需要弄兩個迴圈平行跑來製造混亂
作者: cklonger (22)   2014-06-27 17:50:00
非常感謝

Links booklink

Contact Us: admin [ a t ] ucptt.com