今天学如何用opengl绘制一个三角形,先直接贴代码:
#include <GL/glut.h>
void renderScene()
{
// 清除颜色缓存
glClear(GL_COLOR_BUFFER_BIT);
const GLfloat vertices[3][2]={
{0.0,0.0},
{50.0,0.0},
{25.0,50.0}
};
// 设置顶点颜色
glColor3f(1.0,0.0,0.0);
glBegin(GL_TRIANGLES);
glVertex2fv(vertices[0]);
glVertex2fv(vertices[1]);
glVertex2fv(vertices[2]);
glEnd();
glFlush();
}
void myInit()
{
// 设置清屏颜色为白色
glClearColor(1.0,1.0,1.0,1.0);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluOrtho2D(0.0,50,0.0,50);
glMatrixMode(GL_MODELVIEW);
}
//主程序入口
int main(int argc, char* argv[])
{
// 初始化窗口和opengl之间的交互
glutInit(&argc,argv);
// 初始化显示模式,使用RGB颜色,使用单缓存
glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE);
// 初始化窗口大小
glutInitWindowSize(500,500);
// 初始化窗口位置
glutInitWindowPosition(200,200);
// 创建窗口
glutCreateWindow("draw triangle");
<pre class="cpp" name="code"> // 绑定显示回调函数
glutDisplayFunc(renderScene);
myInit();glutMainLoop();return 0; }
现在开始分析代码
首先我们要绘图,肯定要创建窗口,
// 初始化窗口和opengl之间的交互
glutInit(&argc,argv);
// 初始化显示模式,使用RGB颜色,使用单缓存
glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE);
// 初始化窗口大小
glutInitWindowSize(500,500);
// 初始化窗口位置
glutInitWindowPosition(200,200);
// 创建窗口
glutCreateWindow("draw triangle");
这四句代码就是做这件事。
就准备开始绘制,但是绘制的之前还要设置一些参数,比如窗口的背景颜色,裁剪体的位置大小等。
// 设置清屏颜色为白色
glClearColor(1.0,1.0,1.0,1.0);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluOrtho2D(0.0,50,0.0,50);
glMatrixMode(GL_MODELVIEW);
上面五句,首先将颜色缓存的值全部设置成白色,由此来达到设置背景颜色为白色。为之后的清除操作作准备
// 清除颜色缓存
glClear(GL_COLOR_BUFFER_BIT);
然后接下来三句是为了设置裁剪体,glLoadIdentity()将栈顶矩阵置为单位矩阵,使设置裁剪体的时候不受之间的影响。
最后面一句将矩阵模式置回模视图矩阵。
之后opengl就会循环调用绑定好的显示回调函数:
// 绑定显示回调函数
glutDisplayFunc(renderScene);