0
我剛剛在JOGL中寫了一個簡單的動畫:一個6色立方體圍繞y軸旋轉。但似乎我的動畫有一個小小的速度解決方法:有時它會加速,有時會減慢,儘管我只是用每次顯示調用時遞增的浮點變量(我的代碼如下)調用glRotate()。JOGL:我的立方體旋轉速度不規則
- 我的處理器是奔騰雙核T3400
- 我的操作系統是Xubuntu的11.04 32位
- 我的顯卡是ATI的Radeon HD4330,我已經安裝了最新的專有驅動:11.6(下載AMD上網站,而不是在ubuntu軟件經理)
在Eclipse EDI(我使用靛藍3.7.0),這是多麼我已經把我的用戶庫:
- 我已經下載了JOGL 2.0 beta 23(來自2011年3月03日),用於i586 linux
- 在用戶庫中,我導入了以下jar包:newt.all.jar,nativewindow.all.jar,jogl.all。罐子,gluegen-rt.jar中
- 所有進口罐子的鏈接到未經壓縮的檔案JOGL的lib子文件夾:在哪裏都是* .so文件
這裏我三類。
ArcballExperiment.java
package com.gmail.bernabe.laurent.jogl.arcball_experiment;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import javax.media.opengl.awt.GLCanvas;
import javax.swing.JFrame;
import com.jogamp.opengl.util.Animator;
public class ArcBallExperiment extends JFrame {
public ArcBallExperiment(){
setTitle("ArcBall Experimentation");
setSize(500, 500);
setLocationRelativeTo(null);
GLCanvas glCanvas = new GLCanvas();
TheGLEventListener glEventListener = new TheGLEventListener();
glCanvas.addGLEventListener(glEventListener);
add(glCanvas);
final Animator animator = new Animator(glCanvas);
addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
animator.stop();
System.exit(0);
}
});
animator.start();
}
public static void main(String[] args) {
new ArcBallExperiment().setVisible(true);
}
private static final long serialVersionUID = 1L;
}
Cube.java:
package com.gmail.bernabe.laurent.jogl.arcball_experiment;
import javax.media.opengl.GL2;
public class Cube {
/**
* Draws a cube in a GL2 context
* @param gl - GL2 - GL2 context
*/
public static void draw(GL2 gl){
gl.glBegin(GL2.GL_QUADS);
// front : blue
gl.glColor3f(0.0f, 0.0f, 1.0f);
gl.glVertex3f(-0.5f, +0.5f, +0.5f);
gl.glVertex3f(-0.5f, -0.5f, +0.5f);
gl.glVertex3f(+0.5f, -0.5f, +0.5f);
gl.glVertex3f(+0.5f, +0.5f, +0.5f);
// back : green
gl.glColor3f(0.0f, 1.0f, 0.0f);
gl.glVertex3f(+0.5f, -0.5f, -0.5f);
gl.glVertex3f(+0.5f, +0.5f, -0.5f);
gl.glVertex3f(-0.5f, +0.5f, -0.5f);
gl.glVertex3f(-0.5f, -0.5f, -0.5f);
// left : red
gl.glColor3f(1.0f, 0.0f, 0.0f);
gl.glVertex3f(-0.5f, +0.5f, +0.5f);
gl.glVertex3f(-0.5f, +0.5f, -0.5f);
gl.glVertex3f(-0.5f, -0.5f, -0.5f);
gl.glVertex3f(-0.5f, -0.5f, +0.5f);
// right : orange
gl.glColor3f(1.0f, 0.4f, 0.0f);
gl.glVertex3f(+0.5f, +0.5f, -0.5f);
gl.glVertex3f(+0.5f, +0.5f, +0.5f);
gl.glVertex3f(+0.5f, -0.5f, +0.5f);
gl.glVertex3f(+0.5f, -0.5f, -0.5f);
// top : white
gl.glColor3f(1.0f, 1.0f, 1.0f);
gl.glVertex3f(+0.5f, +0.5f, +0.5f);
gl.glVertex3f(-0.5f, +0.5f, +0.5f);
gl.glVertex3f(-0.5f, +0.5f, -0.5f);
gl.glVertex3f(+0.5f, +0.5f, -0.5f);
// bottom : yellow
gl.glColor3f(1.0f, 1.0f, 0.0f);
gl.glVertex3f(+0.5f, -0.5f, +0.5f);
gl.glVertex3f(+0.5f, -0.5f, -0.5f);
gl.glVertex3f(-0.5f, -0.5f, -0.5f);
gl.glVertex3f(-0.5f, -0.5f, +0.5f);
gl.glEnd();
}
}
TheGLEventListener.java:
package com.gmail.bernabe.laurent.jogl.arcball_experiment;
import javax.media.opengl.GL2;
import javax.media.opengl.GLAutoDrawable;
import javax.media.opengl.GLEventListener;
import javax.media.opengl.glu.gl2.GLUgl2;
public class TheGLEventListener implements GLEventListener {
@Override
public void display(GLAutoDrawable drawable) {
GL2 gl = drawable.getGL().getGL2();
gl.glClear(GL2.GL_COLOR_BUFFER_BIT | GL2.GL_DEPTH_BUFFER_BIT);
gl.glLoadIdentity();
glu.gluLookAt(
0f, 0f, 3f,
0f, 0f, 0f,
0f, 1f, 0f
);
gl.glRotatef(rotationAngle, 0f, 1f, 0f);
Cube.draw(gl);
rotationAngle += 0.3f;
if (rotationAngle >= 360f)
rotationAngle %= 360f;
}
@Override
public void dispose(GLAutoDrawable drawable) {
// TODO Auto-generated method stub
}
@Override
public void init(GLAutoDrawable drawable) {
GL2 gl = drawable.getGL().getGL2();
gl.glEnable(GL2.GL_DEPTH_TEST);
gl.glDepthFunc(GL2.GL_LEQUAL);
gl.glClearDepthf(1.0f);
}
@Override
public void reshape(GLAutoDrawable drawable, int x, int y, int width,
int height) {
GL2 gl = drawable.getGL().getGL2();
gl.glViewport(x, y, width, height);
gl.glMatrixMode(GL2.GL_PROJECTION);
gl.glLoadIdentity();
glu.gluPerspective(60.0f, (float) width/height, 1f, 10f);
gl.glMatrixMode(GL2.GL_MODELVIEW);
}
private GLUgl2 glu = new GLUgl2();
private float rotationAngle = 0f;
}
我想可能是因爲我在導入不兼容的罐子用戶庫爲我的JOGL eclipse項目,但我不知道。
在此先感謝
(標題軌跡球實驗似乎inapropriated,這是正確的:這個立方體旋轉是中庸之道,我再次想起之前去軌跡球實施JOGL編程階段。)
最後,似乎問題可以通過強制FPS值來解決:我換成動畫由FPSAnimator =>的立方體轉動的不是「車」的任何更多。 – loloof64
不錯的作品Laurent BERNABE。你能否自己發佈問題的答案,然後接受答案,以便我們能夠解決這個問題?另外,如果他們解決了您的問題,則需要接受以前問題的答案。 – Zecas