抱歉,您的浏览器无法访问本站
本页面需要浏览器支持(启用)JavaScript
了解详情 >

雨雪图 现在游戏大多会有天气系统,尤其是雨天雪天 在雨天和雪天静态物上面要覆盖一层雪,可以参考Shadow Map的方法,从顶部向下绘制一张深度图(一般只收集静态物),运行时比较深度即可判断像素是否在最上面 值得注意的是玻璃等半透明物体按不透明的方式绘制深度图 参考 Water drop

C++获取CPU型号 不同CPU的指令集有所差异,尤其是在使用SIMD之类的feature时要十分注意,以MSVC获取CPU型号为例 核心是使用指令__cpuid,其实你也可以__asm {}自己写汇编 #include <iostream>#include <string>#include <intrin.h>#include &...

Clustered Shading 《Clustered Deferred and Forward Shading》阅读笔记 Cluster:组,簇,一堆物体的群集,将一个个零散的小物体整合为一个Cluster,可以加速剔除 Cluster的思路跟TBS思路很像,也是将view进行切分,但是每一个Cluster拥有一个固定的三维边界(坐标和法线),于是解决了Tiles退化的问题 光照计算...

视锥剔除 《Optimized View Frustum Culling Algorithms for Bounding Boxes》阅读笔记 剔除的目的是减少要绘制不可见的物体,视锥剔除(View Frustum Culling,VFC)是使用一个平头四棱锥和场景中物体做可见性测试,实现快速剔除 为了加速视锥和场景物体的相交测试速度,我们会使用Bounding Volume(比如AA...

C++20下spdlog使用踩坑 spdlog是一个开源的被广泛使用的C++log系统,于是我模仿Piccolo引擎写了一个Log系统,结果由于C++不允许连续进行两次及以上的用户自定义的隐式构造,使得spdlog的log函数无法正确推断匹配Args...,最后在公司C++高手的帮助下成功解决了问题,于是在此记录一下踩坑历程 最初的版本 我参考开源项目的实现,使用spdlog写了一个简易的L...

glTF入门 glTF介绍 DCC生成的模型往往不能直接被渲染引擎使用,比如包含冗余数据、缺失场景数据、缺少动画状态机、压缩率不足等。许多引擎拥有一个Asset Pipeline,负责将不同DCC导出的各类数据转化为引擎可以直接使用的资源文件,比如UE的Cooking操作 glTF是一种表示3D场景的模型格式,它的目标就是尽可能保留3D场景相关的数据(使用json描述场景),为渲染引擎提供无...

无状态方法 线程安全 同事经常跟我强调线程安全的重要性,比如下面这段代码,id是一个静态成员变量,被所有Student类的对象共享,在多线程环境下可能会造成不确定行为 class Student{private: static int id = 0;public: int getId() { return id; }}int Student::i...

内存分配 最近看了一些关于内存分配的分享,发现操作系统相关的知识都忘光了,于是打算借助Linux内核的内存分配机制,简单复习一下内存分配相关的理论知识 程序运行时不断进行内存的申请与释放,高效的分配方式不仅能提高内存的利用率,还能提高性能。 Linux内存分配原理 地址 程序需要装入内存才能运行,程序开始的位置相较于内存0地址会有一段偏移,这个偏移被称为物理地址。 在程序内部,以程序开头...

C++函数调用 C++支持两种函数调用方式,__stdcall和__cdecl,两者对栈帧(stack frame)的处理方式不同,__stdcall是由被调用函数来清理栈帧,__cdecl是由调用函数来清理栈帧。一旦混用,容易引发错误 两者混用可能会导致栈帧没有被释放或者被连续释放两次 stack frame 栈帧用于维护函数调用的上下文信息,在函数调用时,会在栈上分配一块内存,用于存...

文明6like 4X游戏 文明6是一个经典的历史类4x游戏 explore(探索) expand(扩张) exploit(开发) exterminate(消灭) 文明6的体验 游戏体验 最近玩了几百小时的文明六,感觉意犹未尽,却又索然无味,想抽掉一些内容,自己做一个简易版的文明6,个人希望加强塔防、改良、贸易等元素,减少兵种操作、城市铺设。 我玩文明6,最让人兴奋的就是地块高额的产出(尤...