创建一个红色三角形,了解opengl渲染流程
#include<GLTools.h>
#include<GLShaderManager.h>
#include<gluT/gluT.h>
#define FREEgluT_STATIC
#define GL_SILENCE_DEPRECATION
GLBatch triangleBatch;
GLShaderManager shaderManager;
void ChangeSize(int w,int h)
{
glViewport(0,0,w,h);
//glViewport(float x,float y,GLsizei width,GLsizei herght)其中,x,y代表窗口左下角坐标,宽度和高度参数是用像素表示,利用这个函数,我们可以在一个窗口渲染不同区域的多个图形,一定注意x,y是左下角的点的坐标。
}
void SetupRC()
{
glClearColor(0.0f,0.0f,1.0f,1.0f);
//用来窗口清除的颜色,四个参数依次为 red,green,blue,alpah
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);
//glclear函数清除一个或一组缓冲区(颜色缓冲区,深度缓冲区,模板缓冲区)
GLfloat vRed[]={1.0f,0.0f,0.0f,1.0f};
//设置一组浮点数表示红色
shaderManager.UseStockShader(GLT_SHADER_IDENTITY,vRed);
//使用glt_shader_identity着色器,并将颜色传递进去
triangleBatch.Draw();
//将几何图形提交到着色器
glutSwapBuffers();
//指定一个双缓冲区渲染环境。
}
int main(int argc,char*argv[])
{
gltSetWorkingDirectory(argv[0]);
glutinit(&argc,argv);
//传输命令行参数,并初始化glut库
glutinitdisplayMode(gluT_DOUBLE|gluT_RGBA|gluT_DEPTH|gluT_STENCIL);
//创建窗口时使用的显示模式,glut_double双缓冲窗口,glut_rgba使用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();//rc表示渲染环境(render context)
glutMainLoop();//负责处理所有操作系统特定的消息,按键,直到关闭程序。
return 0;
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。