OpenGL学习(一)

  • 概念了解:

  1. 着色器(shader):OpenGL内部的能够被GPU直接编译的一种小型程序,最常用的有顶点着色器、片元着色器;

  2. 顶点着色器、片元着色器:顶点着色器决定一个图元该位于屏幕的什么位置,片元着色使用信息来决定某个片元的颜色;

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.

 

 

你可能感兴趣的:(OpenGL,OpenGL入门)