TheoAllen

3D Tank new

Mar 17th, 2014
370
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 6.60 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.            
  49.             // Handle keyboard input
  50.             if (Keyboard.isKeyDown(Keyboard.KEY_DOWN)) {
  51.                 x_flag += 1;
  52.             }
  53.             if (Keyboard.isKeyDown(Keyboard.KEY_UP)) {
  54.                 x_flag -= 1;
  55.             }
  56.             if (Keyboard.isKeyDown(Keyboard.KEY_LEFT)) {
  57.                 y_flag += 1;
  58.             }
  59.             if (Keyboard.isKeyDown(Keyboard.KEY_RIGHT)) {
  60.                 y_flag -= 1;
  61.             }
  62.             if (Keyboard.isKeyDown(Keyboard.KEY_Q)){
  63.                 z_flag += 1;
  64.             }
  65.             if (Keyboard.isKeyDown(Keyboard.KEY_W)){
  66.                 z_flag -= 1;
  67.             }
  68.             if (Keyboard.isKeyDown(Keyboard.KEY_1)){
  69.                 angle += 1;
  70.             }
  71.             if (Keyboard.isKeyDown(Keyboard.KEY_2)){
  72.                 angle -= 1;
  73.             }
  74.             if (Keyboard.isKeyDown(Keyboard.KEY_X)){
  75.                 x_flag = 0;
  76.                 y_flag = 0;
  77.                 z_flag = 0;
  78.                 angle =  0;
  79.             }
  80.             // Clear screen
  81.             clear_screen();
  82.             glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
  83.            
  84.             // Save matrix ~
  85.             glPushMatrix();
  86.            
  87.             // Debug print
  88.             System.out.printf("%2f:%2f:%2f:%2f\n",angle,x_flag,y_flag,z_flag);
  89.            
  90.             // Rotate screen matrix
  91.             glRotated(angle,x_flag,y_flag,z_flag);
  92.             trapesium(6,5  ,0  ,2  ,0,1, true,true);
  93.             trapesium(6,5  ,0  ,2  ,5,1, true,true);
  94.             trapesium(5,4.5,0.3,1.4,1,4, true,false);
  95.            
  96.             // Translate screen matrix
  97.             glTranslated(1,0,0);
  98.             trapesium(2.5 ,2.0 ,1.4 ,3 ,1.7 ,2.7, false,false);
  99.             trapesium(1.0 ,0.5 ,3 ,3.5 ,2 ,1 , false,false);
  100.             trapesium2(-2.4, -2.1, 1.4 + 0.4, 3 - 0.4, -5, 2.3,1.3);
  101.            
  102.             // Load last saved matrix
  103.             glPopMatrix();
  104.            
  105.             // Update screen
  106.             Display.update();
  107.             Display.sync(60);
  108.             updateFPS();
  109.         }
  110.         Display.destroy();
  111.     }    
  112.    
  113.     // Create balanced trapesium
  114.     void trapesium(double x1, double x2, double y1, double y2,
  115.             double depth, double depth_plus, boolean mirror, boolean reduce){
  116.        
  117.         double depth2 =  depth + depth_plus;
  118.         glBegin(GL_QUADS);
  119.        
  120.         glVertex3d(-x1,y1,depth);
  121.         glVertex3d(x1,y1,depth);
  122.         glVertex3d(x2,y2,depth);
  123.         glVertex3d(-x2,y2,depth);
  124.        
  125.         glVertex3d(-x1,y1,depth);
  126.         glVertex3d(-x2,y2,depth);
  127.         glVertex3d(-x2,y2,depth2);
  128.         glVertex3d(-x1,y1,depth2);
  129.        
  130.         glVertex3d(x1,y1,depth);
  131.         glVertex3d(x2,y2,depth);
  132.         glVertex3d(x2,y2,depth2);
  133.         glVertex3d(x1,y1,depth2);
  134.        
  135.         glVertex3d(-x1,y1,depth2);
  136.         glVertex3d(x1,y1,depth2);
  137.         glVertex3d(x2,y2,depth2);
  138.         glVertex3d(-x2,y2,depth2);
  139.        
  140.         if (mirror){
  141.        
  142.         if (reduce){
  143.         x1 -= 1;
  144.         x2 -= 0.75;
  145.         }
  146.         y2 -= 0.5;
  147.        
  148.         y2 = -y2;
  149.        
  150.         glVertex3d(-x1,y1,depth);
  151.         glVertex3d(x1,y1,depth);
  152.         glVertex3d(x2,y2,depth);
  153.         glVertex3d(-x2,y2,depth);
  154.        
  155.         glVertex3d(-x1,y1,depth);
  156.         glVertex3d(-x2,y2,depth);
  157.         glVertex3d(-x2,y2,depth2);
  158.         glVertex3d(-x1,y1,depth2);
  159.        
  160.         glVertex3d(x1,y1,depth);
  161.         glVertex3d(x2,y2,depth);
  162.         glVertex3d(x2,y2,depth2);
  163.         glVertex3d(x1,y1,depth2);
  164.        
  165.         glVertex3d(-x1,y1,depth2);
  166.         glVertex3d(x1,y1,depth2);
  167.         glVertex3d(x2,y2,depth2);
  168.         glVertex3d(-x2,y2,depth2);
  169.         }
  170.         glEnd();
  171.     }
  172.    
  173.     // Create imbalance trapesium
  174.     void trapesium2(double x1, double x2, double y1, double y2, double length,
  175.             double depth, double depth_plus){
  176.         double depth2 =  depth + depth_plus;
  177.         glBegin(GL_QUADS);
  178.        
  179.         glVertex3d(x1,y1,depth);
  180.         glVertex3d(x2,y2,depth);
  181.         glVertex3d(x1 + length,y2,depth);
  182.         glVertex3d(x1 + length,y1,depth);
  183.        
  184.         glVertex3d(x1,y1,depth);
  185.         glVertex3d(x2,y2,depth);
  186.         glVertex3d(x2,y2,depth2);
  187.         glVertex3d(x1,y1,depth2);
  188.        
  189.         glVertex3d(x1 + length,y1,depth);
  190.         glVertex3d(x1 + length,y2,depth);
  191.         glVertex3d(x1 + length,y2,depth2);
  192.         glVertex3d(x1 + length,y1,depth2);
  193.        
  194.         glVertex3d(x1,y1,depth2);
  195.         glVertex3d(x2,y2,depth2);
  196.         glVertex3d(x1 + length,y2,depth2);
  197.         glVertex3d(x1 + length,y1,depth2);
  198.        
  199.         glEnd();
  200.     }
  201.    
  202.     void clear_screen() {
  203.         glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
  204.     }
  205.    
  206.     long getTime() {
  207.         return (Sys.getTime() * 1000) / Sys.getTimerResolution();
  208.     }
  209.    
  210.     long getDelta(){
  211.         long time = getTime();
  212.         int delta = (int)(time - lastFrame);
  213.         lastFrame = time;
  214.         return delta;
  215.     }
  216.    
  217.     void updateFPS(){
  218.         if(getTime() - lastFPS > 1000){
  219.             Display.setTitle("FPS: " + fps);
  220.             fps = 0;
  221.             lastFPS += 1000;
  222.         }
  223.         fps++;
  224.     }
  225. }
Advertisement
Add Comment
Please, Sign In to add comment