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

📄 glyphexample.java

📁 基于java的3d开发库。对坐java3d的朋友有很大的帮助。
💻 JAVA
字号:
//===========================================================================// Basic JDK classesimport java.util.ArrayList;import java.io.File;import java.io.FileOutputStream;import java.io.BufferedOutputStream;// AWT classesimport java.awt.BorderLayout;import java.awt.Dimension;import java.awt.event.MouseEvent;import java.awt.event.MouseWheelEvent;import java.awt.event.KeyEvent;import java.awt.event.MouseListener;import java.awt.event.MouseWheelListener;import java.awt.event.MouseMotionListener;import java.awt.event.KeyListener;// Swing classesimport javax.swing.JFrame;// 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;// VSDK classesimport vsdk.toolkit.common.Vector3D;import vsdk.toolkit.common.ColorRgb;import vsdk.toolkit.common.RendererConfiguration;import vsdk.toolkit.common.Matrix4x4;import vsdk.toolkit.environment.Camera;import vsdk.toolkit.environment.geometry.ParametricCurve;import vsdk.toolkit.gui.CameraController;import vsdk.toolkit.gui.CameraControllerAquynza;import vsdk.toolkit.gui.CameraControllerBlender;import vsdk.toolkit.render.awt.AwtFontReader;import vsdk.toolkit.render.jogl.JoglParametricCurveRenderer;import vsdk.toolkit.render.jogl.JoglCameraRenderer;public class GlyphExample extends JFrame implements     GLEventListener, MouseListener, MouseMotionListener, MouseWheelListener, KeyListener {    private Camera camera;    private CameraController cameraController;    private GLCanvas canvas;    private ArrayList<ParametricCurve> glyphs;    private int steps;    public GlyphExample(String fontFile) {        super("VITRAL concept test - JOGL Hello World");        canvas = new GLCanvas();        canvas.addGLEventListener(this);        canvas.addMouseListener(this);        canvas.addMouseMotionListener(this);        canvas.addKeyListener(this);        this.add(canvas, BorderLayout.CENTER);        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);        camera = new Camera();        camera.setPosition(new Vector3D(0, 0, 5));        Matrix4x4 R = new Matrix4x4();        R.eulerAnglesRotation(Math.toRadians(90), Math.toRadians(-90), 0);        camera.setRotation(R);        camera.setFov(20);        cameraController = new CameraControllerAquynza(camera);        steps = 7;        //-----------------------------------------------------------------        AwtFontReader fontReader = new AwtFontReader();        //String msg = "\u00e1\u00d1\u3055\u3042\u307d"; // ennie: \u00d1        String msg = "Hello!";        //String msg = "\u7c8b";        glyphs = new ArrayList<ParametricCurve>();        for ( int i = 0; i < msg.length(); i++ ) {            String character = msg.substring(i, i+1);            ParametricCurve curve;            curve = fontReader.extractGlyph(fontFile, character);            curve.setApproximationSteps(steps);            glyphs.add(curve);        }        //-----------------------------------------------------------------    }    public Dimension getPreferredSize() {        return new Dimension (640, 480);    }    public static void main (String[] args) {        if ( args.length != 1 ) {            System.err.println("Use java GlyphExample fontFile");            return;        }        JFrame f = new GlyphExample(args[0]);        f.pack();        f.setVisible(true);    }    private void drawObjectsGL(GL gl)    {        gl.glEnable(gl.GL_DEPTH_TEST);        gl.glLoadIdentity();        //-----------------------------------------------------------------        gl.glLineWidth((float)1.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();        //-----------------------------------------------------------------        RendererConfiguration q = new RendererConfiguration();        q.setBoundingVolume(true);        double minmax[] = new double[6];        gl.glPushMatrix();        for ( int i = 0; i < glyphs.size(); i++ ) {            ParametricCurve c = glyphs.get(i);            gl.glLineWidth((float)2.0);            JoglParametricCurveRenderer.draw(gl, c, camera,                 q, new ColorRgb(1, 1, 1));            gl.glColor3d(0.5, 0.5, 0.9);            JoglParametricCurveRenderer.drawTesselatedCurveInterior(gl, c);            minmax = c.getMinMax();            gl.glTranslated(minmax[3]-minmax[0]+0.1, 0, 0);        }        gl.glPopMatrix();        //-----------------------------------------------------------------    }    /** 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);    }       public void init(GLAutoDrawable drawable) {        GL gl = drawable.getGL();    }    /** 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);    }     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 ) {          System.exit(0);      }      else if ( e.getKeyCode() == KeyEvent.VK_1 ) {          steps--;          if ( steps < 1 ) steps = 1;          System.out.println("Steps: " + steps);          for ( int i = 0; i < glyphs.size(); i++ ) {              glyphs.get(i).setApproximationSteps(steps);          }          canvas.repaint();      }      else if ( e.getKeyCode() == KeyEvent.VK_2 ) {          steps++;          System.out.println("Steps: " + steps);          for ( int i = 0; i < glyphs.size(); i++ ) {              glyphs.get(i).setApproximationSteps(steps);          }          canvas.repaint();      }      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) {      ;  }}//===========================================================================//= EOF                                                                     =//===========================================================================

⌨️ 快捷键说明

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