Во-первых, имейте в виду, что OpenGL не использует стандартные пиксельные координаты. Я имею в виду, что для конкретного разрешения, т.е. 800x600 У вас нет горизонтальных координат в диапазоне 0-799 или 1-800 с шагом в один. Скорее, координаты в диапазоне от -1 до 1 позже отправляются в модуль растрирования графической карты и после этого соответствуют определенному разрешению.
Я пропустил один шаг здесь - прежде всего, что у вас есть матрица ModelViewProjection (или матрица viewProjection в некоторых простых случаях), которая прежде всего будет приводить координаты, которые вы используете, к плоскости проекции. По умолчанию это используется для реализации камеры, которая преобразует трехмерное пространство мира (вид для размещения камеры в правильное положение и проекция для приведения трехмерных координат в плоскость экрана. В ModelViewProjection это также шаг размещения модели в нужном месте в мире).
Другой случай (и вы можете использовать матрицу проекции таким образом, чтобы достичь желаемого) - это использование этих матриц для преобразования одного диапазона разрешений в другой.
И тебе понадобится трюк. Вы должны прочитать о матрице модели ViewProjection и камере в openGL, если хотите серьезно. Но сейчас я скажу вам, что с правильной матрицей вы можете просто привести свою собственную систему координат (то есть использовать диапазоны 0-799 по горизонтали и 0-599 по вертикали) в стандартизированный диапазон -1: 1. Таким образом, вы не увидите, что лежащий в основе API openGL использует свою собственную систему от -1 до 1.
Самый простой способ добиться этого - функция glOrtho. Вот ссылка на документацию:
http://www.opengl.org/sdk/docs/man/xhtml/glOrtho.xml
Это пример правильного использования:
glMatrixMode (GL_PROJECTION)
glLoadIdentity ();
глОрто (0, 800, 600, 0, 0, 1)
glMatrixMode (GL_MODELVIEW)
Теперь вы можете использовать собственную матрицу modelView, т.е. для перевода (перемещения) объектов, но не трогайте пример проекции. Этот код должен выполняться перед любой командой рисования. (Может быть после инициализации opengl, если вы не будете использовать 3d графику).
А вот рабочий пример: http://nehe.gamedev.net/tutorial/2d_texture_font/18002/
Просто нарисуйте свои цифры вместо рисования текста. И есть еще одна вещь - glPushMatrix и glPopMatrix для выбранной матрицы (в этом примере матрица проекции) - вы не будете использовать это, пока не объедините 3d с 2d рендерингом.
И вы все еще можете использовать матрицу модели (т.е. для размещения плиток где-нибудь в мире) и матрицу вида (например, для масштабирования или прокрутки мира - в этом случае ваш мир может быть больше, чем разрешение, и вы можете обрезать вид простыми переводами)
Посмотрев на мой ответ, я вижу, что он немного хаотичен, но если вы запутались - просто прочитайте о моделях Model, View и Projection и попробуйте пример с glOrtho. Если вы все еще в замешательстве, не стесняйтесь спрашивать.