⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cameraswingexample.java

📁 基于java的3d开发库。对坐java3d的朋友有很大的帮助。
💻 JAVA
字号:
//===========================================================================// Basic Java classes// Awt / swing classesimport java.applet.Applet;import java.awt.BorderLayout;import java.awt.Dimension;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.KeyEvent;import java.awt.event.KeyListener;import java.awt.event.MouseEvent;import java.awt.event.MouseListener;import java.awt.event.MouseMotionListener;import java.awt.event.MouseWheelEvent;import java.awt.event.MouseWheelListener;import javax.swing.JFrame;import javax.swing.JButton;import javax.swing.JMenu;import javax.swing.JMenuBar;import javax.swing.JMenuItem;import javax.swing.JPanel;// JOGL classesimport javax.media.opengl.GL;import javax.media.opengl.GLCanvas;import javax.media.opengl.GLAutoDrawable;import javax.media.opengl.GLDrawableFactory;import javax.media.opengl.GLEventListener;// VitralSDK classesimport vsdk.toolkit.environment.Camera;import vsdk.toolkit.gui.CameraController;import vsdk.toolkit.gui.CameraControllerAquynza;import vsdk.toolkit.gui.CameraControllerBlender;import vsdk.toolkit.render.jogl.JoglCameraRenderer;import vsdk.toolkit.render.jogl.JoglRenderer;/**Note that this program is designed to work as a java application, or as ajava applet.  If current class does not extends from Applet, and `init` methodis deleted, this will continue working as a simple java application.This is a simple programme recommended for use as a template in the developmentof VitralSDK programs by incremental modification.*/public class CameraSwingExample extends Applet implements    GLEventListener,    KeyListener, MouseListener, MouseMotionListener, MouseWheelListener{//= PROGRAM PART 1/5: ATTRIBUTES ============================================    public boolean appletMode;    private Camera camera;    private CameraController cameraController;    private GLCanvas canvas;    private SimpleCorridor corridor;    private ButtonsPanel controls;    private JMenuBar menubar;//= PROGRAM PART 2/5: CONSTRUCTORS ==========================================    /**    When running this class inside a browser (in applet mode) there is no    warranty of calling this method, or calling before init. It is recommended    that real initialization be done in another `createModel` method, and    that such method be called explicity from entry point function.    */    public CameraSwingExample() {        // Empty! call `createModel` explicity from entry point function!        ;    }    /**    Real constructor    */    private void createModel()    {        camera = new Camera();        //cameraController = new CameraControllerBlender(camera);        cameraController = new CameraControllerAquynza(camera);        corridor = new SimpleCorridor();    }    private void createGUI()    {        canvas = new GLCanvas();        canvas.addGLEventListener(this);        canvas.addMouseListener(this);        canvas.addMouseMotionListener(this);        canvas.addKeyListener(this);        controls = new ButtonsPanel(this);        menubar = buildMenu();    }//= PROGRAM PART 3/5: ENTRY POINTS ==========================================    public static void main (String[] args) {        // Common VitralSDK initialization        JoglRenderer.verifyOpenGLAvailability();        CameraSwingExample instance = new CameraSwingExample();        instance.appletMode = false;        instance.createModel();        // Create application based GUI        JFrame frame;        Dimension size;        instance.createGUI();        frame = new JFrame("VITRAL concept test - Camera control example");        frame.add(instance.canvas, BorderLayout.CENTER);        frame.add(instance.controls, BorderLayout.SOUTH);        frame.setJMenuBar(instance.menubar);        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);        size = new Dimension(640, 480);        frame.setMinimumSize(size);        frame.setSize(size);        frame.setVisible(true);        instance.canvas.requestFocusInWindow();    }    public void init()    {        appletMode = true;        createModel();        setLayout(new BorderLayout());        createGUI();        add("North", menubar);        add("Center", canvas);        add("South", controls);    }//= PROGRAM PART 4/5: JOGL-OPENGL PROCEDURES ================================        private void drawObjectsGL(GL gl)    {        gl.glEnable(gl.GL_DEPTH_TEST);        gl.glLoadIdentity();        corridor.drawGL(gl);        gl.glLineWidth((float)3.0);        gl.glBegin(GL.GL_LINES);            gl.glColor3d(1, 0, 0);            gl.glVertex3d(0, 0, 0);            gl.glVertex3d(1, 0, 0);            gl.glColor3d(0, 1, 0);            gl.glVertex3d(0, 0, 0);            gl.glVertex3d(0, 1, 0);            gl.glColor3d(0, 0, 1);            gl.glVertex3d(0, 0, 0);            gl.glVertex3d(0, 0, 1);        gl.glEnd();    }    /** Called by drawable to initiate drawing */    public void display(GLAutoDrawable drawable) {        GL gl = drawable.getGL();        gl.glClearColor(0, 0, 0, 1);        gl.glClear(GL.GL_COLOR_BUFFER_BIT | GL.GL_DEPTH_BUFFER_BIT);        gl.glColor3d(1, 1, 1);        JoglCameraRenderer.activate(gl, camera);        drawObjectsGL(gl);    }       /** Not used method, but needed to instanciate GLEventListener */    public void init(GLAutoDrawable drawable) {        ;    }    /** Not used method, but needed to instanciate GLEventListener */    public void displayChanged(GLAutoDrawable drawable, boolean a, boolean b) {        ;    }        /** Called to indicate the drawing surface has been moved and/or resized */    public void reshape (GLAutoDrawable drawable,                         int x,                         int y,                         int width,                         int height) {        GL gl = drawable.getGL();        gl.glViewport(0, 0, width, height);         camera.updateViewportResize(width, height);    }   //= PART 5/5: GUI PROCEDURES ================================================    public void mouseEntered(MouseEvent e) {        canvas.requestFocusInWindow();    }    public void mouseExited(MouseEvent e) {      //System.out.println("Mouse exited");    }    public void mousePressed(MouseEvent e) {        if ( cameraController.processMousePressedEventAwt(e) ) {            canvas.repaint();        }    }    public void mouseReleased(MouseEvent e) {        if ( cameraController.processMouseReleasedEventAwt(e) ) {            canvas.repaint();        }    }    public void mouseClicked(MouseEvent e) {        if ( cameraController.processMouseClickedEventAwt(e) ) {            canvas.repaint();        }    }    public void mouseMoved(MouseEvent e) {        if ( cameraController.processMouseMovedEventAwt(e) ) {            canvas.repaint();        }    }    public void mouseDragged(MouseEvent e) {        if ( cameraController.processMouseDraggedEventAwt(e) ) {            canvas.repaint();        }    }    /**    WARNING: It is not working... check pending    */    public void mouseWheelMoved(MouseWheelEvent e) {        System.out.println(".");        if ( cameraController.processMouseWheelEventAwt(e) ) {            canvas.repaint();        }    }    public void keyPressed(KeyEvent e) {        if ( e.getKeyCode() == KeyEvent.VK_ESCAPE ) {            if ( !appletMode ) {                System.exit(0);            }        }        if ( cameraController.processKeyPressedEventAwt(e) ) {            canvas.repaint();        }    }    public void keyReleased(KeyEvent e) {        if ( cameraController.processKeyReleasedEventAwt(e) ) {            canvas.repaint();        }    }    /**    Do NOT call your controller from the `keyTyped` method, or the controller    will be invoked twice for each key. Call it only from the `keyPressed` and    `keyReleased` method    */    public void keyTyped(KeyEvent e) {        ;    }    public JMenuBar buildMenu()    {        JMenuBar menubar;        JMenu popup;        JMenuItem option;        menubar = new JMenuBar();        popup = new JMenu("File");        menubar.add(popup);        option = popup.add(new JMenuItem("Exit"));        option.addActionListener(new ActionListener() {            public void actionPerformed(ActionEvent e) {                if ( !appletMode ) {                    System.exit(0);                }            }});        popup.getPopupMenu().setLightWeightPopupEnabled(false);        return menubar;    }}class ButtonsPanel extends JPanel implements ActionListener{    private CameraSwingExample parent;    public ButtonsPanel(CameraSwingExample parent)    {        this.parent = parent;        JButton b = null;        b = new JButton("Exit");        b.addActionListener(this);        add(b);    }    public void actionPerformed(ActionEvent ev) {        String label = ev.getActionCommand();        if ( label == "Exit" ) {            if ( !parent.appletMode ) {                System.exit(1);            }        }    }}//===========================================================================//= EOF                                                                     =//===========================================================================

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -