2014년 11월 28일 금요일

[한글] [OpenGL] Lwjgl 사각형 그리기

이번에는 사각형을 그려보자. 사각형을 그리는 방법에는 기본적으로 두가지가 있다.
첫번째는 선 4개를 이어서 하나를 그리는 것이고
또 다른 방법은 그냥 사각형 하나를 그리는 방법이 있다.
사각형 하나를 그리는 방법은 너무 쉬우니 전자의 방법으로 그려보겟다.


폼의 크기는 1200*800 도 함.


선을 그릴땐
glBegin(GL_LINES)
  glVertex2d(0, 0);
  glVertex2d(1,0);
glEnd();
이런 코드를 사용한다.해석해보자면 0,0의 자리부터 1,0의 자리까지 선을 긋는다.라는 뜻
이거 4번써서 사각형 그리면됨.
public static void main(String[] args)
 {
  try {
   Display.setDisplayMode(new DisplayMode(1200, 800));
   Display.setTitle("new 2D world");
   Display.setResizable(false);
   Display.create();

   glMatrixMode(GL_PROJECTION);
   glLoadIdentity();

   glMatrixMode(GL_MODELVIEW);
   glEnable(GL_TEXTURE_2D);
   glTranslatef(0f,0f,0f);
   while(!Display.isCloseRequested())
   {
    glClear(GL_COLOR_BUFFER_BIT);

    glBegin(GL_LINES);
     glVertex2d(0, 0);
     glVertex2d(0, 0.5);

     glVertex2d(0, 0.5);
     glVertex2d(0.5, 0.5);

     glVertex2d(0.5, 0.5);
     glVertex2d(0.5, 0);

     glVertex2d(0.5, 0);
     glVertex2d(0, 0);
    glEnd();

    Display.update();
    Display.sync(60);
   }
  } catch (LWJGLException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
 }
대충 머리 굴려보면 나오므로 그렇게 고민할 필요는 없다.

그렇게 해서 나온 사각형은 이렇다.


이미지가 안올라간다 오류난듯 나중에 수정함.













[한글] [OpenGL] Lwjgl 설치하기, 화면 띄워보기

최근에 2명이서 제작하기 시작한 2d rpg 게임이 있다.
물론 재미삼아 만드는 게임이지만 꽤 재미있어서 계속 제작중이다.
그래픽은 awt로 그리고 있는데 이게 게임용도 아니고 메모리도 많이먹어서 마인크래프트에서
사용된 Slick이엇나 랑 OpenGL로 그려보려고 한다.


http://www.lwjgl.org/ Lwjgl의 공식 사이트이다.


(수정) 사이트 바뀐건지 http://legacy.lwjgl.org/ 입니다.


들어가보면 이상한 영어들이 적혀있을 것이다.


왼쪽의 메뉴에서 Download 창에 들어가서 lwjgl을 다운로드 하고 압축을 풀어둔다.


이클립스를 실행한 후 jar-lwjgl.jar , jar-lwjgl_util , jar-jinput을 추가한 후 lwjgl의 네이티브를 native-자신의 os로 선택을 해주면 셋팅이 끝난다.




제일 처음으로 할 것은 화면을 띄우는 것이다.


대충 클래스를 하나 생성해주고 main 메서드에다가 이렇게 적어주자




public static void main(String[] args)
 {
  try {
   Display.setDisplayMode(new DisplayMode(800, 600));   //크기 w , h
   Display.setTitle("new 2D world");   //폼 이름.
   Display.setResizable(false);  //화면 크기조정 불가능.
   Display.create();

   glMatrixMode(GL_PROJECTION);   //매트릭스 모드 설정
   glLoadIdentity();

   glMatrixMode(GL_MODELVIEW);    //매트릭스 모드 설정
   glEnable(GL_TEXTURE_2D);    //2D 텍스쳐 사용가능하게 설정
   glTranslatef(0f,0f,0f); 
   while(!Display.isCloseRequested())
   {
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

    Display.update();
    Display.sync(62);
   }
  } catch (LWJGLException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
 }


대충 주석을 써보기는 했지만 아직은 다 몰라도 되고 알 필요도 없다.
임포트는 알아서 해주자.