2012-11-14 5 views
0
private void init_video() { 
    uint32 video_flags = SurfaceFlag.SWSURFACE | SurfaceFlag.OPENGL; 
    screen = Screen.set_video_mode (SCREEN_WIDTH, SCREEN_HEIGHT, SCREEN_BPP, video_flags); 
    if (screen == null) stderr.printf ("Could not set video mode.\n"); 

    glClearColor (0.0f, 0.0f, 0.0f, 1.0f); 
    glMatrixMode (GL_PROJECTION); 
    glLoadIdentity(); 
    glFrustum (-2.0f, 2.0f, -2.0f, 2.0f, 1.0f, 300.0f); 
    glMatrixMode (GL_MODELVIEW); 
    glEnable (GL_DEPTH_TEST); 
    glEnable (GL_TEXTURE_2D); 

    SDL.WindowManager.set_caption ("Title", "Title"); 
} 

내가 작업중인 게임에 카메라를 설치하는 기능입니다. 큐브를 그리는이 함수가 있습니다.3D 컨텍스트에 2D 점 그리기

public void draw() { 
    glLoadIdentity(); 
    glTranslatef (x, y, z); 
    glScalef (size, size, size); 
    glRotatef (x_angle, 1.0f, 0.0f, 0.0f); 
    glRotatef (y_angle, 0.0f, 1.0f, 0.0f); 
    glRotatef (z_angle, 0.0f, 0.0f, 1.0f); 
    glBegin (GL_QUADS); 

    /* Front face */ 
    glColor3f (1.0f, 0.0f, 0.0f); 
    glVertex3f (0.5f, 0.5f, 0.5f); 
    glVertex3f (-0.5f, 0.5f, 0.5f); 
    glVertex3f (-0.5f, -0.5f, 0.5f); 
    glVertex3f (0.5f, -0.5f, 0.5f); 

    /* Left face */ 
    glColor3f (0.0f, 1.0f, 0.0f); 
    glVertex3f (-0.5f, 0.5f, 0.5f); 
    glVertex3f (-0.5f, -0.5f, 0.5f); 
    glVertex3f (-0.5f, -0.5f, -0.5f); 
    glVertex3f (-0.5f, 0.5f, -0.5f); 

    /* Back face */ 
    glColor3f (0.0f, 0.0f, 1.0f); 
    glVertex3f (0.5f, 0.5f, -0.5f); 
    glVertex3f (-0.5f, 0.5f, -0.5f); 
    glVertex3f (-0.5f, -0.5f, -0.5f); 
    glVertex3f (0.5f, -0.5f, -0.5f); 

    /* Right face */ 
    glColor3f (1.0f, 1.0f, 0.0f); 
    glVertex3f (0.5f, 0.5f, 0.5f); 
    glVertex3f (0.5f, -0.5f, 0.5f); 
    glVertex3f (0.5f, -0.5f, -0.5f); 
    glVertex3f (0.5f, 0.5f, -0.5f); 

    /* Top face */ 
    glColor3f (0.0f, 1.0f, 1.0f); 
    glVertex3f (0.5f, 0.5f, 0.5f); 
    glVertex3f (-0.5f, 0.5f, 0.5f); 
    glVertex3f (-0.5f, 0.5f, -0.5f); 
    glVertex3f (0.5f, 0.5f, -0.5f); 

    /* Bottom face */ 
    glColor3f (1.0f, 0.0f, 1.0f); 
    glVertex3f (0.5f, -0.5f, 0.5f); 
    glVertex3f (-0.5f, -0.5f, 0.5f); 
    glVertex3f (-0.5f, -0.5f, -0.5f); 
    glVertex3f (0.5f, -0.5f, -0.5f); 
    glEnd(); 
} 

점을 2D 컨텍스트 인 것처럼 그릴 수있는 방법은 무엇입니까? 어떤 아이디어?

+0

2D 컨텍스트 란 무엇입니까? OpenGL의 2D 점은 단지 z 값이 '0'인 3D 점입니다. 2D에서 드로잉하는 것처럼 실제로 사물을 보시려면 올바른 투영 행렬을 설정해야합니다. Unrelated : 전체'glBegin/glEnd' API는 더 이상 사용되지 않습니다. – pmr

답변

3

OpenGL에서 2D 컨텍스트로 존재하는 것은 없습니다. 모든 것은 3d입니다. 하지만 glOrtho

// Setup Orthogonal projection to window coordiantes 
glMatrixMode(GL_PROJECTION); 
glLoadIdentity(); 
glOrtho(0, WindowWidth-1, 0, WindowHeight-1, -1, 1); 
glMatrixMode(GL_MODELVIEW); 
glLoadIdentity(); 

// draw quad in screen coodinates 
glBegin(GL_QUADS); 
    glColor3f(1.0f, 1.0f, 1.0f); 
    glVertex2i(10, 10); 
    glVertex2i(10, 80); 
    glVertex2i(80, 80); 
    glVertex2i(80, 10); 
glEnd(); 

glVertex2으로 평행 투영을 사용하여 2D를 에뮬레이트 할 수는 상기 명령이 제거 OpenGL은 4 모든 0이

설정된 제 coorinate으로 glVertex3 같다. 그러나 glOrtho 문서는 윈도우 좌표로 렌더링을 설정하기 위해 필요한 매트릭스를 보여줍니다.