簡體   English   中英

在特定時間間隔后,如何使用Animator刷新opengl(Java JOGL)顯示?

[英]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.

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