2016-07-04 7 views
1

私はラインLWJGL 3を描画しようとしています。ボックスrender()のメソッドでバックグラウンドの色を変更できますが、ラインを描画することはできません。ラインがLWJGLで描画されない

ここでは、コードです:

import org.lwjgl.*; 
import org.lwjgl.glfw.*; 
import org.lwjgl.opengl.*; 
import org.lwjgl.opencl.*; 

import static org.lwjgl.glfw.Callbacks.*; 
import static org.lwjgl.glfw.GLFW.*; 
import static org.lwjgl.opengl.GL11.*; 
import static org.lwjgl.system.MemoryUtil.*; 

public class Main { 

    // The window handle 
    private long window; 

    enum GameState { 
     MAIN, GAME, PAUSED; 
    } 

    GameState state; 
    GLFWKeyCallback keyCallback; 
    Box box; 

    public void run() { 
     try { 
      init(); 
      loop(); 
     }catch(Exception e) { 
      e.printStackTrace(); 
     } 
    } 

    private void init() { 
     if (!glfwInit()) 
      throw new IllegalStateException("Unable to initialize GLFW"); 

     glfwDefaultWindowHints(); 
     glfwWindowHint(GLFW_VISIBLE, GLFW_FALSE); 
     glfwWindowHint(GLFW_RESIZABLE, GLFW_TRUE); 

     int WIDTH = 300; 
     int HEIGHT = 300; 

     window = glfwCreateWindow(WIDTH, HEIGHT, "Hello World!", NULL, NULL); 
     if (window == NULL) 
      throw new RuntimeException("Failed to create the GLFW window"); 

     glfwSetKeyCallback(window, keyCallback = new Input()); 

     GLFWVidMode vidmode = glfwGetVideoMode(glfwGetPrimaryMonitor()); 
     glfwSetWindowPos(
      window, 
      (vidmode.width() - WIDTH)/2, 
      (vidmode.height() - HEIGHT)/2 
     ); 

     glfwMakeContextCurrent(window); 
     glfwShowWindow(window); 

     state = GameState.MAIN; 
     box = new Box(100, 100, 10, 10, 10); 
    } 

    private void loop() { 
     GL.createCapabilities(); 

     // Set the clear color 
     glClearColor(0.0f, 0.0f, 0.0f, 0.0f); 

     // Run the rendering loop until the user has attempted to close 
     // the window or has pressed the ESCAPE key. 
     while (!glfwWindowShouldClose(window)) { 
      glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); // clear the framebuffer 

      render(); 
      update(); 
      updateKeys(); 
     } 
    } 

    void update() { 
     // Poll for window events. The key callback above will only be 
     // invoked during this call. 
     glfwPollEvents(); 

     switch(state){ 
      case MAIN: 
       break; 
      case GAME: 
       break; 
     } 
    } 

    void updateKeys() { 
     switch(state) { 
      case MAIN: 
       if(Input.keys[GLFW_KEY_SPACE]) { state = GameState.GAME; } 
       break; 
      case GAME: 
       if(Input.keys[GLFW_KEY_UP]) { 

       } 
       break; 
      default: 
       break; 
     } 
    } 

    void render() { 
     glfwSwapBuffers(window); // swap the color buffers 
     switch(state) { 
      case MAIN: 
       break; 
      case GAME: 
       System.out.println("game rendering"); 
       box.render(); 
       break; 
     } 
    } 


    public static void main(String[] args) { 
     new Main().run(); 
    } 

    class Box { 
     int x, y; 
     int dx, dy; 

     float speed; 
     float r, g, b; 

     boolean up, down, left, right; 

     void setUp(boolean b) { up = b; } 
     void setDown(boolean b) { down = b; } 
     void setLeft(boolean b) { left = b; } 
     void setRight(boolean b) { right = b; } 

     Box(int x, int y, float r, float g, float b) { 
      this.x = x; 
      this.y = y; 
      dx = 0; 
      dy = 0; 

      speed = 5; 
      this.r = r; 
      this.g = g; 
      this.b = b; 
     } 

     void update() { 
      if(up) 
       y += (int) speed; 
      if(down) 
       y += (int) -speed; 
      if(left) 
       x = (int) -speed; 
      if(right) 
       x = (int) speed; 

      x += dx; 
      y += dy; 

      dx = 0; 
      dy = 0; 
     } 

     void render() { 
      glColor3f(1, 1, 1); 
      glBegin(GL_LINES); 
       glVertex2f(10, 10); 
       glVertex2f(20, 20); 
      glEnd(); 
     } 
    } 

    static class Input extends GLFWKeyCallback { 
     public static boolean[] keys = new boolean[65535]; 

     @Override 
     public void invoke(long window, int key, int scancode, int action, int mods) { 
      keys[key] = action != GLFW_RELEASE; 
     } 
    } 
} 
+1

かなり確信していますか?なぜopengl 3.xまたは4.x? – niceman

+3

あなたのオブジェクトは画面から離れています。 – derhass

+0

@niceman 私はまだrecentsのバージョンを使用する方法を知らないし、後で試してみるつもりです。私はOpenGLが初めてです。 – kibe

答えて

0

あなたはglPushMatrix()とglPopMatrix(とあなたのrenderメソッドを囲む必要があるが)私は、うーん、なぜ古いOpenGLを使用し

関連する問題