opengl超级宝典(第五版)阅读笔记 1 基本程序框架

配置环境部分其实还是有点烦,网上资料有很多,耐心点问题也不大。
下面也算是opengl的hello world了,写了比较详细的注释。
值得注意的是#pragma comment(lib,“gltools.lib”)这一行,书中是没有的,可能因为环境配置方法的不同,我必须要手动链接一下gltools库,不然会出现链接错误。

#include <GLTools.h>	// OpenGL toolkit
#include <GLShaderManager.h>
#define FREEGLUT_STATIC  //在windows和linux上,使用freeglut静态版本,需要添加这一行,否则会出现错误
#include <glut.h>
#pragma comment(lib,"gltools.lib")//要加上这一行链接一下gltools库
GLBatch triangleBatch;//用其来绘制基本图元
GLShaderManager shaderManager;//着色器管理器 
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);//使用GLTshader和红色填充三角形
     triangleBatch.Draw();//绘制三角形
     // 交换缓冲,防止闪烁
     glutSwapBuffers();
}
       
int main(int argc, char* argv[])   
{   
	gltSetWorkingDirectory(argv[0]);//设置当前的工作目录,windows环境下也可省略
     glutInit(&argc, argv);//传输命令行参数,并初始化glut库
     //设置显示模式 双缓冲 RGBA颜色格式 深度缓冲区 模板缓冲区(不大理解,后面可能会讲到这种具体的问题)
     glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA | GLUT_DEPTH | GLUT_STENCIL); 
     glutInitWindowSize(800, 600);  //设置窗口的大小
     glutCreateWindow("Triangle");   //设置窗口的标题
     glutReshapeFunc(ChangeSize);   //注册函数,当窗口大小改变的时候设置视点
     glutDisplayFunc(RenderScene);   //注册渲染场景使用的函数
           
     GLenum err = glewInit();  //初始化glew
     if (GLEW_OK != err) 
     {   
         fprintf(stderr, "GLEW Error: %s\n", glewGetErrorString(err));   //出现错误然后打印错误
         return 1;  //return 1代表程序非正常终止
     }   
         SetupRC();   //开始渲染环境
         glutMainLoop();  //运行主窗口 
         return 0;
}   

猜你喜欢

转载自blog.csdn.net/weixin_43813453/article/details/84869592