2012-11-22 45 views
1

我想使用opengl和gl.glroate命令来旋转一个对象,但似乎没有发生任何事情,任何人都可以告诉我我要去哪里?下面是代码使用gl.glrotatef旋转一个对象

import javax.media.opengl.*; 
import javax.media.opengl.glu.GLU; 
import javax.swing.JFrame; 
import com.sun.opengl.util.Animator; 
import com.sun.opengl.util.FPSAnimator; 

public class Cube2 implements GLEventListener { 

     private float Rotate = 0.0f; 

    private static final GLU glu = new GLU(); 

    /** 
    * @param args 
    */ 
    public static void main(String[] args){ 
     JFrame frame = new JFrame("A simple JOGL demo"); 
     GLCanvas canvas = new GLCanvas(); 
     canvas.addGLEventListener(new Cube2()); 
     frame.add(canvas); 
     frame.setSize(640, 480); 

     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

     frame.setVisible(true); 

     Animator animator = new FPSAnimator(canvas, 60); 
     animator.add(canvas); 
    } 

@Override 
public void display (GLAutoDrawable glDrawable){ 
    final GL gl = glDrawable.getGL(); 
    //gl.glClear(GL.GL_COLOR_BUFFER_BIT); 
    gl.glClear(GL.GL_DEPTH_BUFFER_BIT); 
    gl.glLoadIdentity(); 
    gl.glTranslatef(0.0f, 0.0f, -7.0f); 
    gl.glRotatef(Rotate++, 1.0f, 0.0f, 0.0f); 
    gl.glRotatef(Rotate++, 0.0f, 1.0f, 0.0f); 
    gl.glRotatef(Rotate++, 0.0f, 0.0f, 1.0f); 


    gl.glBegin(GL.GL_TRIANGLES); 

    //Counter Clockwise Front Face 1 
     gl.glColor3f(0.0f, 1.0f, 0.0f); //Green 
     gl.glVertex3f (1.0f, 1.0f, 0.0f); //Top 
     gl.glVertex3f(-1.0f, 1.0f, 0.0f); // left to right  
     gl.glVertex3f (-1.0f, -1.0f, 0.0f); //left 
     gl.glVertex3f (-1.0f, -1.0f, -0.0f); //left   
     gl.glVertex3f(1.0f, -1.0f, -0.0f); //left to right  
     gl.glVertex3f (1.0f, 1.0f, -0.0f); //left 

    // Right Face 2 
     gl.glColor3f(1.0f, 0.0f, 1.0f); //Pink 
     gl.glVertex3f (1.0f, 1.0f, 0.0f);  
     gl.glVertex3f(1.0f, -1.0f, -0.0f);  
     gl.glVertex3f (1.0f, 1.0f, 1.0f);  
     gl.glVertex3f (-1.0f, -1.0f, -0.0f);   
     gl.glVertex3f(-1.0f, 1.0f, 0.0f);  
     gl.glVertex3f (-1.0f, -1.0f, -1.0f);   

    gl.glEnd(); 

} 

@Override 
public void displayChanged (GLAutoDrawable arg0, boolean arg1, boolean arg2) 
{ 
    //TODO Auto-generated method stub 
} 

@Override 
public void init(GLAutoDrawable glDrawable) 
{ 
    final GL gl = glDrawable.getGL(); 

    int width = 640; 
    int height = 480; 

    //Set the state of out new OpenGL context 
    gl.glViewport(0, 0, width, height); 
    gl.glMatrixMode(GL.GL_PROJECTION); 
    gl.glLoadIdentity(); 

    glu.gluPerspective(45.0f,(float)(width)/(float)(height),1.0f,100.0f); 
    gl.glMatrixMode(GL.GL_MODELVIEW); 
    gl.glLoadIdentity(); 

    gl.glShadeModel(GL.GL_SMOOTH);         //Enable Smooth Shading 
    gl.glClearColor(0.0f, 0.0f, 0.0f, 0.5f);      //Black Background 
    gl.glClearDepth(1.0f);           //Depth Buffer Setup 
    gl.glEnable(GL.GL_DEPTH_TEST);         //Enables Depth Testing 
    gl.glDepthFunc(GL.GL_LEQUAL);         //The Type of Depth Testing To Do 
    gl.glEnable(GL.GL_CULL_FACE);         //Start culling back faces 
    gl.glHint(GL.GL_PERSPECTIVE_CORRECTION_HINT, GL.GL_NICEST);  //Really Nice Perspective Calculations 
} 

@Override 
public void reshape (GLAutoDrawable arg0, int arg1, int arg2, int arg3, int arg4){ 
    //TODO Auto-generated method stub 
} 
} 

预先感谢您的帮助加入

animator.start()

回答

0
  1. 你应该开始;

    为了开始渲染。

  2. 您正在使用不再维护的JOGL 1。而且它不会起作用。你应该遵循Jogamp.org的教程。

  3. 您正在使用专有apis,如import com.sun.opengl.util.Animator;开始。如果你需要那些不拥有使用API​​的人的帮助,这是一个不错的选择。正如我所说的,你可以去jogamp.org获得该软件包的开源替代品。