📄 swingcanvas.java
字号:
//===========================================================================// Awt / swing classesimport java.awt.Graphics; // Platform specific elementsimport java.awt.Rectangle;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.JPanel;//import java.awt.event.KeyEvent;// VitralSDK classesimport vsdk.toolkit.common.Matrix4x4; // Model elementsimport vsdk.toolkit.common.ColorRgb;import vsdk.toolkit.common.Vector3D;import vsdk.toolkit.common.RendererConfiguration;import vsdk.toolkit.environment.Camera;import vsdk.toolkit.environment.Light;import vsdk.toolkit.environment.geometry.Box;import vsdk.toolkit.environment.geometry.Sphere;import vsdk.toolkit.environment.scene.SimpleBody;import vsdk.toolkit.environment.scene.SimpleScene;import vsdk.toolkit.environment.SimpleBackground;import vsdk.toolkit.media.Calligraphic2DBuffer; // I/O artifactsimport vsdk.toolkit.media.RGBImage;import vsdk.toolkit.media.RGBPixel;import vsdk.toolkit.render.awt.AwtRGBImageRenderer; // View elementsimport vsdk.toolkit.render.awt.AwtCalligraphic2DBufferRenderer;import vsdk.toolkit.render.WireframeRenderer; // Processing elementsimport vsdk.toolkit.render.Raytracer;import vsdk.toolkit.gui.AwtSystem; // Controller elementsimport vsdk.toolkit.gui.CameraController;import vsdk.toolkit.gui.CameraControllerAquynza;import vsdk.toolkit.gui.KeyEvent;import vsdk.toolkit.gui.ProgressMonitorConsole;public class SwingCanvas extends JPanel implements KeyListener, MouseListener, MouseMotionListener, MouseWheelListener{ // Platform specific elements private boolean appletMode; // Model elements private Camera camera; private SimpleScene scene; private RGBImage img; private Calligraphic2DBuffer lineSet; private CameraController cameraController; // Control elements int renderingMode; public SwingCanvas(boolean appletMode) { this.appletMode = appletMode; addMouseListener(this); addMouseMotionListener(this); addMouseWheelListener(this); addKeyListener(this); //----------------------------------------------------------------- renderingMode = 1; createModel(); } private void createModel() { //----------------------------------------------------------------- Matrix4x4 R = new Matrix4x4(); camera = new Camera(); camera.setPosition(new Vector3D(7, -4, 4)); R.eulerAnglesRotation(Math.toRadians(140), Math.toRadians(-30), 0); camera.setNearPlaneDistance(1); camera.setFarPlaneDistance(100); camera.setRotation(R); //----------------------------------------------------------------- SimpleBackground background; Light light; background = new SimpleBackground(); background.setColor(0.5, 0.5, 0.9); light = new Light(Light.POINT, new Vector3D(5, -5, 5), new ColorRgb(1, 1, 1)); scene = new SimpleScene(); scene.addBackground(background); scene.addLight(light); //----------------------------------------------------------------- SimpleBody b; Box box; Sphere sphere; b = new SimpleBody(); box = new Box(4, 4, 4); b.setGeometry(box); b.setPosition(new Vector3D(0, 0, 0)); scene.addBody(b); b = new SimpleBody(); sphere = new Sphere(2); b.setGeometry(sphere); b.setPosition(new Vector3D(0, 0, 0)); scene.addBody(b); //----------------------------------------------------------------- cameraController = new CameraControllerAquynza(camera); lineSet = new Calligraphic2DBuffer(); img = new RGBImage(); } public void paint(Graphics g) { //- (1/4): Platform specific frame initialization ----------------- super.paint(g); Rectangle r = getBounds(); int width = r.width; int height = r.height; //- (2/4): Frame initialization ----------------------------------- camera.updateViewportResize(width, height); //- (3/4): Visualization process ---------------------------------- if ( renderingMode == 3 ) { ProgressMonitorConsole reporter = new ProgressMonitorConsole(); RendererConfiguration q = new RendererConfiguration(); Raytracer visualizationEngine = new Raytracer(); long initialTime = System.currentTimeMillis(); img.init(width, height); visualizationEngine.execute(img, q, scene.getSimpleBodies(), scene.getLights(), scene.getBackgrounds().get(0), camera, reporter, null); long finalTime = System.currentTimeMillis(); System.out.println("Image generated in " + (finalTime-initialTime) + " miliseconds."); AwtRGBImageRenderer.draw(g, img, 0, 0); } else if ( renderingMode == 2 ) { WireframeRenderer.execute( lineSet, scene.getSimpleBodies(), camera); img.init(width, height); img.createTestPattern(); lineSet.exportRgbImage(img); AwtRGBImageRenderer.draw(g, img, 0, 0); } else if ( renderingMode == 1 ) { WireframeRenderer.execute( lineSet, scene.getSimpleBodies(), camera); AwtCalligraphic2DBufferRenderer.draw( g, lineSet, 0, 0, width, height); } //- (4/4): End of frame ------------------------------------------- lineSet.init(); } public void keyPressed(java.awt.event.KeyEvent e) { KeyEvent vsdke = AwtSystem.awt2vsdkEvent(e); Vector3D p; if ( vsdke.keycode == KeyEvent.KEY_ESC ) { if ( !appletMode ) { System.exit(0); } } if ( cameraController.processKeyPressedEvent(vsdke) ) { repaint(); } switch ( vsdke.keycode ) { case KeyEvent.KEY_1: p = scene.getSimpleBodies().get(0).getPosition(); p.x += 0.1; scene.getSimpleBodies().get(0).setPosition(p); repaint(); break; case KeyEvent.KEY_0: renderingMode++; if ( renderingMode > 3 ) { renderingMode = 1; } repaint(); break; } } public void keyReleased(java.awt.event.KeyEvent e) { if ( cameraController.processKeyReleasedEventAwt(e) ) { 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(java.awt.event.KeyEvent e) { ; } public void mouseEntered(MouseEvent e) { requestFocusInWindow(); } public void mouseExited(MouseEvent e) { //System.out.println("Mouse exited"); } public void mousePressed(MouseEvent e) { if ( cameraController.processMousePressedEventAwt(e) ) { repaint(); } } public void mouseReleased(MouseEvent e) { if ( cameraController.processMouseReleasedEventAwt(e) ) { repaint(); } } public void mouseClicked(MouseEvent e) { if ( cameraController.processMouseClickedEventAwt(e) ) { repaint(); } } public void mouseMoved(MouseEvent e) { if ( cameraController.processMouseMovedEventAwt(e) ) { repaint(); } } public void mouseDragged(MouseEvent e) { if ( cameraController.processMouseDraggedEventAwt(e) ) { repaint(); } } /** WARNING: It is not working... check pending */ public void mouseWheelMoved(MouseWheelEvent e) { System.out.println("."); if ( cameraController.processMouseWheelEventAwt(e) ) { repaint(); } }}//===========================================================================//= EOF =//===========================================================================
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -