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");
}

それは、私が取り組んでいるゲームのカメラをセットアップする機能です。私は立方体を描くためにこの機能を持っています:

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 コンテキストであるかのようにポイントを描画するにはどうすればよいですか? 何か案は?

4

1 に答える 1

3

OpenGL には 2D コンテキストというものはありません。すべてが 3D です。ただし、 glOrthoで平行投影を使用して 2d をエミュレートできます。

// 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 は、3 番目の座標が 0 に設定された glVertex3 に似ています。

OpenGL 4 では、上記のコマンドはすべて削除されています。ただし、glOrtho のドキュメントには、Windows 座標でのレンダリングを設定するために作成する必要があるマトリックスが示されています。

于 2012-11-14T19:49:13.210 に答える