Skip to content

fusijie/LearnOpenGL

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Oct 24, 2022
6cf6b84 · Oct 24, 2022

History

72 Commits
Oct 20, 2022
Apr 20, 2020
Apr 13, 2020
Oct 24, 2022
Apr 13, 2020
Apr 13, 2020
Apr 13, 2020
Apr 13, 2020
Apr 1, 2020
Apr 21, 2020

Repository files navigation

LearnOpenGL

Learning Address.

English

中文

Version Required.

  • MacOS: 10.15.4
  • Xcode: 11.4 (11E146)
  • GLFW: 3.3
  • GLAD: 0.1.33
  • GLM: 0.9.8.5
  • Assimp: 3.1.0

Project Structure.

|-- LearnOpenGL.xcodeproj		---> XCode 项目文件
|-- LearnOpenGL				---> 代码目录
|-- assimp				---> 模型加载库
|-- common				---> 通用代码
	|-- Camera				---> 摄像机类
	|-- Mesh				---> 网格类
	|-- Model				---> 模型类
	|-- Shader				---> 着色器类
	|-- Utils				---> 工具类
|-- glad				---> OpenGL 接口加载器 
|-- glfw				---> OpenGL 的 C 语言库
|-- glm					---> 数学库
|-- stb					---> C/C++ 的文件加载库
	|-- stb_image				---> 图片文件加载库

Table Of Contents.

  • 入门

    • 00-context: 基础环境搭建(GLFW/GLAD),创建窗口,了解 OpenGL 渲染流程。
    • 01-triangle: 创建第一个三角形,了解 VAO,VBO,shader,图形绘制。
    • 02-rectangle: 创建一个矩形,了解 EBO 的使用。
    • 03-uniform: 创建一个随时间变化的三角形,了解 uniform 的使用。
    • 04-layout: 通过 layout 了解如何管理定义顶点数据。
    • 05-updown: 第一次自定义 shader,创建一个上下颠倒的三角形。
    • 06-texture: 第一次使用纹理,创建一个带图片的矩形。
    • 07-mixTexture: 同时使用两张纹理,了解纹理单元。
    • 08-dynamicMixTexture: 通过 uniform 变量动态改变纹理。
    • 09-mirrorTexture: 一个镜像 shader 的纹理示例。
    • 10-waterMirrorTexture: 一个镜像水波纹 shader 的纹理示例。
    • 11-transformations: 了解变形的使用,主要是 glm 库处理位移,旋转,缩放。
    • 12-mvp: 了解坐标系统,5个不同的坐标系,以及坐标系的的变换,model,view,projection 的含义。
    • 13-cube: 创建第一个 带纹理,动态的 3d 物体。
    • 14-manyCube: 循环创建多个 3d 物体,只改变 model 矩阵。
    • 15-controlCube: 通过键盘控制立方体的运动,加深 model 矩阵的了解。
    • 16-circleCamera: 创建一个旋转的 camera,了解 view 矩阵和 projection 矩阵的使用。
    • 17-freeCamera: 创建一个自由的 camera,加深 view 矩阵和 projection 矩阵的了解。
    • 18-cameraClass: 抽象 camera 类,单独管理。
  • 光照

    • 19-color: 创建一个光照场景,使用颜色来简单模拟光照原理。
    • 20-light: 了解冯氏光照模型,在 fragment shader 中使用光照三分量叠加计算。
    • 21-material: 创建动态光照场景,引入材质和光属性,也是第一次在 shader 中使用结构体。
    • 22-diffuseMap: 了解漫反射贴图的使用。
    • 23-specularMap: 了解镜面光贴图的使用,着重高光的展示。
    • 24-gouraudLight: 了解 Gouraud 着色效果,在 vertex shader 中处理光照,对比和冯氏光照的区别。
    • 25-directionLight: 了解平行光的原理和使用。
    • 26-pointLight: 了解点光源的原理和使用,以及衰减的计算方式。
    • 27-spotLight: 了解聚光的原理和使用。
    • 28-flashLight: 实现一个手电筒,也就是一个位于观察者位置的聚光,同时对边缘进行软化处理。
    • 29-multiLight: 多光源混合的效果,了解到通过不同的参数可以实现丰富的光照视觉效果。
  • 模型加载

    • 30-model: 引入 assimp 库实现 obj 模型的加载。抽象 model 类,处理 mesh 的初始化及渲染,以及纹理的加载优化。
  • 高级 OpenGL

    • 31-depthTest: 了解深度测试的使用以及如何解决深度冲突。
    • 32-stencilTest: 通过绘制物体外轮廓,了解模板测试的使用。
    • 33-blendDiscard: 了解丢弃片段的使用,绘制带有透明信息的纹理。
    • 34-blendSort: 了解混合的原理和计算方式,渲染半透明的纹理,同时学习如何对物体进行正确的手动排序渲染。
    • 35-cullingFace: 绘制内部不渲染的箱子,了解面剔除的原理,优化渲染性能。
    • 36-framebuffer: 创建自定义的帧缓冲,了解离屏渲染的原理,为后期处理做准备。
    • 37-postProcess: 几个后期处理的示例。
      • inversion: 反相
      • grayscale: 灰度
      • sharpen: 锐化
      • blur: 模糊
      • edge: 边缘检测
    • 38-skybox: 通过天空盒的绘制,了解立方体贴图的使用和优化。
    • 39-reflection: 了解环境映射的反射现象,原理及计算方式。
    • 40-refraction: 了解环境映射的折射现象,原理及计算方式,可以使用类玻璃效果。
    • 41-uniformBufferObject: 了解 UBO 的原理及布局方式,以及如何使用。
    • 42-geometryShader: 接触几何着色器,了解几何着色器的应用场景。
      • normal: 默认几何着色器
      • line: 绘制线段的几何着色器
      • house: 绘制多个三角形的几何着色器
    • 43-implode: 使用几何着色器通过绘制顶点的法向量绘制爆破物体效果。
    • 44-normalVisualization: 使用几何着色器绘制模型的法向量,实现调试的作用。
    • 45-instancing: 使用实例化的方式实现大量物体的渲染,减少 cpu 到 gpu 的数据提交,提高性能。
    • 46-instancedArray: 使用实例化数组绘制的方式实现大量物体的渲染。
    • 47-planets: 未优化前行星和岩石的绘制。
    • 48-planetsInstancing: 使用实例化数组的方式绘制行星和岩石。
    • 49-mutilSampling: 了解抗锯齿和多重采样的原理,开启多重采样绘制立方体。
    • 50-offScreenMMSA: 自定义 framebuffer,离屏渲染开启多重采样的立方体。

About

LearnOpenGL代码,入门OpenGL。

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages