1、导入头文件
#include "GLTools.h"
#include <GLUT/GLUT.h>
2、定义全局变量
//定义着色管理器
GLShaderManager shaderManager;
//GLTools中的简单容器
GLBatch triangleBatch;
3、主函数实现
int main(int argc ,char *argv[]) {
//初始化glut库
glutInit(&argc, argv);
//初始显示模式
//GLUT_DOUBLE 指定双缓存窗口
//GLUT_RGBA RGBA染色模式
//GLUT_DEPTH 使用深度缓存
//GLUT_STENCIL 使用模板缓存
glutInitDisplayMode(GLUT_DOUBLE|GLUT_RGBA|GLUT_DEPTH|GLUT_STENCIL);
//指定GLUT窗口大小
glutInitWindowSize(800, 600);
//GLUT窗口标题
glutCreateWindow("Triangle");
//指定窗口大小改变时调用的函数
glutReshapeFunc(changeSize);
//指定渲染时调用的函数
glutDisplayFunc(renderSecene);
//初始化时有没有错误
GLenum err = glewInit();
if (err != GLEW_OK) {
fprintf(stderr, "grew err:%s\n", glewGetErrorString(err));
}
//图形数据准备工作
setupRC();
//启动循环监控
glutMainLoop();
return 0;
}
4、图形准备工作
void setupRC (){
//设置背景色
glClearColor(0.2, 0.7, 0.2, 1);
//存储着色器初始化
shaderManager.InitializeStockShaders();
//设置三角形顶点
GLfloat vVerts[] = {
-0.8f,0.0f,0.2f,
0.7f,0.2f,0.3f,
0.0f,0.4f,0.0f,
};
//告诉着色器这是三角形的三个顶点
triangleBatch.Begin(GL_TRIANGLES, 3);
triangleBatch.CopyVertexData3f(vVerts);
triangleBatch.End();
}
5、视图尺寸改变时调用函数
void changeSize(int w, int h) {
//修改绘制区域长宽
glViewport(0, 0, w, h);
}
6、开始渲染或改变渲染时调用
void renderSecene(){
//清除出特定缓存区
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT|GL_STENCIL_BUFFER_BIT);
//三角形颜色
GLfloat vRed[] = {1.0f,0.0f,0.0f};
//使用着色器渲染颜色
shaderManager.UseStockShader(GLT_SHADER_IDENTITY, vRed);
//提交着色器
triangleBatch.Draw();
//后台进行渲染,完成后交给前台
glutSwapBuffers();
}
7、运行得到三角形
运行截图
网友评论