-
概念了解:
-
着色器(shader):OpenGL内部的能够被GPU直接编译的一种小型程序,最常用的有顶点着色器、片元着色器;
-
顶点着色器、片元着色器:顶点着色器决定一个图元该位于屏幕的什么位置,片元着色使用信息来决定某个片元的颜色;
OpenGL通用结构:
main(int argc, char** argv)
{
glutInit(&argc,argv);//初始化GLUT库,调用GLUT例程的数据结构
glutInitDisplayMode(GLUT_RGBA);//设置窗口类型,包括RGB颜色空间、深度缓冲、动画效果等
glutInitWindowSize(512,512);//设置窗口大小
glutInitContextVersion(4,3);//设置OpenGL环境类型
glutInitContextProfile(GLUT_CORE_PROFILE);//设置OpenGL环境类型
glutCreateWindow(argv[0]);//创建windows窗口显示,调用计算机窗口系统
if(glewInit()){ //辅助库GLEW内的函数,简化OpenGL内部获取函数地址的过程
exit(EXIT_FAILURE);
}
//以上完成了所有设置和环境准备工作
init();// 初始化OpenGL相关的所有数据
glutDisplayFunc(display);//在每次更新窗口会自动回调display函数的例程
glutMainLoop();//处理窗口刷新和用户输入操作的循环重绘工作
}
4、init()数据数据初始化过程
init (void)
{
glGenVertexArrays(NumVAOs,VAOs);//分配顶点数组对象GLuint VAOs[NumVAOs],可以想象是开辟 轨道,有NumVAOs条轨道(对象)
glBindVertexArray(VAOs[Triangles]);//绑定数组对象,类似轨道开关,当前路线通过的列车驶向对应轨道,如果设置成另外的状态,所有列车驶向另一条轨道。所以是为了鲁棒性设置的函数
GLfloat vertices[NumVertices][2] = {
{ -0.90,-0.90 },//1
{ 0.85,-0.90 },
{ -0.90, 0.85 },
{ 0.90, 0.85 },//2
{ 0.90, 0.85 },
{ -0.90, 0.85 },
};
glGenBuffers(NumBuffers,Buffers};//GLuint Buffers[NumBuffers],缓存对象
glBindBuffer(GL_ARRAY_BUFFER,Buffers[Array]);//绑定开关
//将顶点数据从对象传输到传输到缓存对象当中
glBufferData (GL_ARRAY_BUFFER,sizeof(vertices),vertices,GL_STATIC_DRAW);
ShaderInfo shaders[] = {
{ GL_VERTEX_SHADER, "triangles.vert" },
{ GL_FRAGMENT_SHADER, "triangles.frag" },
{ GL_NONE , NULL }
);
GLuint program = LoadShaders(shaders);//shaders结构体初始化顶点着色器
glUseProgram(program);//使用上面的这个顶点着色器
//设置vPosition对应得数据值
glVertexAttribPointer(vPosition, 2, GL_FLOAT,GL_FALSE,0,BUFFER_OFFSET(0));
glEnableVertexAttribArray(vPosition);//启用顶点属性数组
}
5.