OpenGL-绘制简单矩形

/*
*功能:本程序将展示一个简单的OpenGL程序,实现一个窗口
*/

#include <gl\glut.h>
#include <Windows.h>

void draw()
{
    glClearColor(0.0, 0.0, 0.0, 0.0); //设置清除颜色为黑色
    glClear(GL_COLOR_BUFFER_BIT); //用当前缓冲区清除值来清楚缓冲区
    /*
    GL_COLOR_BUFFER_BIT:    当前可写的颜色缓冲
    GL_DEPTH_BUFFER_BIT:    深度缓冲
    GL_ACCUM_BUFFER_BIT:    累积缓冲
    GL_STENCIL_BUFFER_BIT:  模板缓冲
    */

    glRectf(-0.5, -0.5, 0.5, 0.5); //用当前的绘图颜色绘制一个填充矩形
    /*
    当前的颜色是白色,可以通过glColor3f修改颜色值
    */

    glFlush(); //将GL命令队列中的命令发送给显卡并清空命令队列,发送完立即返回
}

int main()
{
    glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB); //设置图形显示模式
    /*
    值                   对应宏定义       意义
    GLUT_RGB            0x0000      指定RGB颜色模式的窗口
    GLUT_RGBA           0x0000      指定RGBA 颜色模式的窗口
    GLUT_INDEX          0x0001      指定颜色索引模式的窗口
    GLUT_SINGLE         0x0000      指定单缓存窗口
    GLUT_DOUBLE         0x0002      指定双缓存窗口
    GLUT_ACCUM          0x0004      窗口使用累加缓存
    GLUT_ALPHA          0x0008      窗口的颜色分量包含 alpha 值
    GLUT_DEPTH          0x0010      窗口使用深度缓存
    GLUT_STENCIL        0x0020      窗口使用模板缓存
    GLUT_MULTISAMPLE    0x0080      指定支持多样本功能的窗口
    GLUT_STEREO         0x0100      指定立体窗口
    GLUT_LUMINANCE      0x0200      窗口使用亮度颜色模型
    */

    glutInitWindowPosition(0, 0); //设置初始窗口的位置(窗口左上角相对于桌面坐标(x,y)
    glutInitWindowSize(500, 500); //设置初始窗口的大小
    glutCreateWindow("OpenGL窗口"); //产生一个顶层窗口,name为窗口的标题
    glutDisplayFunc(draw); //注册当前窗口的显示回调函数
    glutMainLoop(); //让glut程序进入事件循环.一旦调用, 会直到程序结束才返回
}

这里写图片描述

OpenGL绘制矩形通常涉及以下几个步骤[^1]: 1. **设置颜色和线宽**: 使用`glColor3f()`和`glLineWidth()`设定画笔的颜色和线条宽度。 2. **启用元素数组模式**: `glEnableClientState(GL_VERTEX_ARRAY)` 和 `glEnableClientState(GL_COLOR_ARRAY)`,以使用预定义的顶点和颜色数据。 3. **创建顶点数据**: 创建包含矩形四个角顶点的数组,每个顶点包括位置(x, y)和颜色信息。 4. **设置顶点数据**: 使用`glVertexPointer()`设置顶点坐标数据,使用`glColorPointer()`设置颜色数据。 5. **定义矩形的两个三角形**: 因为OpenGL默认只能绘制三角形,所以矩形由两个重叠三角形构成。定义两个三角形的顶点顺序,通常是左下->右上->左上和右下->中心->左下。 6. **绘制**: 调用`glDrawArrays(GL_TRIANGLES, 0, 6)`,其中第一个参数是绘制模式(这里是GL_TRIANGLES),第二个参数是顶点数组的起始索引,第三个参数是绘制的顶点数量。 7. **调用glFlush()**[^2]以确保所有绘制操作都被立即执行并显示在屏幕上。 如果需要具体代码示例,这里有一个简化版的伪代码展示: ```c++ // 假设我们已经有了顶点数组vdata和颜色数组cdata glBegin(GL_TRIANGLES); // 开始绘制 glVertexPointer(2, GL_FLOAT, 0, &vdata[0]); // 设置顶点位置 glColorPointer(3, GL_FLOAT, 0, &cdata[0]); // 设置颜色 glDrawArrays(GL_TRIANGLES, 0, 6); // 绘制两个三角形 glEnd(); // 结束绘制 // 强制执行命令 glFlush(); ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值