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 + -
显示快捷键?