OpenGL绘制三角形
先看效果
D460E6C6-B854-48A9-9FF3-22D1B83510A3的副本.png
-
初步认识OpenGL框架
GLShaderManager
着色器管理器(shader Mananger)类,能够进行一些初步䄦基本的渲染操作。GLTools
OpenGL的一个工具类。GLUT
是一个处理OpenGL程式的工具库
GLBatch
简单的批次容器,是GLTools的一个简单的容器类。
- 绘制图形流程分析
分析main.cpp
int main(int argc,char *argv[])
{
//1.设置当前工作目录
gltSetWorkingDirectory(argv[0]);
//初始化glut库
glutInit(&argc, argv);
//窗口显示模式
glutInitDisplayMode(GLUT_DOUBLE|GLUT_RGBA|GLUT_DEPTH|GLUT_STENCIL);
//GLUT窗口大小、窗口标题
glutInitWindowSize(800, 600);
glutCreateWindow("Triangle");
//注册重塑函数
glutReshapeFunc(changeSize);
//注册显示函数
glutDisplayFunc(RenderScene);
//特殊按键回调
glutSpecialFunc(SpecialKeys);
GLenum status = glewInit();
if (GLEW_OK != status) {
printf("GLEW Error:%s\n",glewGetErrorString(status));
return 1;
}
//设置我们的渲染环境
setupRC();
glutMainLoop();
return 0;
}
设置渲染环境
void setupRC()
{
glClearColor(0.98f, 0.40f, 0.7f, 1);
//初始化
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 changeSize(int w,int h)
{
glViewport(0, 0, w, h);
}
渲染图形
void RenderScene(void)
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT|GL_STENCIL_BUFFER_BIT);
//设置一组浮点数来表示红色
GLfloat vRed[] = {1.0,0.0,0.0,1.0f};
shaderManager.UseStockShader(GLT_SHADER_IDENTITY,vRed);
triangleBatch.Draw();
glutSwapBuffers();
}
整体流程就是这样子的啦。
网友评论