Skip to content

About

学习及opengl实战

Resources

Stars

2 stars

Watchers

1 watching

Forks

Latest commit

 

History

30 Commits

Folders and files

Repository files navigation

Opengl实战

00_window

实现了窗口的调用

01_triangle

实现了多个三角形绘制,使用EBO去管理重复顶点

学会了多个输出方式LINE、LOOP、FILL

学会了动态编译多个着色器和链接

//参数0表示顶点属性数组的索引。
glEnableVertexAttribArray(0);

02_GLSL

GLSL学习,并且实现了不同着色器渲染不同三角形

03_GLSL

实现了在一个数组中按照自定义规则设置顶点属性指针

uniform、glUniform1i 和 glGetUniformLocation 的使用

// 设置顶点属性指针
    glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 6 * sizeof(float), (void *)0);
    glEnableVertexAttribArray(0);
    glVertexAttribPointer(1, 3, GL_FLOAT, GL_FALSE, 6 * sizeof(float), (void *)(3*sizeof(float)));
    glEnableVertexAttribArray(1);

04_shader_class

实现了shader.h头文件编写,不必再字符串流动态编译了。

编写glsl文件并且根据它们穿见着色器。

实现了根据时间变化位置的三角形。

05_texture

实现了纹理贴图

实现了多纹理贴图,在循环中调用以下代码进行组合

      glActiveTexture(GL_TEXTURE0);
      glBindTexture(GL_TEXTURE_2D, texture1);

      glActiveTexture(GL_TEXTURE1);
      glBindTexture(GL_TEXTURE_2D, texture2);

06_GLM

练习了glm的一些操作:

rotate函数参数分别为矩阵、参数、旋转轴

scale函数参数分别为矩阵、各方向比例向量

	trans = glm::rotate(trans,  (float)(glm::radians(30.f*glfwGetTime())), glm::vec3(0.0, 0.0, 1.0));
        trans = glm::scale(trans, glm::vec3(0.5, 0.5, 0.5));

07_3D

学习MVP变换

实现了model、view、projection三种矩阵,左乘矩阵就是对应变化
        float time = glfwGetTime();
        glm::mat4 model         = glm::mat4(1.0f); // make sure to initialize matrix to identity matrix first
        glm::mat4 view          = glm::mat4(1.0f);
        glm::mat4 projection    = glm::mat4(1.0f);
        model = glm::rotate(model, (float)time*glm::radians(-55.0f), glm::vec3(1.0f, 0.0f, 0.0f));
        view  = glm::translate(view, glm::vec3(0.0f, 0.0f, -3.0f));
        projection = glm::perspective(glm::radians(45.0f), (float)SCR_WIDTH / (float)SCR_HEIGHT, 0.1f, 100.0f);
        unsigned int viewLoc  = glGetUniformLocation(ourShader.ID, "view");
        // pass them to the shaders (3 different ways)
        ourShader.setTrans("model",1, model);
        glUniformMatrix4fv(viewLoc, 1, GL_FALSE, &view[0][0]);
        ourShader.setTrans("projection",1, projection);

08_imgui

使用imgui完成帧率输出和滑动改变f值的功能

09_lookat

熟悉摄像机坐标系统,完成了:

1.使的摄像机以一定的半径绕着(0,0,0)旋转

2.完成了framebuffer_size_callback函数,使键盘wsad可以控制摄像机移动

3.完成了mouse_callback\scroll_callback函数,使得检索到鼠标移动和鼠标滚轮改变pitch和yaw角,并用滚轮改变视野fov角。

10_lighting

学习光照基础

1.phong lighting model

Ambient+Diffuse+Specular

2.Front,up,right

front是根据pitch角和yaw角推断出来的

Right = glm::normalize(glm::cross(Front, WorldUp));  // normalize the vectors, because their length gets closer to 0 the more you look up or down which results in slower movement.
Up    = glm::normalize(glm::cross(Right, Front));

11_material

当描述一个表面时,我们可以分别为三个光照分量定义一个材质颜色(Material Color):环境光照(Ambient Lighting)、漫反射光照(Diffuse Lighting)和镜面光照(Specular Lighting)。

光源对环境光、漫反射和镜面光分量也分别具有不同的强度。创建了一些光照属性来影响各个光照分量。我们希望为光照属性创建类似材质结构体的东西:

12_lightingmap

对模型进行diffuseMap和specularmap贴图,漫反射贴图:使用一张覆盖物体的图像,让我们能够逐片段索引其独立的颜色值。每个像素RGB对应漫反射颜色。

镜面贴图:描述了物体表面对光源的镜面反射程度,(越黑反射越小,越白反射越大)。

About

学习及opengl实战

Resources

Stars

2 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages