OpenGL学习笔记:第一个OpenGL程序
OpenGL环境搭建参考博客:VS2015下OpenGL库的配置。
#include<GL\glew.h> #include<GLTools.h> #include<GLShaderManager.h> #ifdef __APPLE__ #include<GL\glut.h> #else #define FREEGLUT_STATIC #include<GL\glut.h> #endif GLShaderManager shaderManager; // 声明一个着色器管理器的实例 GLBatch triangleBatch; // 声明一个GLBatch实例 // 窗口大小改变函数 void ChangeSize(int w,int h) { // 修改视窗的大小 glViewport(0, 0, w, h); } // 设置渲染的初始化 void SetupRC() { // 设置背景颜色 glClearColor(0.0f, 0.0f, 1.0f, 1.0f); // 设置为蓝色 shaderManager.InitializeStockShaders(); // 设置三角形 // 顶点组成三角形图元 GLfloat vVerts[] = { -0.5f,0.0f,0.0f, 0.5f,0.0f,0.0f, 0.0f,0.5f,0.0f }; // 下面代码建立一个三角形的批次,仅包含三个顶点 triangleBatch.Begin(GL_TRIANGLES, 3); triangleBatch.CopyVertexData3f(vVerts); triangleBatch.End(); } // 绘制场景 void RenderScene(void) { // 清除缓冲区 glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT); // 将数组传递给着色器 // 着色器用制定的颜色进行渲染 GLfloat vRed[] = { 1.0f,0.0f,0.0f,1.0f }; shaderManager.UseStockShader(GLT_SHADER_IDENTITY, vRed); triangleBatch.Draw(); // 指示将集合图形提交到着色器 glutSwapBuffers(); } // 主函数 int main(int argc, char *argv[]) { gltSetWorkingDirectory(argv[0]); // 调用glutInit函数传输命令行参数并初始化GLUT库 glutInit(&argc, argv); // 告诉GLUT库,在创建窗口时要使用那种类型的显示模式 // GLUT_DOUBLE表示双缓冲窗口,GLUT_RGBA表示RGBA颜色模式 glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA | GLUT_DEPTH | GLUT_STENCIL); //设置GLUT窗口的大小,创建以"Triangle"为标题的窗口 glutInitWindowSize(800, 600); glutCreateWindow("Triangle"); //为改变窗口大小而设置一个回调函数 //注册一个函数以包含OpenGL渲染代码 glutReshapeFunc(ChangeSize); glutDisplayFunc(RenderScene); // 调用glewInit初始化GLEW库 // 检查取人驱动程序初始化过程无问题 GLenum err = glewInit(); if (GLEW_OK != err) { fprintf(stderr, "GLEW Error:%s\n", glewGetErrorString(err)); return 1; } SetupRC(); // glutMainLoop函数负责处理所有操作系统特定的消息、按键动作等直到我们关闭程序 glutMainLoop(); return 0; }
运行结果: