Advertisement
Guest User

HelloWorldOGL.java

a guest
Oct 3rd, 2011
112
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 5.35 KB | None | 0 0
  1.  
  2. import java.awt.*;
  3. import java.awt.event.*;
  4. import java.io.*;
  5. import com.threed.jpct.*;
  6. import com.threed.jpct.util.*;
  7.  
  8. /**
  9.  * A simple HelloWorld using the OpenGL-renderer.
  10.  * @author EgonOlsen
  11.  *
  12.  */
  13.  
  14. public class HelloWorldOGL
  15. {
  16.     private FrameBuffer buffer = null;
  17.     private World world = null;
  18.     private Object3D ground = null;
  19.     private Object3D ball = null;
  20.     private SimpleVector sv = null;
  21.     private Light lamp = null;
  22.     private Projector projector = null;
  23.     private ShadowHelper sh = null;
  24.     private KeyMapper km = new KeyMapper();
  25.     private MouseMapper mm = null;
  26.     private double angle;
  27.     private boolean forward = false;
  28.     private boolean back = false;
  29.     private boolean left = false;
  30.     private boolean right = false;
  31.     private boolean up = false;
  32.     private boolean down = false;
  33.     private TreeEngine trees;
  34.  
  35.     public static void main(String[] args) throws Exception
  36.     {
  37.         new HelloWorldOGL().loop();
  38.     }
  39.  
  40.     public HelloWorldOGL() throws Exception
  41.     {
  42.         buffer = new FrameBuffer(800, 600, FrameBuffer.SAMPLINGMODE_NORMAL);
  43.         buffer.disableRenderer(IRenderer.RENDERER_SOFTWARE);
  44.         buffer.enableRenderer(IRenderer.RENDERER_OPENGL);
  45.  
  46.         mm = new MouseMapper(buffer);
  47.        
  48.         Config.maxPolysVisible = 50000;
  49.         Config.glAvoidTextureCopies = true;
  50.         Config.glColorDepth = 25;
  51.         Config.glShadowZBias = 0.8f;
  52.         Config.glTrilinear = false;
  53.         Config.farPlane = 40000;
  54.         Config.lightMul = 1;
  55.         Config.mipmap = true;
  56.         Config.collideOffset = 1000;
  57.  
  58.         world = new World();
  59.         world.setAmbientLight(32, 32, 64);
  60.  
  61.         char c = File.separatorChar;
  62.         TextureManager.getInstance().addTexture("ground", new Texture("res" + c + "ground.png"));
  63.  
  64.         ground = Loader.load3DS("res" + c + "ground.3ds", 70f)[0];
  65.         ground.rotateX((float) (-Math.PI / 2));
  66.         ground.translate(-100f, 10f, 2f);
  67.         ground.setSpecularLighting(true);
  68.         ground.setShadingMode(Object3D.SHADING_GOURAUD);
  69.         ground.setTexture("ground");
  70.         ground.setCollisionMode(Object3D.COLLISION_CHECK_OTHERS);
  71.         ground.setCollisionOptimization(Object3D.COLLISION_DETECTION_OPTIMIZED);
  72.         ground.build();
  73.         world.addObject(ground);
  74.  
  75.         trees = new TreeEngine(world, ground);
  76.        
  77.         ball = Primitives.getSphere(40f);
  78.         ball.setAdditionalColor(new Color(255, 255, 128));
  79.         ball.translate(-100f, -400f, 0f);
  80.         ball.setShadingMode(Object3D.SHADING_GOURAUD);
  81.         ball.build();
  82.         world.addObject(ball);
  83.  
  84.         projector = new Projector();
  85.         projector.setFOV(1.5f);
  86.         projector.setYFOV(1.5f);
  87.  
  88.         sh = new ShadowHelper(world, buffer, projector, 2048);
  89.         sh.setCullingMode(false);
  90.         sh.setAmbientLight(new Color(16, 16, 64));
  91.         sh.setLightMode(true);
  92.         sh.setBorder(1);
  93.  
  94.         trees.setShadows(sh);
  95.         sh.addCaster(border);
  96.         sh.addCaster(farm);
  97.         sh.addCaster(helis);
  98.         sh.addReceiver(ground);
  99.  
  100.         sv = new SimpleVector();
  101.         sv.set(ball.getTransformedCenter());
  102.  
  103.         lamp = new Light(world);
  104.         lamp.setPosition(sv);
  105.         lamp.setIntensity(255f, 255f, 120f);
  106.         lamp.setAttenuation(800);
  107.  
  108.         world.getCamera().setPosition(ground.getTransformedCenter().x + 400f, ground.getTransformedCenter().y - 200f, ground.getTransformedCenter().z - 50f);
  109.         world.getCamera().lookAt(ground.getTransformedCenter());
  110.         world.getCamera().setFOV(1.5f);
  111.     }
  112.  
  113.     private void loop() throws Exception
  114.     {
  115.         while (!org.lwjgl.opengl.Display.isCloseRequested())
  116.         {
  117.             angle += 0.05f;
  118.             ball.translate((float) Math.cos(angle), (float) Math.sin(angle), 0f);
  119.  
  120.             sv = ball.getTransformedCenter();
  121.  
  122.             lamp.setPosition(sv);
  123.  
  124.             projector.lookAt(ground.getTransformedCenter());
  125.             projector.setPosition(sv);
  126.  
  127.             move();
  128.  
  129.             buffer.clear(new Color(0, 112, 148));
  130.  
  131.             sh.updateShadowMap();
  132.             world.renderScene(buffer);
  133.  
  134.             world.draw(buffer);
  135.             sh.drawScene();
  136.  
  137.             buffer.update();
  138.             buffer.displayGLOnly();
  139.  
  140.             Thread.sleep(10);
  141.         }
  142.         buffer.disableRenderer(IRenderer.RENDERER_OPENGL);
  143.         buffer.dispose();
  144.         System.exit(0);
  145.     }
  146.  
  147.     private void move()
  148.     {
  149.         KeyState ks = null;
  150.         while ((ks = km.poll()) != KeyState.NONE)
  151.         {
  152.             if (ks.getKeyCode() == KeyEvent.VK_Z)
  153.             {
  154.                 forward = ks.getState();
  155.             }
  156.             if (ks.getKeyCode() == KeyEvent.VK_S)
  157.             {
  158.                 back = ks.getState();
  159.             }
  160.             if (ks.getKeyCode() == KeyEvent.VK_Q)
  161.             {
  162.                 left = ks.getState();
  163.             }
  164.             if (ks.getKeyCode() == KeyEvent.VK_D)
  165.             {
  166.                 right = ks.getState();
  167.             }
  168.             if (ks.getKeyCode() == KeyEvent.VK_PAGE_UP)
  169.             {
  170.                 up = ks.getState();
  171.             }
  172.             if (ks.getKeyCode() == KeyEvent.VK_PAGE_DOWN)
  173.             {
  174.                 down = ks.getState();
  175.             }
  176.         }
  177.  
  178.         if (forward)
  179.         {
  180.             world.getCamera().moveCamera(Camera.CAMERA_MOVEIN, 2f);
  181.         }
  182.         if (back)
  183.         {
  184.             world.getCamera().moveCamera(Camera.CAMERA_MOVEOUT, 2f);
  185.         }
  186.         if (left)
  187.         {
  188.             if (mm.isGrabbed(1))
  189.             {
  190.                 world.getCamera().moveCamera(Camera.CAMERA_MOVELEFT, 2f);
  191.             }
  192.             else
  193.             {
  194.                 world.getCamera().rotateAxis(world.getCamera().getYAxis(), -0.1f);
  195.             }
  196.         }
  197.         if (right)
  198.         {
  199.             if (mm.isGrabbed(1))
  200.             {
  201.                 world.getCamera().moveCamera(Camera.CAMERA_MOVERIGHT, 2f);
  202.             }
  203.             else
  204.             {
  205.             world.getCamera().rotateAxis(world.getCamera().getYAxis(), 0.1f);
  206.             }
  207.         }
  208.         if (up)
  209.         {
  210.             world.getCamera().rotateAxis(world.getCamera().getZAxis(), 0.1f);
  211.         }
  212.         if (down)
  213.         {
  214.             world.getCamera().rotateAxis(world.getCamera().getZAxis(), -0.1f);
  215.         }
  216.  
  217.         if (mm.isGrabbed(0) || mm.isGrabbed(1))
  218.         {
  219.             world.getCamera().rotateAxis(new SimpleVector(mm.getDeltaY(), mm.getDeltaX(), 0f), 0.05f);
  220.         }
  221.     }
  222. }
  223.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement