摘要:
从0开始做一个软渲染器 —— 法线变换 1. 为什么要进行法线变换 如果只对模型的位置进行变换,例如旋转和缩放(位移不会改变法线),而不考虑法线进行相应变换,那么模型的光照就一整个乱掉。 2. 怎么进行法线变换 如果模型只是旋转或者XYZ等比例的缩放,那么法线直接乘以ModelMatrix不会有什么 阅读全文
摘要:
从零开始做一个软渲染器——视锥剔除、齐次裁剪和背面剔除 项目地址:https://github.com/DogWealth/PIRenderer 1. 视锥剔除 最简单的视锥剔除只需要在齐次空间(也就是透视投影变换之后,透视除法之前)中对三角形的顶点判断是否满足如下条件 \[-w\le x \le 阅读全文
摘要:
从0开始做一个软渲染器——透视投影和投影矫正 已经做了一段时间了,一直都没记录。最近实现了一个透视投影的相机,从这一部分记录。 项目地址:https://github.com/DogWealth/PIRenderer 需要注意的是: 以下代码的运算都将向量考虑成行向量,进行从左往右的乘法运算。相比列 阅读全文
摘要:
C++ epoll和多线程实现简单多人聊天室 代码地址ChatRoom: 网络程序设计,聊天实验室代码 (gitee.com) 多路复用(Multiplexing)是一种通过一种机制实现同时监控多个文件描述符(sockets或文件等)的技术。在Linux系统中,epoll 是一种多路复用的机制,用于 阅读全文
摘要:
C++类型转换 1. const_cast const_cast可以将const转换成非const,也可以将非const转换成const。需要注意的是 const_cast只能用于改变指针或者引用的底层const。 底层const和顶层const 首先要弄清楚 const修饰的到底是谁,用顶层表示指 阅读全文
摘要:
类的内存布局 本文参考浅析C++类的内存布局,做了一些修改和补充 1. 无继承的情况 为了得到类的内存布局,先设置一下 输入 /d1 reportAllClassLayout,结果会在输出窗口打印出。最后会打印很多类,基本上最后就是自己的类的布局,也可以指定类。如果写上 /d1 reportSing 阅读全文
摘要:
多态与虚函数 1. 什么是多态 所谓多态,就是同一个函数名具有多种状态,或者说一个接口具有不同的行为;C++的多态分为编译时多态和运行时多态,编译时多态也称为为静态联编,通过重载和模板来实现,运行时多态称为动态联编,通过继承和虚函数来实现。 1.1 编译时多态 重载(Overloading) 是指同 阅读全文
摘要:
Precomputed Radiance Transfer(games202) 关于BRDF可以看看这篇文章基于物理着色:BRDF 物体在不同光照下的表现不同,PRT(Precomputed Radiance Transfer) 是一个计算物体在不同光照下表现的方法。光线在一个环境中,会经历反射,折 阅读全文
摘要:
Shadow Mapping (Games202) 2-Pass Algorithm Pass 1. Render from Light Pass1需要知道光线能照射到的点,也就是从光源所在的视角去渲染模型,有哪些是能被渲染出,哪些会被遮挡住而不被渲染。 我们知道深度测试所做的就是从Camera V 阅读全文