2017-03-16 8 views
0

저는 중심 주위로 선을 회전시키고 자바 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

바꾸기 당신이 생각하는 것이 아니다. 버퍼 스와핑 (back to front)과 v-blank의 동기화와 관련이 있습니다.

herehere을 더 읽을 수 있습니다.

일반적으로 60fps 이상을 렌더링 할 수 있으면 계속 켜고 그렇지 않으면 해제합니다.

는 매 30 초를 삭제 캔버스를 구현하려면, 당신이 시작 시간을 절약하여 수동으로 구현해야합니다 귀하의 init()

long start = System.currentTimeMillis(); 

는 간격이 당신의 display()에서 다음

long interval = 500; 

하고 싶은 선언 업데이트 할 시간이 맞는지 확인 :

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

Ps : 사용중인 것은 deprecated Opengl입니다. 현재 OpenGL을 배워야합니다.

+0

첫 번째 링크를 수정하고 API의 업데이트 된 Java 설명서를 사용하십시오. http://jogamp.org/deployment/jogamp-next/javadoc/jogl/javadoc/ – gouessej

+0

완료, 원하는 경우 편집 할 수도 있습니다. – elect