关于 game-vector-math-primitives
为游戏代码提供向量运算几何原语的技能,面向需要明确处理方向、投影、面积或距离语义的开发者。它通过选择对应的点积、叉积或混合积,并检查输入假设来减少含糊公式。
主要功能
- 01按几何问题选择运算原语
- 02点积、叉积与混合积用法
- 03检查坐标空间与向量长度
- 04保留方向与符号信息
- 05覆盖边界情况的测试建议
适用场景
- 01实现方向和朝向判断
- 02计算三角形法线与面积
- 03判断点相对平面的位置
- 04处理投影与距离计算
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ lvtd-llc/ skills --skill game-vector-math-primitives安装后在 Claude Code 中输入/game-vector-math-primitives确认已加载。
详细介绍
游戏向量数学基础运算
当游戏代码依赖几何含义至关重要的向量运算时,使用此技能。优先使用清晰的基础运算和能体现意图的命名,而不是直接粘贴晦涩公式。
主要来源:Oleksandr Kaleniuk 著《Geometry for Programmers》 (https://www.manning.com/books/geometry-for-programmers),经改编和转述,尤其是第 2 章和第 9 章。
核心工作流
- 确定几何问题:角度、投影、侧向、面积、法线、体积、距离、朝向或插值。
- 选择能直接回答该问题的基础运算。
- 检查输入假设:维度、坐标空间、单位、左右手系、归一化情况和零长度向量。
- 当方向或侧向很重要时,保留符号。只有调用方确实需要大小时,才丢弃符号。
- 根据含义为中间值命名:
normal、signed_area2、light_factor、plane_distance、facing、projection_t。 - 添加测试,覆盖方向、反转绕序、正交向量、平行向量和零长度输入。
基础运算指南
点积
以下情况使用点积:
- 向某个方向投影。
- 角度/朝向测试。
- Lambert 风格的光照系数。
- 沿射线或线段的距离。
- 检查正交性:根据数值策略,点积应为零。
如果两个向量都已归一化,点积就是它们夹角的余弦。如果需要显示角度,在计算反余弦前应先进行钳制。
叉积和二维叉积标量
以下情况使用叉积:
- 根据三角形的两条边计算表面法线。
- 有符号二维方向测试。
- 二维三角形有符号面积的两倍。
- 通过接近零的模长检测平行向量。
- 构建具有已知左右手系的切线坐标系。
对于二维运算,使用标量 a.x * b.y - a.y * b.x,不要构造虚假的三维向量,除非代码库已经使用三维类型。
混合积
以下情况使用标量混合积:
- 有符号体积。
- 判断点相对于有向平面的位置。
- 计算点到平面的距离(需除以平面法线的长度)。
- 四面体方向和类似包含关系的判定。
当侧向很重要时,保留符号。只有在计算无符号体积或距离时,才取绝对值。
注意事项
- 未检查向量长度前,切勿进行归一化。
- 在命名和 API 中区分方向向量与点向量。
- 法线应与用于比较的向量处于同一空间。
- 非均匀缩放后,应正确重新计算或变换法线。
- 确定顺时针或逆时针绕序哪一种是规范形式。
- 比较距离且不需要开平方时,使用长度平方。
- 除非确实需要实际角度,否则避免在热路径中使用反三角函数。点积阈值通常开销更低。
常见错误
- 因为示例使用了单位向量,就把所有向量都当作已归一化。
- 过早取绝对值,丢失有用的符号信息。
- 在同一次点积或叉积运算中混用不同坐标空间。
- 使用角度计算,而点积阈值本可以更简单地解决问题。
- 反转三角形绕序,却不更新法线、剔除设置或方向判定。
评论
支持 Markdown