学习教程来自:GAMES202-高质量实时渲染

笔记

1. Basic GPU hardware pipeline

渲染管线

## 2. OPenGL 是一系列在CPU端调用的API用来调用GPU工作。 1. 优点:跨平台。 2. 缺点:碎片化,有很多版本。语言风格为C style,非面向对象。 渲染过程类比: 1. 放置物体/模型:模型声明(VBO),模型变换矩阵(glTranslate等) 2. 放置画架:声明相机(gluPerspective等),使用/声明一个FrameBuffer 3. 画布和画架关系:一个Pass可以输出多个Texture(MRT),Fragment Shader决定了其内容 4. 在画布上作画:着色。本课程重点在顶点着色器、片元着色器2个部分 ## 3. OpenGL Shading Language (GLSL) 描述着色器如何着色的语言:着色器语言经过编译变为在GPU上执行的汇编语言 1. HLSL for DX(vertex + pixel) 2. GLSL for OpenGL(vertex + fragment) 一些变量的声明 1. attribute:顶点着色器中的本地变量 2. uniform:固定的全局变量 3. varying:顶点着色器的变量插值后送给片元着色器 4. highp:高精度 ### 3.1 Debug 工具:Nsight Graphics、RenderDoc 方法:打印颜色 ## 4. The Rendering Equation 正确的用来描述光线传播的公式 PBR:

In Real Time Rendering:对入射光源是否被遮挡(V)单独描述

作业

作业0:在框架里实现Bulin-Phong,所有代码已给出
碰到的问题:
没有渲染出来是因为uViewMatrix和uViewMatrix这2个矩阵没有传过来,需要

  1. 在Material.js中this.#flatten_uniforms部分声明这2个参数
  2. 在MeshRender.js的Draw函数中定义对应的2个矩阵,然后通过gl.uniformMatrix4fv函数传给下一层(参考作业1中的对应代码)

如果没有对vFragPos进行世界空间的转换而仅仅将aVertexPosition传入,那么原本(52,52,52)的缩放就没有起作用,导致光线的衰减是基于(1,1,1)缩放后的世界空间位置计算的

最终效果