[英]How do I refresh opengl (Java JOGL) display after a specific time interval using Animator?
我試圖繞中心旋轉一條線,並在Java Opengl中使用動畫制作器顯示旋轉。 我想使動畫發生得更快,例如,我想每隔0.5秒清除一次畫布。 我的猜測是setSwapInterval可以解決這個問題,但是它僅使用整數作為參數,因此我不能真正將動畫時間更改為少於1個單位。
這應該很簡單,但是我無法弄清楚哪個參數實際上在控制動畫時間間隔。
我的全局變量:
double sec_theta = 0;
動畫師開始使用main方法:
Animator animator = new Animator(canvas);
animator.start();
顯示方法:
@Override
public void display(GLAutoDrawable drawable) {
final GL2 gl = drawable.getGL().getGL2();
gl.glClear(GL2.GL_COLOR_BUFFER_BIT);
sec_theta -=6;
double r = .6;
double x_center = 0;
double y_center = 0;
rotate_line(r,x_center,y_center,r-.1,0,gl);
}
這是繪制完成的地方:
public void rotate_line(double r,double x_center, double y_center,double sec_x, double sec_y, GL2 gl){
double radian = Math.toRadians(sec_theta);
double new_x = sec_x*Math.cos(radian)-sec_y*Math.sin(radian);
double new_y = sec_x*Math.sin(radian)+sec_y*Math.cos(radian);
double new_x_center = x_center*Math.cos(radian)-y_center*Math.sin(radian);
double new_y_center = x_center*Math.sin(radian)+y_center*Math.cos(radian);
drawHand(new_x_center,new_y_center,new_x,new_y,gl);
}
public void drawHand(double x_center,double y_center,double end_x, double end_y, GL2 gl){
gl.glBegin (GL2.GL_LINES);
gl.glColor3f(1, 1, 1);
gl.glVertex3d(x_center,y_center, 0);
gl.glVertex3d(end_x,end_y, 0);
gl.glEnd();
gl.glFlush();
}
初始化方法:
@Override
public void init(GLAutoDrawable drawable) {
drawable.getGL().setSwapInterval(1);
}
交換不是您所想的。 它與v-blank的緩沖區交換(從后到前)同步有關。
通常,如果您可以渲染60fps +,則希望將其保持打開狀態,否則應保持關閉狀態。
要每半秒執行一次畫布清理,您應該通過在init()
保存開始時間來手動實現它
long start = System.currentTimeMillis();
聲明您想要的間隔
long interval = 500;
然后在display()
檢查是否該更新了:
if(System.currentTimeMillis() - start > interval) {
...
}
ps:您使用的是不推薦使用的Opengl ,您應該學習當前的OpenGL。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.