2016-01-28 3 views
1

Я пытаюсь переместить камеру в jogl, но мой код ничего не делает. Как вы перемещаете камеру с помощью ввода с клавиатуры? Я рисую вращающийся шестиугольник, и я хочу переместить камеру, но я не могу заставить ее работать. Это мой код:Как перемещать положение глаз камеры в JOGL?

import javax.media.opengl.*; 
import javax.media.opengl.awt.*; 
import com.sun.opengl.util.*; 
import com.sun.opengl.util.gl2.GLUT; 
import javax.media.opengl.glu.*; 

import java.awt.event.*; 
import java.awt.*; 
import javax.swing.*; 

public class Rotation2 extends JFrame implements GLEventListener, KeyListener 
{ 
    GLCanvas canvas; 
    Animator an; 

    public Rotation2() 
    { 

     canvas=new GLCanvas(); 
     an=new Animator(canvas); 
     add(canvas); 
     canvas.addGLEventListener(this); 
     canvas.addKeyListener(this); 
     setSize(600,400); 
     setVisible(true); 
     setDefaultCloseOperation(EXIT_ON_CLOSE); 
     an.start(); 

    } 
    double eyeX = 0; 
    double eyeY = 0; 
    double eyeZ = 0; 

    public void init(GLAutoDrawable drawable) 
    { 
     GL2 gl=drawable.getGL().getGL2(); 
     GLU glu = new GLU(); 
     gl.glClearColor(0.0f,0.0f,0.0f,0.0f); 
     gl.glMatrixMode(GL2.GL_PROJECTION); 
     gl.glOrtho(-300,300,-200,200,200,-200); 
     //gl.glLoadIdentity(); 
     gl.glMatrixMode(GL2.GL_MODELVIEW); 
     //glu.gluLookAt(5, 5, 5,0, 0, 0, 1, 100, 0); 
     gl.glClearDepth(1.0f);     // Set background depth to farthest 
     gl.glEnable(GL2.GL_DEPTH_TEST); // Enable depth testing for z-culling 
     gl.glDepthFunc(GL2.GL_LEQUAL); // Set the type of depth-test 
    } 
    double x=0; 

    public void display(GLAutoDrawable drawable) 
    { 
     GL2 gl=drawable.getGL().getGL2(); 
     gl.glClear(GL2.GL_COLOR_BUFFER_BIT | GL2.GL_DEPTH_BUFFER_BIT); 
     gl.glEnable(GL2.GL_DEPTH_TEST); 
     gl.glLoadIdentity(); 

     GLU glu=new GLU(); 

     //gl.glPushMatrix(); 
     gl.glScaled(2,2,2); 
     gl.glRotated(x,1,1,1); 
     x+=.05; 

     glu.gluLookAt(eyeX, eyeY, 2,0, 0, 0, 1, 100, 0); 

     gl.glColor3f(0,1f,0); 
     // front 
     gl.glBegin(GL2.GL_POLYGON); 
     gl.glVertex3d(25,50,25); 
     gl.glVertex3d(-25,50,25); 
     gl.glVertex3d(-50,0,25); 
     gl.glVertex3d(-25,-50,25); 
     gl.glVertex3d(25,-50,25); 
     gl.glVertex3d(50,0,25); 
     gl.glEnd(); 
     //left 
     gl.glColor3f(1f,1f,0); 
     gl.glBegin(GL2.GL_POLYGON); 
     gl.glVertex3d(25,50,-25); 
     gl.glVertex3d(-25,50,-25); 
     gl.glVertex3d(-50,0,-25); 
     gl.glVertex3d(-25,-50,-25); 
     gl.glVertex3d(25,-50,-25); 
     gl.glVertex3d(50,0,-25); 

     gl.glEnd(); 


     gl.glColor3f(1f,0f,0); 
     gl.glBegin(GL2.GL_POLYGON); 

     gl.glVertex3d(25,50,25); 
     gl.glVertex3d(25,50,-25); 
     gl.glVertex3d(-25,50,-25); 
     gl.glVertex3d(-25,50,25); 

     gl.glEnd(); 

     gl.glColor3f(0f,0f,1f); 
     gl.glBegin(GL2.GL_POLYGON); 

     gl.glVertex3d(-25,50,25); 
     gl.glVertex3d(-25,50,-25); 
     gl.glVertex3d(-50,0,-25); 
     gl.glVertex3d(-50,0,25); 

     gl.glEnd(); 

     gl.glColor3f(1f,1f,1f); 
     gl.glBegin(GL2.GL_POLYGON); 

     gl.glVertex3d(-50,0,25); 
     gl.glVertex3d(-50,0,-25); 
     gl.glVertex3d(-25,-50,-25); 
     gl.glVertex3d(-25,-50,25); 

     gl.glEnd(); 

     gl.glColor3f(0,1f,1f); 

     gl.glBegin(GL2.GL_POLYGON); 

     gl.glVertex3d(-25,-50,25); 
     gl.glVertex3d(-25,-50,-25); 
     gl.glVertex3d(25,-50,-25); 
     gl.glVertex3d(25,-50,25); 
     gl.glEnd(); 

     gl.glColor3f(1,0f,1f); 

     gl.glBegin(GL2.GL_POLYGON); 
     gl.glVertex3d(25,-50,25); 
     gl.glVertex3d(25,-50,-25); 
     gl.glVertex3d(50,0,-25); 
     gl.glVertex3d(50,0,25); 

     gl.glEnd(); 

     gl.glColor3f(.2f,1f,.2f); 

     gl.glBegin(GL2.GL_POLYGON); 

     gl.glVertex3d(50,0,25); 
     gl.glVertex3d(50,0,-25); 
     gl.glVertex3d(25,50,-25); 
     gl.glVertex3d(25,50,25); 

     gl.glEnd(); 
     //gl.glPopMatrix(); 


    } 

    public void reshape(GLAutoDrawable drawable,int x,int y,int width,int height) 
    {} 
    public void dispose(GLAutoDrawable drawable) 
    {} 


    public static void main(String[] ar) 
    { 

     new Rotation2(); 
    } 

    @Override 
    public void keyTyped(KeyEvent e) { 
     if (e.getKeyCode() == KeyEvent.VK_X) { 
      eyeX++; 
     } 
     else if (e.getKeyCode() == KeyEvent.VK_Y) { 
      eyeY++; 
     } 
     else if(e.getKeyCode() == KeyEvent.VK_Z) { 
      eyeZ++; 
     } 
     else { 

     } 
    } 

    @Override 
    public void keyPressed(KeyEvent e) { 

    } 

    @Override 
    public void keyReleased(KeyEvent e) { 

    } 
} 

ответ

1

это устаревший opengl, забудьте об этом.

Вы также используете очень старую JOGL, обновить его, перейдите на jogamp.org под «Строит/Скачать» нажмите на «молнии», а затем загрузить jogamp-all-platforms.7z извлечь его и установить JOGL, как описано here

Отнесите Hello Triangle ,

Он использует уже в keyListener, просто скопируйте код, который вы написали для keyTyped и вставить его под keyPressed (вы должны использовать jogamp KeyListener, что вы используете в вашем образце вместо этого Java AWT один).

Сообщите нам, если у вас есть какие-либо проблемы:

+0

У меня возникли проблемы с настройкой библиотеки JOGL в Netbeans. Я загрузил zip-файл и извлек его на свой диск C и добавил библиотеку в Netbeans, но у меня не существует ошибки почти для каждого импорта. – Joey

+0

И еще одна проблема заключается в том, что мне нужно использовать версию, которую я уже использую из-за совместимости с кодом, потому что я не уверен, как это будет работать с моими текстурами. – Joey

+0

Вы получаете ошибки при импорте, потому что объект 'GL' был перемещен,' javax.media.opengl' - это старое местоположение. Не беспокойтесь о текстурах, вы можете использовать [jgli] (https://github.com/elect86/jgli) для правильной обработки всех возможных текстур. Какие текстуры у вас есть (т. Е. Форматы)? – elect

Смежные вопросы