变换矩阵如何从右手坐标系转换为左手坐标系(光线追踪场景适用)
光线追踪左右手坐标系环境光照适配方案
问题1:球面坐标适配调整
需要修改参考资料的球面坐标转笛卡尔坐标逻辑:
参考资料右手系(Y向上、X向右、Z朝屏幕内)的默认转换公式为:
dir.x = cos(azimuth) * sin(polar) dir.y = cos(polar) dir.z = sin(azimuth) * sin(polar)
适配到你的左手系(Z朝屏幕外/向前),只需要将最终输出的方向向量Z分量取反即可,不需要调整方位角、极角的采样逻辑。如果测试时发现环境贴图左右翻转,可额外将方位角替换为2π - azimuth再代入计算。
问题2:世界空间变换矩阵调整
仅对Z分量取反不足以覆盖所有场景,需按不同矩阵类型处理:
- 切空间→世界空间的TBN矩阵:
参考资料右手系中副切线(Bitangent)的计算规则为cross(normal, tangent),左手系需要将叉乘顺序翻转,改为cross(tangent, normal)即可,比手动修改Z分量出错概率更低。 - 模型/相机空间→世界空间的变换矩阵:
你可以选择两种方案任意一种:- 所有从参考资料逻辑导出的坐标、方向向量导入你的引擎前,统一对Z分量取反
- 在变换矩阵的Z轴缩放位(第三行第三列)填
-1,一次性完成坐标系转换
- 现有引擎内的前后遮挡判断、光线方向校验逻辑不需要修改,和你左手系Z值越大越靠前的规则完全对齐。
内容的提问来源于stack exchange,提问作者Marco Altieri
相关产品推荐
相关产品推荐

