PART ONE
code.cpp
#include <stdio.h>
#include <GL/glew.h>
#include <GL/freeglut.h>
#define width 222
#define height 207
GLubyte image[height][width][4];
void initImage()
{
for (int h = 0; h < height; h++) {
for (int w = 0; w < width; w++)
{
image[h][w][0] = 255;
image[h][w][1] = 0;
image[h][w][2] = 0;
image[h][w][3] = 255;
}
}
}
void render()
{
glClear(GL_COLOR_BUFFER_BIT);
glClearColor(0.3f, 0.3f, 0.3f, 1.0f);
glDrawPixels(width, height, GL_RGBA, GL_UNSIGNED_BYTE, image);
glutSwapBuffers();
}
int main(int argc, char** argv)
{
// init GLUT
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA);
glutInitWindowSize(width, height);
glutInitWindowPosition(200, 100);
int id = glutCreateWindow("Image");
// init GLEW after GLUT
GLenum err = glewInit();
if (err != GLEW_OK) {
fprintf(stderr, "Error: '%s'\n", glewGetErrorString(err));
return 1;
}
initImage();
glutDisplayFunc(render);
glutMainLoop();
return 0;
}
部分二
代码分析
1、像素存储的变量类型为:unsigned char,在OpenGL下简写为:GLubyte。每个像素进行四通道存储:GL_RGBA。
2、定义一个三维GLubyte型数组:image[height][width][4]。
3、for循环初始化三维数组:image,先处理width,后处理height。
4、render()函数中调用glDrawPixels()函数对数组image中的数据输出到:Default FrameBuffer(默认屏幕帧缓存区),之后进行swapbuffer显示到窗口。
5、main()函数中调用函数initImage()。
|