2013-04-09 3 views
2

이 프로그램을 작성했지만 더 멀리 이동함에 따라 크기를 변경해야합니다.어떻게 투시 투영 행렬을 사용합니까?

package com.ncom.src; 

import org.lwjgl.LWJGLException; 
import org.lwjgl.opengl.Display; 
import org.lwjgl.opengl.DisplayMode; 
import org.lwjgl.opengl.GL11; 
import static org.lwjgl.util.glu.GLU.*; 

import static org.lwjgl.opengl.GL11.*; 

public class Main { 
    public void start() { 
     float y = 0; 
     try { 
      Display.setDisplayMode(new DisplayMode(800,600)); 
      Display.create(); 
     } catch (LWJGLException e) { 
      e.printStackTrace(); 
      System.exit(0); 
     } 
     while (!Display.isCloseRequested()) { 
      glMatrixMode(GL_PROJECTION); 
      glLoadIdentity(); 
      glOrtho(0, 800, 600, 0, 500000000, -500000000); 
      glMatrixMode(GL_MODELVIEW); 
      glClear(GL_COLOR_BUFFER_BIT); 
      glBegin(GL_QUADS); 
       glVertex3f(350, 250, y); 
       glVertex3f(350, 270, y); 
       glVertex3f(370, 270, y); 
       glVertex3f(370, 250, y); 
      glEnd(); 
      Display.update(); 
      y -= 20; 
     } 

     Display.destroy(); 
     System.exit(0); 
    } 
    public static void main(String[] argv) { 
     Main quadExample = new Main(); 
     quadExample.start(); 
    } 
} 
+0

아니요. 수학은 중요하지 않습니다. 실제 코드가없는 곳이면 어디든 볼 수 있습니다. 원근감있는 깊이로 또는 '화면 상에 있지 않은'사각형을 그리는 방법은 무엇입니까? –

+1

@Dr_N : 음, 수학을 이해하면됩니다. 프로그래밍은 수학 표기법을 프로그래밍 언어 소스 코드로 바꾸는 과정입니다. "코드 예제"를 배우는 것은 흥미로운 부분을 가르쳐주지는 않습니다. 특히 그래픽의 경우, 단 한 줄의 수학 표기법이 코드로 가득 찬 화면으로 확장 될 수 있습니다. – datenwolf

+0

@datenwolf : 학습을 시작할 수있는 곳을 알려주시겠습니까? –

답변

4

glOrtho(0, 800, 600, 0, 500000000, -500000000);는 사시도위한 코드는, GLU.gluPerspective를 사용하려고(). 예 :

GL11.glMatrixMode(GL_PROJECTION); 
GL11.glLoadIdentity(); 
GLU.gluPerspective(field_of_vision, Display.getWidth()/Display.getHeight(), zNear, zFar); 
GL11.glMatrixMode(GL_MODELVIEW); 
GL11.glLoadIdentity(); 
3

원근감을보고 싶다면 원근 투영을 사용하면됩니다.

 glMatrixMode(GL_PROJECTION); 
     glLoadIdentity(); 
     near = 1; // near should be chosen as far into the scene as possible 
     far = 100; 
     fov = 1; // 1 gives you a 90° field of view. It's tan(fov_angle)/2. 
     glFrustum(-aspect*near*fov, aspect*near*fov, -fov, fov, near, far); 
+1

이것에 대해 궁금한 분들을 위해 [gluPerspective() 뒤에있는 수학 논리를 제공하는 NeHe Production의 링크가 있습니다 (http://nehe.gamedev.net/article/replacement_for_gluperspective/21002/). 그것은 처음부터 배우는 것을 좋아하는 사람들에게 매우 유용합니다. –

관련 문제