TheoAllen

3d Tank

Mar 16th, 2014
373
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 6.22 KB | None | 0 0
  1. package lwjgl02;
  2.  
  3. import org.lwjgl.Sys;
  4. import org.lwjgl.LWJGLException;
  5. import org.lwjgl.opengl.Display;
  6. import org.lwjgl.opengl.DisplayMode;
  7. import org.lwjgl.input.Keyboard;
  8. import static org.lwjgl.opengl.GL11.*;
  9.  
  10. public class LWJGL02 {
  11.  
  12.     public static void main(String[] args) {
  13.         LWJGL02 lw = new LWJGL02();
  14.         lw.start();
  15.     }
  16.     final int SCREEN_WIDTH = 640; // Screen width
  17.     final int SCREEN_HEIGHT = 480; // Screen height
  18.     final int SCREEN_DEPTH = 50;  // Screen Depth
  19.     final int SCALE = 3; // Screen Scale
  20.    
  21.     long lastFrame;
  22.     long lastFPS;
  23.     int fps;
  24.    
  25.     public void start() {
  26.         try {
  27.             Display.setDisplayMode(new DisplayMode(SCREEN_WIDTH, SCREEN_HEIGHT));
  28.             Display.setVSyncEnabled(true);
  29.             Display.create();
  30.         } catch (LWJGLException e) {
  31.             e.printStackTrace();
  32.             System.exit(0);
  33.         }
  34.         lastFPS = getTime(); // Init FPS
  35.        
  36.         getDelta(); // init last frame
  37.         glMatrixMode(GL_PROJECTION);
  38.         glLoadIdentity();
  39.         glOrtho(-4 * SCALE, 4 * SCALE, -3 * SCALE, 3 * SCALE, SCREEN_DEPTH, -SCREEN_DEPTH);
  40.         glMatrixMode(GL_MODELVIEW);
  41.         float x_flag = 0;
  42.         float y_flag = 0;
  43.         float z_flag = 0;
  44.         float angle = 0;
  45.        
  46.         // Loop begin ~
  47.         while (!Display.isCloseRequested()) {
  48.             if (Keyboard.isKeyDown(Keyboard.KEY_DOWN)) {
  49.                 x_flag += 1;
  50.             }
  51.             if (Keyboard.isKeyDown(Keyboard.KEY_UP)) {
  52.                 x_flag -= 1;
  53.             }
  54.             if (Keyboard.isKeyDown(Keyboard.KEY_LEFT)) {
  55.                 y_flag += 1;
  56.             }
  57.             if (Keyboard.isKeyDown(Keyboard.KEY_RIGHT)) {
  58.                 y_flag -= 1;
  59.             }
  60.             if (Keyboard.isKeyDown(Keyboard.KEY_Q)){
  61.                 z_flag += 1;
  62.             }
  63.             if (Keyboard.isKeyDown(Keyboard.KEY_W)){
  64.                 z_flag -= 1;
  65.             }
  66.             if (Keyboard.isKeyDown(Keyboard.KEY_1)){
  67.                 angle += 1;
  68.             }
  69.             if (Keyboard.isKeyDown(Keyboard.KEY_2)){
  70.                 angle -= 1;
  71.             }
  72.             if (Keyboard.isKeyDown(Keyboard.KEY_X)){
  73.                 x_flag = 0;
  74.                 y_flag = 0;
  75.                 z_flag = 0;
  76.                 angle =  0;
  77.             }
  78.             clear_screen();
  79.             glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
  80.             glPushMatrix();
  81.             System.out.printf("%2f:%2f:%2f:%2f\n",angle,x_flag,y_flag,z_flag);
  82.             glRotated(angle,x_flag,y_flag,z_flag);
  83. //            glRotated(angle,1,1,0);
  84.             trapesium(6,5  ,0  ,2  ,0,1, true,true);
  85.             trapesium(6,5  ,0  ,2  ,5,1, true,true);
  86.             trapesium(5,4.5,0.3,1.4,1,4, true,false);
  87.             glTranslated(1,0,0);
  88.             trapesium(2.5 ,2.0 ,1.4 ,3 ,1.7 ,2.7, false,false);
  89.             trapesium(1.0 ,0.5 ,3 ,3.5 ,2 ,1 , false,false);
  90.             trapesium2(-2.4, -2.1, 1.4 + 0.4, 3 - 0.4, -5, 2.3,1.3);
  91.            
  92.             glPopMatrix();
  93.             Display.update();
  94.             Display.sync(60);
  95.             updateFPS();
  96.         }
  97.         Display.destroy();
  98.     }
  99.    
  100.     void clear_screen() {
  101.         glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
  102.     }
  103.    
  104.     long getTime() {
  105.         return (Sys.getTime() * 1000) / Sys.getTimerResolution();
  106.     }
  107.    
  108.     long getDelta(){
  109.         long time = getTime();
  110.         int delta = (int)(time - lastFrame);
  111.         lastFrame = time;
  112.         return delta;
  113.     }
  114.    
  115.     void updateFPS(){
  116.         if(getTime() - lastFPS > 1000){
  117.             Display.setTitle("FPS: " + fps);
  118.             fps = 0;
  119.             lastFPS += 1000;
  120.         }
  121.         fps++;
  122.     }
  123.    
  124.     void trapesium(double x1, double x2, double y1, double y2,
  125.             double depth, double depth_plus, boolean mirror, boolean reduce){
  126.        
  127.         double depth2 =  depth + depth_plus;
  128.         glBegin(GL_QUADS);
  129.        
  130.         glVertex3d(-x1,y1,depth);
  131.         glVertex3d(x1,y1,depth);
  132.         glVertex3d(x2,y2,depth);
  133.         glVertex3d(-x2,y2,depth);
  134.        
  135.         glVertex3d(-x1,y1,depth);
  136.         glVertex3d(-x2,y2,depth);
  137.         glVertex3d(-x2,y2,depth2);
  138.         glVertex3d(-x1,y1,depth2);
  139.        
  140.         glVertex3d(x1,y1,depth);
  141.         glVertex3d(x2,y2,depth);
  142.         glVertex3d(x2,y2,depth2);
  143.         glVertex3d(x1,y1,depth2);
  144.        
  145.         glVertex3d(-x1,y1,depth2);
  146.         glVertex3d(x1,y1,depth2);
  147.         glVertex3d(x2,y2,depth2);
  148.         glVertex3d(-x2,y2,depth2);
  149.        
  150.         if (mirror){
  151.        
  152.         if (reduce){
  153.         x1 -= 1;
  154.         x2 -= 0.75;
  155.         }
  156.         y2 -= 0.5;
  157.        
  158.         y2 = -y2;
  159.        
  160.         glVertex3d(-x1,y1,depth);
  161.         glVertex3d(x1,y1,depth);
  162.         glVertex3d(x2,y2,depth);
  163.         glVertex3d(-x2,y2,depth);
  164.        
  165.         glVertex3d(-x1,y1,depth);
  166.         glVertex3d(-x2,y2,depth);
  167.         glVertex3d(-x2,y2,depth2);
  168.         glVertex3d(-x1,y1,depth2);
  169.        
  170.         glVertex3d(x1,y1,depth);
  171.         glVertex3d(x2,y2,depth);
  172.         glVertex3d(x2,y2,depth2);
  173.         glVertex3d(x1,y1,depth2);
  174.        
  175.         glVertex3d(-x1,y1,depth2);
  176.         glVertex3d(x1,y1,depth2);
  177.         glVertex3d(x2,y2,depth2);
  178.         glVertex3d(-x2,y2,depth2);
  179.         }
  180.         glEnd();
  181.     }
  182.    
  183.     void trapesium2(double x1, double x2, double y1, double y2, double length,
  184.             double depth, double depth_plus){
  185.         double depth2 =  depth + depth_plus;
  186.         glBegin(GL_QUADS);
  187.        
  188.         glVertex3d(x1,y1,depth);
  189.         glVertex3d(x2,y2,depth);
  190.         glVertex3d(x1 + length,y2,depth);
  191.         glVertex3d(x1 + length,y1,depth);
  192.        
  193.         glVertex3d(x1,y1,depth);
  194.         glVertex3d(x2,y2,depth);
  195.         glVertex3d(x2,y2,depth2);
  196.         glVertex3d(x1,y1,depth2);
  197.        
  198.         glVertex3d(x1 + length,y1,depth);
  199.         glVertex3d(x1 + length,y2,depth);
  200.         glVertex3d(x1 + length,y2,depth2);
  201.         glVertex3d(x1 + length,y1,depth2);
  202.        
  203.         glVertex3d(x1,y1,depth2);
  204.         glVertex3d(x2,y2,depth2);
  205.         glVertex3d(x1 + length,y2,depth2);
  206.         glVertex3d(x1 + length,y1,depth2);
  207.        
  208.         glEnd();
  209.     }
  210.    
  211. }
Advertisement
Add Comment
Please, Sign In to add comment