【未完成】【GAMES101】lecture8 shading2笔记
这节课虽然内容相对比较浅,但是总量特别多,全部搞懂还是比较累的。 这节课内容涵盖了Blinn-Phong reflectance model的完整形式以及核心思想,着色频率,渲染管线等,下面逐个分析。 Blinn-Phong reflectance model Blinn-Phong模型将每个着色点
渲染管线与空间变换细节
各个空间与对应的变换 每个3D模型都有自己的局部空间(Local Space)。空间拥有自己的局部坐标系,定义了自己的原点位置。 经过模型变换(Model Transformation)后,应用model矩阵变为世界空间(World Space)。具体的变换过程取决于我们想把模型放在世界的哪个位置。
【GAMES101】作业2笔记记录
Triangle类分析 Triangle.h代码如下: //
// Created by LEI XU on 4/11/19.
//
#ifndef RASTERIZER_TRIANGLE_H
#define RASTERIZER_TRIANGLE_H
#include <eigen3/Eige
【GAMES101】Rasterizer.hpp核心分析
Rasterizer.hpp中对光栅化器的基本功能做了定义,但其中有些部分的逻辑比较复杂,此处做最核心的分析。 两个枚举类 对于Buffers类,它实际上是为了clear函数服务的,用于指定clear哪个类型的缓冲数据。 enum class Buffers
{
Color = 1,
【GAMES101】作业0的环境配置问题
GAMES101环境配置中出现了一系列小问题,都是比较冷门但又很好解决的问题,特此记录。 VirtualBox进入Ubuntu黑屏 虚拟机设置-显示-显卡控制器中,将VMSVGA改为VBoxSVGA即可成功进入系统 此时会提示"发现无效设置",别管它就行。 原因不详,可能是VMSVGA不太兼容旧版本
【GAMES101】变换(Transformation)基础
线性变换(Linear Transformation)的本质 线性变换主要是旋转和缩放,是一种"均匀"的变换。一定能被一个实矩阵表示 通过3b1b的线代基础视频:线性代数的本质 - 03 - 矩阵与线性变换,我们知道线代变换矩阵的一种本质理解:
【GAMES101】线代基础应用
点积与叉积在图形学的简单应用 点积(Dot Product) 高中我们都学过点积的几何定义(这里需注意\hat a 表示方向和\vec{a}相同的单位向量 ):
协程库fiber类的核心实现
作为"线程的线程",协程能够将线程的同步任务改造成异步执行,可以实现用户级的并发。最核心的原理就是前面介绍过的ucontext,它可以记录线程执行到某时的运行状态,并随时暂存或恢复。 那么,有了ucontext后,如何管理协程的状态信息呢?如何实现协程调度,以及其中最核心的操作resume()和yi
POSIX线程库(pthread)和线程分离状态
由于协程的优势需要借助多线程发挥,因此实现协程库之前先动手封装一个自己的轻量线程库 其实就是对POSIX各个接口的封装,让它和项目更统一一些,刚好也可以学习一下多线程编程 POSIX线程库基本接口 pthread_create 函数原型如下 int pthread_create(pthread_t
condition_variable与unique_lock
暂时做简单记录 C++中的条件变量condition_variable unique_lock最简单的用法 由于这里还没介绍unique_lock,这里先介绍一个最简单的用法: std::mutex mtx;
std::condition_variable cv;
int data = 0;
vo