MIT_6S081_Introduction
视频链接
About Lectures
Lecture Goals
O/S Design 操作系统设计理念
Hands-on experience 实操经验
About O/S
O/S known as Operating System.
O/S Purposes
Abstract hardware
multiplex 一个硬件为多个进程复用
isolation 进程的独立性
sharing 数据的共享
security 线程的安全性
performance
range of uses
Why hardware programing is hard
unforgiving
tensions
efficient——abstract
powerful——simple api
排序算法
附上常用排序算法的一览表
冒泡排序
依次遍历序列每个元素,进行两两比大小,如果顺序错误则交换,遍历完所有即为有序序列。
算法步骤:
比较相邻元素大小,错误则交换
对每一组元素做上述工作,从开头到尾进行处理
持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。
123456789101112void bubble_sort(std::vector<int>& vec) { int length = vec.size(); for (int i = 0; i < length - 1;i++) { for (int j = 0; j < length - 1 - i;j++) { if (vec[j] > vec[j+1]) { int temp = vec[j]; vec[j] = vec[j + 1]; vec[j + 1] = temp; } } }}
选择排序
每次选择一个最小(最大)的元素排列到最前
算法步骤 ...
STL底层
C++中的STL容器
在讲STL容器底层前先回忆一下STL容器:
1、vector
2、list
3、forward_list
4、queue
5、priority_queue
6、deque
7、stack
8、array
9、map
10、multimap
11、unordered_map
12、unordered_multimap
13、set
14、multiset
15、unordered_set
16、unordered_multiset
非容器:
1、pair
2、tuple
STL底层
主要讨论各种map和set的底层实现。
所有unordered类型的容器都是基于哈希表实现的,
其余map和set类的容器都是红黑树实现的,
此外priority_queue类似大顶堆。
红黑树
哈希表
大顶堆
《图形特效编程》课堂记录02
本节课讲了高级纹理的应用以及渲染管线的灯光部分。
高级纹理应用
切线空间
切线空间是以顶点为原点,顶点法线、uv坐标方向的三个正交单位向量组成的向量空间。
法线贴图、视差贴图需要在法线空间下进行计算。
切线空间的计算
通常来说我们拿到的顶点数据只能直接得到顶点的法线信息,而uv坐标是一个二维向量,那么应该如何计算切线空间呢?
下面给出过程:
https://blog.csdn.net/u010385624/article/details/91994006
TBN矩阵
TBN矩阵是切线Tangent、副切线Bitangent、法线Normal组成的变换矩阵,用于将向量变换到切线空间。
凹凸贴图 Bump Mapping
法线贴图 Normal Mapping
对法线进行扰动,从而影响光照模型的计算结果。
优点
性能好
缺点
效果相对一般
纹理接缝处可能处理不好
法线贴图的存储
由于图像信息的像素值[0,1],而法线各分量的取值范围为[-1,1].
因此在存储时需要将法线信息转换为颜色信息
$ pixel = (normal+1) / 2 $
使用时则需要对法线贴图进行解析。
$ ...
《图形特效编程》课堂记录01
第一次课(2024.9.3)费广正老师为大家重新概括了一下光栅化渲染光线的流程。
其中涉及到了一些小要点和比较有趣的问题,这里记录一下。
光栅化渲染管线中几个主要阶段的重要任务
VertexShader
顶点着色器主要负责**坐标系的转换**。将模型顶点数据从本地坐标经过MVP矩阵变换到世界空间World Space(裁剪空间Clip Space、屏幕空间 Screen Spcae等)
Rasterization
光栅化是对三角面片的离散化处理。光栅化主要有两个任务,分别是
填充 填充屏幕中的像素颜色
插值
两个层面:
1)对像素点间的颜色进行线性插值(Breshanm画线算法,双线性插值)
2)对顶点数据进行插值(颜色、法线、深度等,但纹理坐标除外,因为近大远小,不同深度的模型纹理坐标有差距)
FragmentShader
计算光照(直接光照+间接光照 = 全局光照),根据光照模型进行着色。
图像混合阶段
可能会有同一像素有不同颜色缓冲的结果,此时需要根据先前设置的方法进行颜色融合(例如Blend One One等)
Unity Shader 结构
SubShader不是Sh ...
无题
C++中的s内存
资料:CSDN C++堆栈详解
内存的分类标准
C++中有多种内存分类的标准,这里记录了两种,一般三分类标准应该就足够理解大部分程序了。最主要的是需要理解堆(heap)与栈(stack)
三分类
静态(全局)存储区 static
编译时分配。存储静态数据、全局数据以及常量
栈区 stack
执行函数时,函数参数、局部变量、函数调用后返回的地址均创建在栈上。函数执行后地址内存自动释放。
堆区 heap
动态内存分配区。运行时使用malloc/new开辟的内存存储在该区,需要手动free/delete释放。或者在程序结束后自动释放掉动态内存。
五分类
栈
由编译器自动分配释放。通常存储局部变量,函数参数以及函数调用后的返回地址。
堆
使用new分配的内存存储在堆中,需要手动使用delete释放。程序结束后操作系统也会自动回收。
自由存储区
使用malloc分配的内存存储在堆中,需要手动使用free释放。
全局/静态存储区
全局变量和静态变量存储在这一内存块中。C语言还区分初始化和未初始化,C++不再区分。
常量存储区
存储常量,不能被修改。
递归函数与 ...
C++Lambda表达式
什么是Lambda表达式
Lambda表达式是一种在被调用的位置作为参数传递给函数的位置定义匿名函数对象的方法。
Lambda表达式的基本语法如下:
1[capture list](parameter list) -> return type {function body}
其中:
capture list是捕获列表,用于指定Lambda表达式内可访问的外部变量、参数传递方式(传值还是引用)。
捕获列表可为空。
默认捕获模式为&(引用类型)
parameter list是参数列表,和普通函数一样的使用方法。
在C++14中使用auto关键字实现泛型返回值。
return type 返回值类型,同函数的返回值类型。需要使用“->”指出返回值类型,但也可以省略此时将由编译器推导。
在C++14中使用auto关键字实现泛型返回值。
function body函数体用于表达表达式内的具体逻辑。
在C++14中使用constexpr关键字实现编译期计算。
Lambda表达式的捕获方式
值捕获
值捕获在值改变时Lambda表达式不受影响。
12345in ...
