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

📄 cohensutherlandclipping.java

📁 基于java的3d开发库。对坐java3d的朋友有很大的帮助。
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
//===========================================================================import java.awt.BorderLayout;import java.awt.Dimension;import java.awt.Component;import java.awt.Adjustable;import java.awt.event.ActionEvent;import java.awt.event.AdjustmentEvent;import java.awt.event.ActionListener;import java.awt.event.AdjustmentListener;import java.awt.event.KeyEvent;import java.awt.event.KeyListener;import java.awt.event.MouseEvent;import java.awt.event.MouseWheelEvent;import java.awt.event.MouseListener;import java.awt.event.MouseWheelListener;import java.awt.event.MouseMotionListener;import javax.swing.ButtonGroup;import javax.swing.JFrame;import javax.swing.JLabel;import javax.swing.JButton;import javax.swing.JMenu;import javax.swing.JMenuBar;import javax.swing.JMenuItem;import javax.swing.JPanel;import javax.swing.JOptionPane;import javax.swing.JRadioButton;import javax.swing.JScrollBar;import javax.swing.BorderFactory;import javax.swing.BoxLayout;import javax.swing.border.Border;import javax.swing.border.EtchedBorder;import javax.media.opengl.GL;import javax.media.opengl.glu.GLU;import javax.media.opengl.GLCanvas;import javax.media.opengl.GLAutoDrawable;import javax.media.opengl.GLDrawableFactory;import javax.media.opengl.GLEventListener;import vsdk.toolkit.common.VSDK;import vsdk.toolkit.common.Vector3D;import vsdk.toolkit.common.Ray;import vsdk.toolkit.common.Matrix4x4;import vsdk.toolkit.environment.Camera;import vsdk.toolkit.gui.CameraController;import vsdk.toolkit.gui.CameraControllerAquynza;import vsdk.toolkit.render.jogl.JoglCameraRenderer;public class CohenSutherlandClipping extends JFrame implements GLEventListener, MouseListener, MouseMotionListener, MouseWheelListener, KeyListener{    // Application data model    public Camera camera1;    public Camera camera2;    public Camera lastPerspectiveCamera;    public Vector3D point0;    public Vector3D point1;    public Vector3D testVector = new Vector3D();    // Application GUI artifacts    private ControlPanel controls;    private JMenuBar menubar;    public CameraController cameraController;    public GLCanvas canvas;    int cameraMode;    public static final int TOPVIEW = 1;    public static final int FRONTVIEW = 2;    public static final int LEFTVIEW = 3;    public static final int PERSPECTIVEVIEW = 4;    public CohenSutherlandClipping() {        super("VITRAL concept test - Perspective tests");        cameraMode = PERSPECTIVEVIEW;        canvas = new GLCanvas();        canvas.addGLEventListener(this);        canvas.addMouseListener(this);        canvas.addMouseMotionListener(this);        canvas.addKeyListener(this);        controls = new ControlPanel(this);        menubar = this.buildMenu();        this.add(canvas, BorderLayout.CENTER);        this.add(controls, BorderLayout.SOUTH);        this.setJMenuBar(menubar);        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);        //-----------------------------------------------------------------        Matrix4x4 R = new Matrix4x4();        R.eulerAnglesRotation(Math.toRadians(110), Math.toRadians(-25), 0);        camera1 = new Camera();        camera1.setPosition(new Vector3D(1.5, -5, 2.5));        camera1.setRotation(R);        camera1.setFarPlaneDistance(300);        camera2 = new Camera();        camera2.setPosition(new Vector3D(0, 0, 1));        camera2.setNearPlaneDistance(1);        camera2.setFarPlaneDistance(3);        camera2.setFov(90);        R.eulerAnglesRotation(Math.toRadians(90), Math.toRadians(-90), 0);        camera2.setRotation(R);        //-----------------------------------------------------------------        cameraController = new CameraControllerAquynza(camera1);        point0 = new Vector3D(0, 0, 0.6);        point1 = new Vector3D(0, 0, -10);        //point0 = new Vector3D(-3, 0, -2.5);        //point1 = new Vector3D(0, 0, 0.5);    }    public void setPerspectiveView()    {        if ( cameraMode != PERSPECTIVEVIEW ) {            camera1.setPosition(lastPerspectiveCamera.getPosition());            camera1.setRotation(lastPerspectiveCamera.getRotation());            camera1.setProjectionMode(camera1.PROJECTION_MODE_PERSPECTIVE);            cameraMode = PERSPECTIVEVIEW;        }    }    public void setTopView()    {        Matrix4x4 R = new Matrix4x4();        if ( cameraMode == PERSPECTIVEVIEW ) {            lastPerspectiveCamera = new Camera(camera1);        }        cameraMode = TOPVIEW;        camera1.setPosition(new Vector3D(0, 0, 5));        R.eulerAnglesRotation(Math.toRadians(90), Math.toRadians(-90), 0);        camera1.setRotation(R);        camera1.setProjectionMode(camera1.PROJECTION_MODE_ORTHOGONAL);        camera1.setOrthogonalZoom(0.25);    }    public void setFrontView()    {        Matrix4x4 R = new Matrix4x4();        if ( cameraMode == PERSPECTIVEVIEW ) {            lastPerspectiveCamera = new Camera(camera1);        }        cameraMode = TOPVIEW;        camera1.setPosition(new Vector3D(0, -10, 0));        R.eulerAnglesRotation(Math.toRadians(90), 0, 0);        camera1.setRotation(R);        camera1.setProjectionMode(camera1.PROJECTION_MODE_ORTHOGONAL);        camera1.setOrthogonalZoom(0.25);    }    public void setLeftView()    {        Matrix4x4 R = new Matrix4x4();        if ( cameraMode == PERSPECTIVEVIEW ) {            lastPerspectiveCamera = new Camera(camera1);        }        cameraMode = TOPVIEW;        camera1.setPosition(new Vector3D(-10, 0, 0));        camera1.setRotation(R);        camera1.setProjectionMode(camera1.PROJECTION_MODE_ORTHOGONAL);        camera1.setOrthogonalZoom(0.25);    }    public Dimension getPreferredSize() {        return new Dimension (800, 600);    }        public static void main (String[] args) {        JFrame f = new CohenSutherlandClipping();        f.pack();        f.setVisible(true);    }    private void    drawMark(GL gl, double delta)    {        gl.glBegin(GL.GL_LINES);            gl.glVertex3d(-delta/2, 0, 0);            gl.glVertex3d(delta/2, 0, 0);            gl.glVertex3d(0, -delta/2, 0);            gl.glVertex3d(0, delta/2, 0);            gl.glVertex3d(0, 0, -delta/2);            gl.glVertex3d(0, 0, delta/2);        gl.glEnd();    }        private void drawObjectsGL(GL gl)    {        gl.glEnable(gl.GL_DEPTH_TEST);        gl.glLoadIdentity();        //-----------------------------------------------------------------        gl.glLineWidth((float)2.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();        boolean linePasses;        Vector3D clippedPoint0 = new Vector3D();        Vector3D clippedPoint1 = new Vector3D();        camera2.updateVectors();        //linePasses = camera2.clipLineCohenSutherlandPlanes(        //    point0, point1, clippedPoint0, clippedPoint1);        linePasses = camera2.clipLineCohenSutherlandCanonicVolume(            point0, point1, clippedPoint0, clippedPoint1);        Matrix4x4 NT = camera2.getNormalizingTransformation().inverse();        clippedPoint0 = NT.multiply(clippedPoint0);        clippedPoint1 = NT.multiply(clippedPoint1);        //-----------------------------------------------------------------        double delta = 0.1;        gl.glLoadIdentity();        gl.glTranslated(point0.x, point0.y, point0.z);        gl.glLineWidth((float)1.0);        gl.glColor3d(1, 1, 1);        drawMark(gl, delta);        gl.glLoadIdentity();        gl.glTranslated(point1.x, point1.y, point1.z);        gl.glLineWidth((float)1.0);        gl.glColor3d(1, 1, 0);        drawMark(gl, delta);        //-----------------------------------------------------------------        gl.glLoadIdentity();        gl.glLineWidth((float)1.0);        gl.glColor3d(1, 0, 1);        gl.glBegin(GL.GL_LINES);            gl.glVertex3d(point0.x, point0.y, point0.z);            gl.glVertex3d(point1.x, point1.y, point1.z);        gl.glEnd();        if ( linePasses == true ) {            gl.glLineWidth((float)5.0);            gl.glBegin(GL.GL_LINES);                gl.glVertex3d(clippedPoint0.x, clippedPoint0.y,                    clippedPoint0.z);                gl.glVertex3d(clippedPoint1.x, clippedPoint1.y,                    clippedPoint1.z);            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, camera1);        drawObjectsGL(gl);        gl.glLoadIdentity();        JoglCameraRenderer.draw(gl, camera2);    }       /** 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) {        ;

⌨️ 快捷键说明

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