Three.js 快速入门教程【四】三维坐标系

请添加图片描述

系列文章目录

Three.js 快速入门教程【一】开启你的 3D Web 开发之旅
Three.js 快速入门教程【二】透视投影相机
Three.js 快速入门教程【三】渲染器
Three.js 快速入门教程【四】三维坐标系
Three.js 快速入门教程【五】动画渲染循环
Three.js 快速入门教程【六】相机控件 OrbitControls
Three.js 快速入门教程【七】常见几何体类型



一、前言

      在 Three.js 的世界中,三维坐标系是构建和理解所有 3D 场景的基础。就如同我们在现实世界中需要用方向和位置来描述物体一样,在虚拟的 3D 场景里,坐标系帮助我们精确地定位和摆放各种对象。本文将详细介绍 Three.js 中的三维坐标系相关知识,并通过具体的代码示例来帮助读者更好地理解和应用。


二、三维坐标系基础

在这里插入图片描述

1、 右手坐标系

Three.js 使用的是右手笛卡尔坐标系。在右手坐标系中,伸出右手,让拇指指向 X 轴正方向,食指指向 Y 轴正方向,那么中指所指的方向就是 Z 轴正方向。在 Three.js 中,X 轴正方向通常表示向右,Y 轴正方向表示向上,Z 轴正方向表示从屏幕向外。
在这里插入图片描述

2、 坐标原点

坐标原点是三维坐标系的中心,即 (0, 0, 0) 点。所有对象的位置都是相对于这个原点来确定的。坐标原点的位置默认处于3D场景的中心。当渲染画布为整个页面窗口大小,原点就在页面正中心。

3、 坐标轴范围

在 Three.js 中,坐标轴的范围是无限的,但在实际场景中,我们通常会根据需要设置合适的范围。例如,当创建一个小的三维模型时,可能会将坐标范围设置在 -10 到 10 之间;而当创建一个大型的场景时,可能需要更大的坐标范围如-1000到1000之间。

4、旋转方向

在这里插入图片描述

Three.js 采用右手定则来确定旋转的正方向:
右手定则:将右手握拳,拇指伸直。如果拇指指向坐标轴的正方向,那么其余四指弯曲的方向就是该坐标轴正方向的旋转方向。
绕 X 轴旋转:正方向是从 Y 轴正半轴向 Z 轴正半轴旋转。
绕 Y 轴旋转:正方向是从 Z 轴正半轴向 X 轴正半轴旋转。
绕 Z 轴旋转:正方向是从 X 轴正半轴向 Y 轴正半轴旋转。


三、在 Three.js 中使用三维坐标系

1、 创建三维对象并设置位置

// 创建一个立方体几何体
const geometry = new THREE.BoxGeometry(1, 1, 1);

// 创建一个材质
const material = new THREE.MeshBasicMaterial({ color: 0x00ff00 });

// 创建一个网格对象
const mesh= new THREE.Mesh(geometry, material);

// 设置立方体的位置
mesh.position.set(2, 1, 0);

// 将立方体添加到场景中
scene.add(mesh);

在上述代码中使用 mesh.position.set(2, 1, 0) 方法将立方体的位置设置为 (2, 1, 0),即 X 轴正方向 2 个单位,Y 轴正方向 1 个单位,Z 轴坐标为 0

2、 物体的旋转

坐标系也影响着物体的旋转。在 Three.js 中,物体的旋转默认是围绕自身 x、y、z 轴方向进行的。例如,我们可以通过以下方式让正方体绕着 y 轴方向旋转:

function animate() {
    requestAnimationFrame(animate);
    // 让正方体绕 y 轴旋转,每次旋转 0.01 弧度
    mesh.rotation.y += 0.01;
    renderer.render(scene, camera);
}

请添加图片描述

注意旋转单位是弧度而非角度
我们可以使用系统提供的工具类THREE.MathUtils.degToRad把角度转换为弧度

        // 绕 X 轴旋转 45 度
        cube.rotation.x = THREE.MathUtils.degToRad(45);
        // 绕 Y 轴旋转 30 度
        cube.rotation.y = THREE.MathUtils.degToRad(30);
        // 绕 Z 轴旋转 60 度
        cube.rotation.z = THREE.MathUtils.degToRad(60);


用Math.PI简单计算,Math.PI代表圆周率 π ,等于 180 度对应的弧度值

        // 绕 X 轴旋转 45 度
        cube.rotation.x = Math.PI/4;
        // 绕 Y 轴旋转 30 度
        cube.rotation.y = Math.PI/6
        // 绕 Z 轴旋转 60 度
        cube.rotation.z =Math.PI/3

四、坐标轴辅助器AxesHelper

在这里插入图片描述

AxesHelper 是 Three.js 中的一个类,用于在三维场景中绘制坐标轴。它以直观的图形方式展示了 Three.js 所使用的右手坐标系,通过不同颜色的线段分别代表 X 轴、Y 轴和 Z 轴,方便开发者确定对象在空间中的位置和方向

具体颜色对应关系如下:

红色(R)线段:代表 X 轴
绿色(G)线段:代表 Y 轴
蓝色(B)线段:代表 Z 轴

简单记忆:RGB分别对应坐标系的XYZ

添加方法:

THREE.AxesHelper(size:Number),其中size表示坐标轴线长度

 // 创建坐标轴辅助器
const axesHelper = new THREE.AxesHelper(40);
scene.add(axesHelper);

在这里插入图片描述

增大size值

const axesHelper = new THREE.AxesHelper(200);

在这里插入图片描述

入参使用注意事项

1、根据场景大小调整:在实际开发中,要根据三维场景的规模来合理设置 size 的值。如果场景较大,使用较小的 size 可能会使坐标轴难以观察;反之,如果场景较小,使用过大的 size 会让坐标轴超出场景范围,影响视觉效果。

2、正值要求:size 必须是一个正值。如果传入负数或者非数值类型的值,可能会导致 AxesHelper 显示异常或者引发错误。

五、开发技巧与常见问题

  • 物体和摄像机默认位置都在(0,0,0),需调整position.z值才能看到物体
  • 摄像机默认位置建议采用俯视视角观察物体,视线与z轴正方向夹角15-60度范围能比较好看清整个物体。(假设物体在原点)其中y值控制相机高度,值越大俯视角越大,z值控制相机与物体距离,值越大物体越小。例如:camera.position.set(0, 10, 50);
  • 旋转操作使用弧度制而非角度制
  • 性能优化避免频繁更新物体position属性

六、总结

理解 Three.js 中的三维坐标系是深入学习和开发 3D 场景的关键。通过掌握右手笛卡尔坐标系和右手定则的基本原理,以及它在创建物体、物体旋转和坐标变换中的应用,我们能够更加灵活地构建出丰富多样的 3D 世界。

更多three.js入门知识点请关注该系列教程后续的更新。

智能网联汽车的安全员高级考试涉及多个方面的专业知识,包括但不限于自动驾驶技术原理、车辆传感器融合、网络安全防护以及法律法规等内容。以下是针对该主题的一些核心知识点解析: ### 关于智能网联车安全员高级考试的核心内容 #### 1. 自动驾驶分级标准 国际自动机工程师学会(SAE International)定义了六个级别的自动驾驶等级,从L0到L5[^1]。其中,L3及以上级别需要安全员具备更高的应急处理能力。 #### 2. 车辆感知系统的组成与功能 智能网联车通常配备多种传感器,如激光雷达、毫米波雷达、摄像头超声波传感器等。这些设备协同工作以实现环境感知、障碍物检测等功能[^2]。 #### 3. 数据通信与网络安全 智能网联车依赖V2X(Vehicle-to-Everything)技术进行数据交换,在此过程中需防范潜在的网络攻击风险,例如中间人攻击或恶意软件入侵[^3]。 #### 4. 法律法规要求 不同国家地区对于无人驾驶测试及运营有着严格的规定,考生应熟悉当地交通法典中有关自动化驾驶部分的具体条款[^4]。 ```python # 示例代码:模拟简单决策逻辑 def decide_action(sensor_data): if sensor_data['obstacle'] and not sensor_data['emergency']: return 'slow_down' elif sensor_data['pedestrian_crossing']: return 'stop_and_yield' else: return 'continue_driving' example_input = {'obstacle': True, 'emergency': False, 'pedestrian_crossing': False} action = decide_action(example_input) print(f"Action to take: {action}") ``` 需要注意的是,“橙点同学”作为特定平台上的学习资源名称,并不提供官方认证的标准答案集;建议通过正规渠道获取教材并参加培训课程来准备此类资格认证考试。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

pixle0

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值