저는 중심 주위로 선을 회전시키고 자바 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);
}
첫 번째 링크를 수정하고 API의 업데이트 된 Java 설명서를 사용하십시오. http://jogamp.org/deployment/jogamp-next/javadoc/jogl/javadoc/ – gouessej
완료, 원하는 경우 편집 할 수도 있습니다. – elect