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

📄 cgautomaticshaderexample.java

📁 基于java的3d开发库。对坐java3d的朋友有很大的帮助。
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
//===========================================================================// VITRAL recomendation: Use explicit class imports (not .*) in hello world // type programs so the user/programmer can be exposed to all the complexity // involved. This will help him to dominate the involved libraries.// Java base classesimport java.io.IOException;import java.io.FileInputStream;import java.io.File;// Java GUI classesimport 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;import javax.swing.JFrame;// JOGL classesimport javax.media.opengl.GL;import javax.media.opengl.GLAutoDrawable;import javax.media.opengl.GLCanvas;import javax.media.opengl.GLEventListener;import com.sun.opengl.util.Animator;// VitralSDK classesimport vsdk.toolkit.common.ColorRgb;import vsdk.toolkit.common.Vector3D;import vsdk.toolkit.common.Matrix4x4;import vsdk.toolkit.common.RendererConfiguration;import vsdk.toolkit.media.IndexedColorImage;import vsdk.toolkit.media.NormalMap;import vsdk.toolkit.media.RGBImage;import vsdk.toolkit.environment.Camera;import vsdk.toolkit.environment.Material;import vsdk.toolkit.environment.Light;import vsdk.toolkit.environment.geometry.Geometry;import vsdk.toolkit.environment.geometry.Sphere;import vsdk.toolkit.io.PersistenceElement;import vsdk.toolkit.io.image.ImagePersistence;import vsdk.toolkit.gui.CameraController;import vsdk.toolkit.gui.CameraControllerAquynza;import vsdk.toolkit.gui.RendererConfigurationController;import vsdk.toolkit.render.jogl.JoglCameraRenderer;import vsdk.toolkit.render.jogl.JoglGeometryRenderer;import vsdk.toolkit.render.jogl.JoglImageRenderer;import vsdk.toolkit.render.jogl.JoglLightRenderer;import vsdk.toolkit.render.jogl.JoglMaterialRenderer;import vsdk.toolkit.render.jogl.JoglMatrixRenderer;import vsdk.toolkit.render.jogl.JoglRenderer;/**This program is an extended variation of the programCgComplexStandardShaderExample with one addition:  - Cg shader management is managed by vitral toolkit material / Renderer    configuration scheme*/public class CgAutomaticShaderExample    implements GLEventListener, MouseListener, MouseMotionListener,               MouseWheelListener, KeyListener{    //- GUI ----------------------------------------------------------------    private static GLCanvas canvas;    private CameraController cameraController;    private RendererConfigurationController qualityController;    //- Animation & state control ------------------------------------------    private boolean firstTimer = true;    private int needPaint = 3;    private boolean withRotationAnimation = false;    private boolean withLightAnimation = false;    private double lightAngle = 0;    //- Scene elements -----------------------------------------------------    private Camera camera;                   // 1. Camera    private Light light;                     // 2. Light    private Material material;               // 3. Surface properties    private RGBImage textureMap;    private NormalMap normalMap;    private RGBImage convertedNormalMap = null;    private RendererConfiguration quality;    private double xrotation;                // 4. Geometrical transformations    private double yrotation;    private double zrotation;    private Geometry geometry;                   // 5. Geometry    //----------------------------------------------------------------------    public CgAutomaticShaderExample(boolean appletMode) {        if ( !appletMode ) init();    }    public void init() {        //- Print users' manual -------------------------------------------        System.out.println(        "Key controls:\n"+        "  - Camera: <cursor arrows>, x/X, y/Y, z/Z, s/S, a/A, f/F, n/N, i\n"+        "  - Rendering quality: g, <function keys>\n"+        "  - Animation control: <space>, r\n"+        "  - Light control: 0, 9, h, k, j, u\n"+        "  - Rotation control: 1, 2, 3, 4, 5, 6\n"+        "  - Exit: <escape>\n"+        "Mouse controls:\n"+        "  - Drag+button1: camera orientation\n"+        "  - Drag+button2: camera panning\n"+        "  - Drag+button3: camera advance & roll\n"        );        System.out.print("Initializing... ");        //- Initialize scene elements--------------------------------------        // 1: Camera        camera = new Camera();        camera.setPosition(new Vector3D(0, -4, 0));        Matrix4x4 R = new Matrix4x4();        R.eulerAnglesRotation(Math.toRadians(90.0), 0, 0);        camera.setRotation(R);        camera.setFov(30.0);        // 2: Lights        light = new Light(Light.POINT, new Vector3D(0, -4, 0), new ColorRgb(1, 1, 1));        // 3.1. Object attribute -> material propierties        material = new Material();        material.setAmbient(new ColorRgb(0, 0, 0));        material.setDiffuse(new ColorRgb(1, 1, 1));        material.setSpecular(new ColorRgb(1, 1, 1));        material.setPhongExponent(40);        // 3.2. Object attribute -> texture map & bumpmap        String imageFilename = null;        try {            //-------------------------------------------------------            imageFilename = "../../../etc/textures/miniearth.png";            textureMap = ImagePersistence.importRGB(new File(imageFilename));            //-------------------------------------------------------            normalMap = new NormalMap();            //imageFilename = "../../../etc/bumpmaps/blinn2.bw";            imageFilename = "../../../etc/bumpmaps/earth.bw";            IndexedColorImage source = ImagePersistence.importIndexedColor(new File(imageFilename));            normalMap.importBumpMap(source, new Vector3D(1, 1, 0.2));            convertedNormalMap = normalMap.exportToRgbImage();            normalMap = null;            //ImagePersistence.exportPPM(new File("./outputmap.ppm"), convertedNormalMap);        }        catch (Exception e) {            System.err.println("Error: could not read the image file \"" + imageFilename + "\".");            System.err.println("Check you have access to that file from current working directory.");            System.err.println(e);            System.exit(0);        }        // 3.3. Object attribute -> how it will render        quality = new RendererConfiguration();        quality.setBumpMap(true);        // 4. Object attribute -> geometrical transformations        xrotation = 0;        yrotation = 0;        zrotation = 0;        // 5. Object attribute -> geometry        geometry = new Sphere(1.0);        //- Initialize GUI helpers ----------------------------------------        cameraController = new CameraControllerAquynza(camera);        qualityController = new RendererConfigurationController(quality);        //-----------------------------------------------------------------        System.gc();        System.out.println("Ok!");    }    public void init(GLAutoDrawable drawable) {        // Not used in VitralSDK style applications... check 'firstTimer'    }    public void display(GLAutoDrawable drawable) {        GL gl = drawable.getGL();        if ( withRotationAnimation ) {            zrotation += 0.5*2;            needPaint = 1;        }        if ( withLightAnimation ) {            Vector3D lightPosition = new Vector3D(1, -3, 1);            Vector3D axis = new Vector3D(0, -1, 0);            Matrix4x4 R = new Matrix4x4();            lightAngle += Math.toRadians(1.0*2);            R.axisRotation(lightAngle, axis);            lightPosition = R.multiply(lightPosition);            light.setPosition(lightPosition);            needPaint = 1;        }        if ( needPaint <= 0 ) {            return;        }        needPaint--;        if ( firstTimer ) {            firstTimer = false;            // IMPORTANT POINT 1/4            JoglRenderer.createDefaultAutomaticNvidiaCgShaders();        }        //-----------------------------------------------------------------        gl.glEnable(GL.GL_DEPTH_TEST);        gl.glClearColor(0, 0, 0, 1.0f);        gl.glClear(GL.GL_COLOR_BUFFER_BIT | GL.GL_DEPTH_BUFFER_BIT);

⌨️ 快捷键说明

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