2013-02-20 3 views
0

4 개의 선이있는 작은 응용 프로그램을 만들고 싶습니다. 각 선의 첫 번째 좌표가 창의 측면 중 하나에서 임의로 설정되고 두 번째 좌표는 다음과 같이됩니다.LWJGL로 행 다시 그리기

img

당신은 커서를 볼 수 있지만, 선이 중앙에 커서를 충족 : 마우스 그래서 당신은이 효과를 얻는다.

내 문제는 내가 무작위로 선을 계속 움직일 수 없다는 것입니다. 따라서 매 프레임마다 또는 틱 또는 밀리 초마다 라인이 임의로 위치를 변경하고 이전 라인을 삭제합니다. 이 후 나는 무작위로 선의 색을 바꾸어서 위치와 무작위 위치를 선택하고 누구에게나 간질을 맞추기를 원하지만 위치를 먼저 알아 내야합니다.

일부 glClear (GL _...) 명령을 시도했지만 작동하지 않는 것 같습니다. 화면을 완전히 지우고 glBegin (GL_LINES) 명령을 다시 실행하여 다른 위치에 배치하는 방법이 있습니까?

여기 내 코드입니다 :

package tests; 

import static org.lwjgl.opengl.GL11.*; 
import java.util.Random; 
import org.lwjgl.LWJGLException; 
import org.lwjgl.input.*; 
import org.lwjgl.opengl.*; 

public class game { 

int wx = 600; 
int hy = 400; 

int rx = new Random().nextInt(wx); 
int ry = new Random().nextInt(hy); 

public game() throws LWJGLException { 

    int mouseX = Mouse.getX(); 
    int mouseY = hy-Mouse.getY()-1; 

    Display.setDisplayMode(new DisplayMode(wx, hy)); 
    Display.create(); 
    Display.setTitle("Game"); 

    glMatrixMode(GL_PROJECTION); 
    glLoadIdentity(); 
    glOrtho(0, wx, hy, 0, 1, -1); 
    glMatrixMode(GL_MODELVIEW); 

    while(!Display.isCloseRequested()) { 
     lines(); 

     while(Keyboard.next()) { 
      if(Keyboard.getEventKey() == Keyboard.KEY_ESCAPE) { 
       Display.destroy(); 
       System.exit(0); 
      } 
     } 

     while(Mouse.next()) { 
      if(Mouse.isButtonDown(0)) { 
       System.out.println("(" + mouseX + ", " + mouseY + ")"); 
      } 
     } 
    } 
} 

public void lines() { 

    glClear(GL_COLOR_BUFFER_BIT); 

    int mouseX = Mouse.getX(); 
    int mouseY = hy-Mouse.getY()-1; 

    glBegin(GL_LINES); 
     glVertex2i(rx, 0); 
     glVertex2i(mouseX, mouseY); 
    glEnd(); 

    glBegin(GL_LINES); 
     glVertex2i(0, ry); 
     glVertex2i(mouseX, mouseY); 
    glEnd(); 
    glBegin(GL_LINES); 
     glVertex2i(rx, hy); 
     glVertex2i(mouseX, mouseY); 
    glEnd(); 
    glBegin(GL_LINES); 
     glVertex2i(wx, ry); 
     glVertex2i(mouseX, mouseY); 
    glEnd(); 
     glLineWidth(5); 
     glColor3f(1f, 0f, 0f); 

    Display.update(); 
    Display.sync(500); 

} 


public static void main(String[] args) throws LWJGLException { 
    new game(); 
    } 
} 
+0

이 무엇을 의미합니까 "하지만 그들은 작동하지 않는다"? 그들에 대해 효과가없는 것은 무엇입니까? – antonijn

+0

나는 그들이 내가 원하는 것을하지 않는다는 것을 의미한다. 즉, 현재 줄을 제거하고 줄을 사용하여 새 줄을 다시 만듭니다(). –

+0

그러면 응용 프로그램은 어떻게 생겼을까요? 우리가 아는 것이 매우 유용 할 것입니다. – antonijn

답변

0

lines() 내부에 rx/ry 계산을 옮겨보십시오 :

public void lines() 
{ 
    int rx = new Random().nextInt(wx); 
    int ry = new Random().nextInt(hy); 

    glClear(GL_COLOR_BUFFER_BIT); 

    int mouseX = Mouse.getX(); 
    int mouseY = hy-Mouse.getY()-1; 

    glLineWidth(5); 
    glColor3f(1f, 0f, 0f); 

    glBegin(GL_LINES); 
     glVertex2i(rx, 0); 
     glVertex2i(mouseX, mouseY); 
    glEnd(); 

    glBegin(GL_LINES); 
     glVertex2i(0, ry); 
     glVertex2i(mouseX, mouseY); 
    glEnd(); 

    glBegin(GL_LINES); 
     glVertex2i(rx, hy); 
     glVertex2i(mouseX, mouseY); 
    glEnd(); 

    glBegin(GL_LINES); 
     glVertex2i(wx, ry); 
     glVertex2i(mouseX, mouseY); 
    glEnd(); 

    Display.update(); 
    Display.sync(500); 
} 
+0

오 와우 그게 효과가! 정말 고마워!!! 맹목적으로 추가하고 싶지 않아 왜 작동하는지 설명 할 수 있습니까? 감사. –

+0

'game'이 인스턴스화되고 결코 변경되지 않았을 때 두 개의 난수가 생기기 전에. 이 방법은 당신이 그릴 때마다 두 개의 새로운 난수를 얻습니다. – genpfault

+0

오, 고마워요! 지금은 이해. :-) –