Вы можете установить проекцию, которая будет отображать координаты вершин 1: 1 в координатах пикселей:
glViewport(0, 0, window_width, window_height);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(0, window_width, 0, window_height, -1, 1);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
С этого момента координаты вершин X, Y представлены в пикселях с началом координат в нижнем левом углу. Теоретически вы можете использовать непосредственный режим с примитивами GL_POINT. Но гораздо лучше собирать вещи. Вместо индивидуальной отправки каждой точки создайте массив всех точек, которые вы хотите нарисовать:
struct Vertex
{
GLfloat x,y,red,green,blue;
};
std::vector<Vertex> vertices;
/* fill the vertices vector */
Это вы можете OpenGL указать на ...
glEnableClientState(GL_VERTEX_ARRAY);
glEnableClientState(GL_COLOR_ARRAY);
/* Those next two calls don't copy the data, they set a pointer, so vertices must not be deallocated, as long OpenGL points to it! */
glVertexPointer(2, GL_FLOAT, sizeof(Vertex), &vertices[0].x);
glColorPointer(3, GL_FLOAT, sizeof(Vertex), &vertices[0].red);
… и получить к нему доступ и нарисовать все это одним вызовом:
glDrawArrays(GL_POINTS, 0, vertices.size();