绘制三角形大概的操作流程
- 初始化opengl可视化编程库glut
- 窗口大小改变时,设置视口大小
- 视口环境的搭建
- 然后调用SetupRC初始化渲染环境进行三角形渲染,这里用的是存储着色器
- 期间glut会一直在内部做一个消息的循环,对相应的响应做出回调
对绘制三角形用到的代码的一些解释
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 };
//gltools的存储容器类,以供着色器渲染时使用
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[])
{
//指定工作目录,将当前文件夹设为应用程序捆绑包Resource文件夹
gltSetWorkingDirectory(argv[0]);
glutInit(&argc, argv);
//创建窗口使用的显示模式
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA | GLUT_DEPTH | GLUT_STENCIL);
//指定窗口大小
glutInitWindowSize(800, 600);
//设置窗口名
glutCreateWindow("Triangle");
//窗口改变时会回调,第一次出现窗口也视为改变了一次窗口大小
glutReshapeFunc(ChangeSize);
//展示窗口时的回调,这时调用了视口环境的搭建
glutDisplayFunc(RenderScene);
GLenum err = glewInit();
if (GLEW_OK != err) {
fprintf(stderr, "GLEW Error: %s\n", glewGetErrorString(err));
return 1;
}
//初始化渲染环境的函数
SetupRC();
//主消息循环,对于调用方法glut是一个内部消息不断循环的一个机制,当有消息被拦截时,也就是当某个响应触发时,就会通过响应函数传递消息
glutMainLoop();
return 0;
}