mcpField
G
game-vector-math-primitives

game-vector-math-primitives

github.com/lvtd-llc开发159 次安装8 周前更新
代码仓库

关于 game-vector-math-primitives

为游戏代码提供向量运算几何原语的技能,面向需要明确处理方向、投影、面积或距离语义的开发者。它通过选择对应的点积、叉积或混合积,并检查输入假设来减少含糊公式。

主要功能

  1. 01按几何问题选择运算原语
  2. 02点积、叉积与混合积用法
  3. 03检查坐标空间与向量长度
  4. 04保留方向与符号信息
  5. 05覆盖边界情况的测试建议

适用场景

  1. 01实现方向和朝向判断
  2. 02计算三角形法线与面积
  3. 03判断点相对平面的位置
  4. 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 章。

核心工作流

  1. 确定几何问题:角度、投影、侧向、面积、法线、体积、距离、朝向或插值。
  2. 选择能直接回答该问题的基础运算。
  3. 检查输入假设:维度、坐标空间、单位、左右手系、归一化情况和零长度向量。
  4. 当方向或侧向很重要时,保留符号。只有调用方确实需要大小时,才丢弃符号。
  5. 根据含义为中间值命名:normal、signed_area2、light_factor、plane_distance、facing、projection_t。
  6. 添加测试,覆盖方向、反转绕序、正交向量、平行向量和零长度输入。

基础运算指南

点积

以下情况使用点积:

  • 向某个方向投影。
  • 角度/朝向测试。
  • Lambert 风格的光照系数。
  • 沿射线或线段的距离。
  • 检查正交性:根据数值策略,点积应为零。

如果两个向量都已归一化,点积就是它们夹角的余弦。如果需要显示角度,在计算反余弦前应先进行钳制。

叉积和二维叉积标量

以下情况使用叉积:

  • 根据三角形的两条边计算表面法线。
  • 有符号二维方向测试。
  • 二维三角形有符号面积的两倍。
  • 通过接近零的模长检测平行向量。
  • 构建具有已知左右手系的切线坐标系。

对于二维运算,使用标量 a.x * b.y - a.y * b.x,不要构造虚假的三维向量,除非代码库已经使用三维类型。

混合积

以下情况使用标量混合积:

  • 有符号体积。
  • 判断点相对于有向平面的位置。
  • 计算点到平面的距离(需除以平面法线的长度)。
  • 四面体方向和类似包含关系的判定。

当侧向很重要时,保留符号。只有在计算无符号体积或距离时,才取绝对值。

注意事项

  • 未检查向量长度前,切勿进行归一化。
  • 在命名和 API 中区分方向向量与点向量。
  • 法线应与用于比较的向量处于同一空间。
  • 非均匀缩放后,应正确重新计算或变换法线。
  • 确定顺时针或逆时针绕序哪一种是规范形式。
  • 比较距离且不需要开平方时,使用长度平方。
  • 除非确实需要实际角度,否则避免在热路径中使用反三角函数。点积阈值通常开销更低。

常见错误

  • 因为示例使用了单位向量,就把所有向量都当作已归一化。
  • 过早取绝对值,丢失有用的符号信息。
  • 在同一次点积或叉积运算中混用不同坐标空间。
  • 使用角度计算,而点积阈值本可以更简单地解决问题。
  • 反转三角形绕序,却不更新法线、剔除设置或方向判定。

评论

支持 Markdown