2017-03-16 56 views
0

我想圍繞一箇中心旋轉一條線,並在java opengl中使用動畫顯示旋轉。我想讓動畫更快地發生,也就是說我想在每隔0.5秒後清除畫布。我的猜測是setSwapInterval正在做的伎倆,但它只需要一個整數作爲參數,所以我不能真正改變小於1單位的動畫時間。如何在使用Animator的特定時間間隔之後刷新opengl(Java JOGL)顯示?

這應該很簡單,但我不知道哪個參數實際上控制動畫時間間隔。

我的全局變量:

double sec_theta = 0; 

動畫製作獲取的主要方式開始:

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(); 
    } 

init方法:

@Override 
public void init(GLAutoDrawable drawable) { 
    drawable.getGL().setSwapInterval(1); 
} 

回答

0

交換是不是你認爲它是。它與緩衝區交換(回到前面)與v空白的同步有關。

您可以閱讀更多herehere

一般而言,如果您可以渲染60fps +,則需要保持它,否則關閉。

要實現的畫布,每半秒結算,你應該通過節約的開始時間手動實現它你init()

long start = System.currentTimeMillis(); 

聲明你想

long interval = 500; 

,然後在你的display()區間檢查是否需要更新:

if(System.currentTimeMillis() - start > interval) { 
    ... 
} 

Ps:你正在使用的是deprecated Opengl,你應該學習當前的OpenGL。

+0

請修復您的第一個鏈接,使用我們的API的更新Java文檔:http://jogamp.org/deployment/jogamp-next/javadoc/jogl/javadoc/ – gouessej

+0

完成後,您還可以編輯,如果你想 – elect

相關問題