摘要: 下面这段代码,如果调用func,按照C++的标准,程序会被终止(std::terminate) 原因在于C++标准规定,std::thread的析构被调用时,std::thread必须是unjoinable的,否则std::terminate就会被调用。 std::thread有两种状态,joina 阅读全文
posted @ 2017-03-17 11:55 viX0026 阅读(1673) 评论(0) 推荐(0) 编辑
摘要: 假设有一个接收universal references的模板函数foo,定义如下: 如果想对某些类型做特殊处理,写一个重载版本的foo,比如想对float类型做特殊处理,就写一个接收float类型的foo: 这样,如果我们写下 foo(1.0) 时,理论上应该输出"foo(float n)",而实际 阅读全文
posted @ 2017-03-16 16:50 viX0026 阅读(836) 评论(0) 推荐(0) 编辑
摘要: 这篇文章主要是参考MJP的“Attack of The Depth Buffer”,测试不同格式下depth buffer的精度。 测试的depth buffer包含两类: 一是非线性的depth buffer,存储着perspective z(也就是最常用的,透视投影后归一化的z/w的buffer 阅读全文
posted @ 2017-03-11 16:59 viX0026 阅读(1007) 评论(0) 推荐(0) 编辑
摘要: 观察透视投影矩阵: 对于x和y,矩阵变换只是一个缩放系数,那么逆变换就是缩放系数的倒数,所以 设Xndc Yndc为NDC空间中的XY坐标,Xview Yview Zview为view space中的坐标,则 所以 所以已知XY的NDC坐标和view space z,就能求出view space p 阅读全文
posted @ 2017-03-11 00:15 viX0026 阅读(540) 评论(0) 推荐(0) 编辑
摘要: <!--[if !supportLists]-->Irradiance Environment Map基本原理 Irradiance Environment Map(也叫Irradiance Map或Diffuse Environment Map),属于Image Based Lighting技术中 阅读全文
posted @ 2017-03-08 23:15 viX0026 阅读(2409) 评论(2) 推荐(0) 编辑