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