2012-11-14 161 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绘图一样,你需要设置一个正确的投影矩阵。不相关:整个'glBegin/glEnd' API已弃用。 – pmr

回答

3

在OpenGL中没有任何2D环境。一切都是3D。 但可以使用平行投影模拟2D与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就像glVertex3与第三coorinate设置为0。

在OpenGL中4 所有上述命令被删除。但是glOrtho文档向您展示了您需要创建的矩阵,以在窗口坐标中设置渲染。