0
点赞
收藏
分享

微信扫一扫

OpenGL之Point(CR)

慕容冲_a4b8 2022-04-30 阅读 99

PART ONE

code.cpp

#include <stdio.h>
#include <GL/glew.h>
#include <GL/freeglut.h>

#define width 222
#define height 207

struct Color { int r; int g; int b; int a;
}color{255,0,0,255};
GLubyte point[height][width][4];
void initPoint(int pixel_x,int pixel_y, int size)
{
    float x_start = pixel_x - (float)size / 2;
    float y_start = pixel_y - (float)size / 2;
    for (int y = y_start; y < y_start + size; y++) {
        for (int x = x_start; x < x_start + size; x++) {
            point[y][x][0] = color.r;
            point[y][x][1] = color.g;
            point[y][x][2] = color.b;
            point[y][x][3] = color.a;
        }
    }
}

void render()
{
    glClear(GL_COLOR_BUFFER_BIT);
    glDrawPixels(width, height, GL_RGBA, GL_UNSIGNED_BYTE, point);
    glutSwapBuffers();
}

int main(int argc, char** argv)
{
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA);
    glutInitWindowSize(width, height);
    glutInitWindowPosition(200, 100);
    int id = glutCreateWindow("Point");

    GLenum err = glewInit();
    if (err != GLEW_OK) {
        fprintf(stderr, "Error: '%s'\n", glewGetErrorString(err));
        return 1;
    }
    
    initPoint(width/2, height/2, 4);
    glutDisplayFunc(render);
    glutMainLoop();

    return 0;
}

 部分二

代码分析

1、通过初始化color获得像素颜色信息,初始化为{255, 0, 0, 0}为红色,像素以红色点亮。在main()函数中通过initPoint(width/2, height/2, 4)设置绘制点的像素坐标和点的大小。

2、通过GLubyte point[height][width][4]开辟一个和窗口一样大小的三维像素类型数组。在initPoint( , , )函数中,根据传入的参数和for循环对point[width][height][4]中对应屏幕中心坐标左右、上下两个像素的位置写入白色数据。

3、render():通过glDrawPixels( , , , , point)将像素数组point中的数据渲染到屏幕后缓冲区,交换前后缓冲区后,将像素数组point中的像素数据进行显示。

举报

相关推荐

0 条评论