什么是 NDC 坐标?什么是世界坐标?

什么是 NDC 坐标(归一化设备坐标)?

定义

NDC(Normalized Device Coordinates) 是三维图形渲染管线中的中间坐标系统,范围为 [-1, 1](x、y、z 轴均为此范围)。它是设备无关的标准化坐标,用于将不同分辨率的屏幕坐标统一到同一空间。

核心特点

  1. 范围与方向

    • x 轴:左边界为 -1,右边界为 1(水平方向)。
    • y 轴:下边界为 -1,上边界为 1(垂直方向,与屏幕坐标系的 Y 轴方向相反,屏幕 Y 轴通常从上到下)。
    • z 轴:近裁剪面为 -1,远裁剪面为 1(深度方向)。
  2. 转换过程

    • 屏幕坐标(像素坐标)→ NDC:通过标准化公式(如 (x/width)*2-1)转换,消除设备分辨率差异。
    • 示例(屏幕坐标转 NDC):
      // 屏幕坐标 (x: 300, y: 200),屏幕宽高 (width: 600, height: 400)
      ndcX = (300/600)*2 - 1 = 0;  // 水平居中
      ndcY = -(200/400)*2 + 1 = 0; // 垂直居中(Y 轴方向反转)
      
  3. 作用

    • 为后续的投影(如 unproject)提供标准化输入,确保不同设备的坐标一致性。
    • 是图形管线中 “裁剪” 和 “视口变换” 的中间环节。

什么是世界坐标(World Coordinates)?

定义

世界坐标是三维场景的全局坐标系,用于描述物体在场景中的绝对位置(类似现实世界的 “地图坐标”)。每个物体的局部坐标(Local Coordinates)通过平移、旋转、缩放等变换后,最终转换为世界坐标。

核心特点

  1. 全局唯一性

    • 场景中所有物体的位置均以世界坐标为基准,例如:
      // Three.js 示例:设置物体的世界坐标
      const mesh = new THREE.Mesh(geometry, material);
      mesh.position.set(10, 5, 20); // 世界坐标 (x:10, y:5, z:20)
      
  2. 与其他坐标的关系

    • 局部坐标 → 世界坐标:通过物体的变换矩阵(模型矩阵)转换。
    • 世界坐标 → 视图坐标:通过相机的视图矩阵(View Matrix)转换(相机的位置和朝向决定视图空间)。
    • 视图坐标 → NDC:通过投影矩阵(Projection Matrix)转换。
  3. 应用场景

    • 物体碰撞检测、路径规划、全局光照计算等需要全局定位的场景。

两者的区别与联系

维度NDC 坐标世界坐标
范围x/y/z ∈ [-1, 1]无固定范围(取决于场景规模)
设备相关性设备无关(标准化)设备无关(场景逻辑坐标)
用途屏幕渲染的中间表示(投影前的标准化)场景中物体的绝对位置表示
转换方向屏幕坐标 → NDC → 世界坐标(反投影)局部坐标 → 世界坐标 → 视图坐标 → NDC

实际应用(结合 Three.js 代码):

// 屏幕坐标 (screenPos) → NDC → 世界坐标(反投影)
screenPosition.x = (screenPos.x / width) * 2 - 1; // 转 NDC X
screenPosition.y = -(screenPos.y / height) * 2 + 1; // 转 NDC Y(Y 轴反转)
screenPosition.unproject(camera); // NDC → 世界坐标(利用相机的投影和视图矩阵)

总结

  • NDC 坐标:屏幕渲染的 “中间桥梁”,消除设备差异,为投影提供标准化输入。
  • 世界坐标:场景的 “全局地图”,描述物体的绝对位置,是图形管线的起点(局部→世界→视图→NDC)。
  • 关键联系:通过相机的 unproject 方法,NDC 坐标可反转为世界坐标(如点击屏幕某点,获取场景中的三维位置)。

类比理解:

  • NDC:相当于 “标准化地图网格”(无论屏幕多大,都用 [-1,1] 表示)。
  • 世界坐标:相当于 “现实世界的经纬度”(全局唯一,不受屏幕大小影响)。
  • 转换过程:屏幕点击位置(如 “地图上的某个像素点”)→ 标准化网格(NDC)→ 反查经纬度(世界坐标)。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Super毛毛穗

今天晚饭加什么?

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值