illuminationtest.java
来自「基于java的3d开发库。对坐java3d的朋友有很大的帮助。」· Java 代码 · 共 552 行 · 第 1/2 页
JAVA
552 行
light2 = new Light(Light.POINT, new Vector3D(30, -70, 50), new ColorRgb(1, 1, 1)); light3 = new Light(Light.POINT, new Vector3D(-40, 60, 30), new ColorRgb(1, 1, 1)); //----------------------------------------------------------------- N = new Vector3D(0, 0, 1); // For the floor! updateH(); phongExp = 60.0; baseMesh = createFloorMesh(); surfaceMesh = createSurfaceMesh(); } public Dimension getPreferredSize() { return new Dimension(640, 480); } public static void main(String[] args) { JFrame f; System.out.println("Press keys: 1, 2, 3, 4, 5, 6, 7, 8 and 0..."); if ( args.length == 1 ) { f = new IlluminationTest(args[0]); } else { f = new IlluminationTest(null); } f.pack(); f.setVisible(true); } private void drawObjectsGL(GL gl) { gl.glLoadIdentity();/* // Draw reference frame gl.glLineWidth((float)3.0); gl.glDisable(gl.GL_LIGHTING); gl.glDisable(gl.GL_TEXTURE_2D); 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();*/ // Draw mesh gl.glDisable(gl.GL_CULL_FACE); //gl.glCullFace(gl.GL_BACK); JoglLightRenderer.activate(gl, light1); JoglTriangleMeshRenderer.draw(gl, baseMesh, qualitySelection2, false); JoglLightRenderer.deactivate(gl, light1); JoglLightRenderer.activate(gl, light2); JoglLightRenderer.activate(gl, light3); JoglTriangleMeshRenderer.draw(gl, surfaceMesh, qualitySelection1, false); } /** Called by drawable to initiate drawing */ public void display(GLAutoDrawable drawable) { GL gl = drawable.getGL(); gl.glEnable(gl.GL_DEPTH_TEST); gl.glClearColor(0, 0, 0, 1.0f); gl.glClear(GL.GL_COLOR_BUFFER_BIT); gl.glClear(GL.GL_DEPTH_BUFFER_BIT); gl.glColor3d(1, 1, 1); gl.glLineWidth(1.0f); JoglCameraRenderer.activate(gl, camera); JoglLightRenderer.turnOffAllLights(gl); drawObjectsGL(gl); gl.glDisable(gl.GL_LIGHTING); gl.glColor3d(1, 1, 0); JoglLightRenderer.draw(gl, light1); // red box around interest point over surface double z = 0.01; double l = 0.1; gl.glBegin(gl.GL_LINE_LOOP); gl.glColor3d(0.9, 0.5, 0.5); gl.glVertex3d(-l, -l, z); gl.glVertex3d(l, -l, z); gl.glVertex3d(l, l, z); gl.glVertex3d(-l, l, z); gl.glEnd(); if ( showVectors == true ) { gl.glLineWidth(7.0f); gl.glBegin(gl.GL_LINES); gl.glColor3d(0.5, 0.5, 0.9); gl.glVertex3d(0, 0, 0); gl.glVertex3d(lightPosition.x, lightPosition.y, lightPosition.z); gl.glColor3d(0.9, 0.9, 0.5); gl.glVertex3d(0, 0, 0); gl.glVertex3d(0, 0, 3); gl.glColor3d(0.5, 0.9, 0.5); gl.glVertex3d(0, 0, 0); gl.glVertex3d(3*H.x, 3*H.y, 3*H.z); gl.glEnd(); } } /** 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); } 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(); } } public void mouseWheelMoved(MouseWheelEvent e) { System.out.println("."); if (cameraController.processMouseWheelEventAwt(e)) { canvas.repaint(); } } public void keyPressed(KeyEvent e) { double deltalight = 0.1; //----------------------------------------------------------------- if ( e.getKeyCode() == KeyEvent.VK_ESCAPE ) { System.exit(0); } if ( e.getKeyCode() == KeyEvent.VK_I ) { System.out.println(qualitySelection1); } else if ( e.getKeyCode() == KeyEvent.VK_7 ) { phongExp += 5; } else if ( e.getKeyCode() == KeyEvent.VK_8 ) { phongExp -= 5; if ( phongExp < 0.0 ) phongExp = 0.0; } else if ( e.getKeyCode() == KeyEvent.VK_1 ) { lightPosition.x -= deltalight; } else if ( e.getKeyCode() == KeyEvent.VK_2 ) { lightPosition.x += deltalight; } else if ( e.getKeyCode() == KeyEvent.VK_3 ) { lightPosition.y -= deltalight; } else if ( e.getKeyCode() == KeyEvent.VK_4 ) { lightPosition.y += deltalight; } else if ( e.getKeyCode() == KeyEvent.VK_5 ) { lightPosition.z -= deltalight; } else if ( e.getKeyCode() == KeyEvent.VK_6 ) { lightPosition.z += deltalight; } else if ( e.getKeyCode() == KeyEvent.VK_0 ) { if ( showVectors == true ) { showVectors = false; } else { showVectors = true; } } System.out.println("Phong exp: " + phongExp); System.out.println("Light: " + lightPosition); surfaceMesh = createSurfaceMesh(); light1.setPosition(lightPosition); updateH(); canvas.repaint(); //----------------------------------------------------------------- if ( cameraController.processKeyPressedEventAwt(e) ) { canvas.repaint(); } if ( qualityController.processKeyPressedEventAwt(e) ) { System.out.println(qualitySelection1); canvas.repaint(); } } public void keyReleased(KeyEvent e) { if (cameraController.processKeyReleasedEventAwt(e)) { canvas.repaint(); } if (qualityController.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 + =
减小字号Ctrl + -
显示快捷键?