DirectX12
《DirectX12 3D 游戏开发实战》
Q&S
Common
“HANDLE CreateEventExW(LPSECURITY_ATTRIBUTES,LPCWSTR,DWORD,DWORD)”: 无法将参数 2 从“bool”转换为“LPCWSTR” DirectX12\Common\d3dApp.cpp 535
- VS2019 报错,将 CreateEventEx(nullptr, false, false, EVENT_ALL_ACCESS); 第二个参数false改为nullptr;
LNK2019 无法解析的外部符号 _main,函数 “int __cdecl invoke_main(void)” (?invoke_main@@YAHXZ) 中引用了该符号 DirectX12\D3DCommon\MSVCRTD.lib(exe_main.obj)
- 初始化时没有将项目设置为桌面应用程序,右键项目-> 属性 -> 配置属性 -> C/C++ -> 预处理器 -> 预处理器定义中将_CONSOLE 改为 _WINDOWS;../-> 链接器 -> 系统 -> 子系统改为”窗口 (/SUBSYSTEM:WINDOWS)”
Graphics
Linear Algebra
向量绝对值
- ||v|| = √(x^2+y^2+…)
Dot Product 点积、内积 P·Q
几何定义:

代数定义:

主要用于
计算向量夹角余弦值
计算a向量在b向量上的投影: a的单位向量乘以b向量长度再乘以两向量夹角余弦

sqrt(dot(a,a)) = length(a)
Cross Product 外积 P x Q
||PxQ|| = ||P|| ||Q|| sinα
代数定义:

主要用于
- 判断左右,右手螺旋定则,a x b,z为正则在a左侧,反之则右侧,0两个向量平行
- 判断点是否包含于图形

AB x AP, BC x BP, CA x CP, 若z值同向则包含ABC包含P
Orthonormal bases 正交,内积为0则为正交向量
Coordinate frames
ShaderToy
1 | // 平滑过渡 |
JavaScript
类型
- 声明对象
- object:
1
2let person = new Object()
let person = {} - Array:
1
2let arr = new Array()
let arr = {}
- object:
检测类型
基础数据类型
- undefined,null,boolean,number,string,symbol
引用数据类型
- object
typeof
- “undefined”
- “boolean”
- “string”
- “number”
- “object” 对象或者 null
- “function”
引用类型
- instanceof
检测数组
- Array.isArray()
检测类型
1
2Object.prototype.toString.call()
实现重载
1 | function addMethod(obj,name,func){ |
数组操作
- push() 推入数组末尾
- pop() 从数组末尾取出
- unshift() 数组前端添加
- shift() 数组前端取出
栈操作
- push() 推入 pop()取出
队列操作
- push() 推入 shift()取出
操作数组
- slice(a,b) 返回 a-b 之间的值,含 a 不含 b
- splice(a,b,…) 删除 a 开始,b 个值,包含 a. 再插入…
EventLoop
event loop 主要为三个部分,主线程,宏队列,微队列。
宏队列:settimeout/setImmediate、I/O、UI rendering。
微队列:promise.then、process.nextTick
执行顺序
先执行主线程
遇到宏队列(macrotask)放到宏队列(macrotask)
遇到微队列(microtask)放到微队列(microtask)
主线程执行完毕
执行微队列(microtask),微队列(microtask)执行完毕
执行一次宏队列(macrotask)中的一个任务,执行完毕
执行微队列(microtask),执行完毕
依次循环
1 | console.log(1) |
call() bind() apply()
1 | let C = { |
VR
algorithm
排序算法
冒泡排序
1 | const main = () => { |
快速排序
1 | const arr = [3, 7, 8, 4, 5, 1, 2, 6, 9]; |
插入排序
1 | const arr = [3, 7, 8, 4, 5, 1, 2, 6, 9]; |
链表算法
删除链表的第 N 个节点
1 | var removeNthFromEnd = function (head, n) { |
递归算法
blender
模型导出适配Unity
1. 导出前的核心准备(必须做)
在 Blender 的物体模式(Object Mode)下:
- 选中模型。
- 按下 Ctrl + A。
- 选择 **所有变换 (All Transforms)**。
重要:这一步是为了确保物体的初始旋转值为 0,缩放为 1,否则导出的轴向配置会失效。
2. FBX 导出面板配置
在 File > Export > FBX 窗口的右侧设置栏中,修改以下参数:
Transform(变换)选项卡
这是解决轴向问题的核心:
- Apply Scalings(应用缩放):改为 FBX All(非常重要,防止 Unity 里出现 100 倍缩放)。
- Forward(前进方向):选择 -Z Forward。
- Up(向上方向):选择 Y Up。
- Apply Unit(应用单位):勾选。
- Use Space Transform(使用空间变换):务必勾选。
Geometry(几何体)选项卡
- Smoothing(平滑):设置为 Face(防止法线在 Unity 里看起来硬邦邦)。
- Apply Modifiers(应用修改器):勾选。
c
C#
Struct
良好的结构可以优化缓存命中率
C++
explicit
构造用explicit声明,防止非必要的隐式转换
reference &
1 | #include <iostream> |