我曾经用'每像素'绘图来编写小游戏,我的意思是使用一些SetPixel(x,y,color)等功能.
我也对OpenGL感兴趣,但对此并不了解.
在OpenGL中进行每像素绘制是一种好的(快速)方法吗?
例如,使用纹理四边形作为精灵或整个应用程序背景屏幕,可以使用某种我自己的SetPixel例程设置不同的像素,我会写...或任何其他方式 - 但它应该是有效的尽可能多
(特别是我对基本的基础知识1.0版本的OGL感兴趣)
您可以设置将顶点坐标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();
Run Code Online (Sandbox Code Playgroud)
从此处开始,顶点X,Y坐标以像素为单位,原点位于左下角.理论上,您可以将立即模式与GL_POINT原语一起使用.但批量处理是一个更好的主意.而不是单独发送每个点创建一个您想要绘制的所有点的数组:
struct Vertex
{
GLfloat x,y,red,green,blue;
};
std::vector<Vertex> vertices;
/* fill the vertices vector */
Run Code Online (Sandbox Code Playgroud)
这可以让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);
Run Code Online (Sandbox Code Playgroud)
...并通过一次通话访问并绘制所有内容:
glDrawArrays(GL_POINTS, 0, vertices.size();
Run Code Online (Sandbox Code Playgroud)