【threejs教程】场景视角切换的神器:轨道控制器

简介: 【8月更文挑战第5天】threejs教程:场景视角切换的神器,轨道控制器

简介

本系列教程需要具备threejs的基础入门知识,了场景、几何体、相机等基础概念。

使用threejs的基础知识,可以很快的开发一个3D页面。
GIF 2023-11-16 15-26-23.gif
其核心代码如下:

<template>
  <div class="wrap" ref="threeContainer"></div>
</template>

<script setup>
import * as THREE from "three";
import {
   
    onMounted, ref } from "vue";

const threeContainer = ref(null);

// 1、创建3D场景对象Scene
const scene = new THREE.Scene();
// 添加网格地面
const gridHelper = new THREE.GridHelper(200, 10);
scene.add(gridHelper);

// 2、创建几何体Geometry模型
const geometry = new THREE.BoxGeometry(20, 20, 20);
const material = new THREE.MeshBasicMaterial({
   
   
  color: "blue",
});
const mesh = new THREE.Mesh(geometry, material);
// 设置模型mesh的xyz坐标
mesh.position.set(0, 40, 0);
scene.add(mesh);

// 3、使用虚拟相机观察模型
const camera = new THREE.PerspectiveCamera();
camera.position.set(0, 50, 200);
camera.lookAt(0, 0, 20); //坐标原点

// 4、渲染3D场景到DOM上
const width = 800; //宽度
const height = 500; //高度
const renderer = new THREE.WebGLRenderer();
renderer.setSize(width, height); //设置three.js渲染区域的尺寸(像素px)
// 动画
renderer.setAnimationLoop(animation);
function animation() {
   
   
  mesh.rotation.x += 0.05;
  mesh.rotation.y += 0.05;
  renderer.render(scene, camera);
}

onMounted(() => {
   
   
  threeContainer.value.appendChild(renderer.domElement);
});
</script>

<style scoped></style>

什么是轨道控制器

Orbit controls(轨道控制器)可以使得相机围绕目标进行轨道运动。
简单拉来说,使用轨道控制器可以让我们的3D场景具备如下功能:

  • 使用鼠标左键旋转物体改变观察视角
  • 使用鼠标滚轮缩放视图
  • 使用右键平移视GIF 2023-11-16 15-52-13.gif

    OrbitControls API

    官方API地址:https://threejs.org/docs/index.html#examples/zh/controls/OrbitControls.enableZoom

    语法简介

    要使用轨道控制器,必须显示的导入该组件

    import { OrbitControls } from 'three/addons/controls/OrbitControls.js';
    

    OrbitControls使用方法如下

    OrbitControls( object : Camera, domElement : HTMLDOMElement )
    
  • object: (必须)将要被控制的相机。该相机不允许是其他任何对象的子级,除非该对象是场景自身。

  • domElement: 用于事件监听的HTML元素。

    代码示例

    import { OrbitControls } from "three/addons/controls/OrbitControls.js";
    // .....
    // 创建轨道控制器
    const controls = new OrbitControls( camera, renderer.domElement );
    
    GIF 2023-11-16 16-16-25.gif

    事件

    OrbitControls有三个事件
事件名 触发机制
change 当摄像机被组件改变时触发。
start 初始化交互时触发。
end 当交互结束时触发。

change事件代码示例
GIF 2023-11-16 16-31-22.gif

属性

OrbitControls属性很多,我们展示一些常用属性
image.png

阻尼效果演示

阻尼就是阻力的意思,如果没有阻力,根据牛顿定律,运动的物体将一直保持匀速直线运动。这意味着,如果开启了阻尼效果,旋转物体后,由于惯性,场景会继续运动。阻尼越小,物体运动的时间越久。

// 添加阻尼
controls.enableDamping = true;
controls.dampingFactor = 0.01;
// 必须调用.update()
function animation() {
   
   
  mesh.rotation.x += 0.05;
  mesh.rotation.y += 0.05;
+ controls.update();
  renderer.render(scene, camera);
}

GIF 2023-11-16 17-04-15.gif

自动旋转演示

// 开启自动旋转
controls.autoRotate = true;
// 设置自动旋转速度
controls.autoRotateSpeed = 5;

GIF 2023-11-16 17-09-32.gif

相关文章
|
2月前
|
图形学 C#
超实用!深度解析Unity引擎,手把手教你从零开始构建精美的2D平面冒险游戏,涵盖资源导入、角色控制与动画、碰撞检测等核心技巧,打造沉浸式游戏体验完全指南
【8月更文挑战第31天】本文是 Unity 2D 游戏开发的全面指南,手把手教你从零开始构建精美的平面冒险游戏。首先,通过 Unity Hub 创建 2D 项目并导入游戏资源。接着,编写 `PlayerController` 脚本来实现角色移动,并添加动画以增强视觉效果。最后,通过 Collider 2D 组件实现碰撞检测等游戏机制。每一步均展示 Unity 在 2D 游戏开发中的强大功能。
140 6
|
2月前
|
图形学 开发者 存储
超越基础教程:深度拆解Unity地形编辑器的每一个隐藏角落,让你的游戏世界既浩瀚无垠又细节满满——从新手到高手的全面技巧升级秘籍
【8月更文挑战第31天】Unity地形编辑器是游戏开发中的重要工具,可快速创建复杂多变的游戏环境。本文通过比较不同地形编辑技术,详细介绍如何利用其功能构建广阔且精细的游戏世界,并提供具体示例代码,展示从基础地形绘制到植被与纹理添加的全过程。通过学习这些技巧,开发者能显著提升游戏画面质量和玩家体验。
105 3
|
2月前
|
图形学 C# 开发者
Unity粒子系统全解析:从基础设置到高级编程技巧,教你轻松玩转绚丽多彩的视觉特效,打造震撼游戏画面的终极指南
【8月更文挑战第31天】粒子系统是Unity引擎的强大功能,可创建动态视觉效果,如火焰、爆炸等。本文介绍如何在Unity中使用粒子系统,并提供示例代码。首先创建粒子系统,然后调整Emission、Shape、Color over Lifetime等模块参数,实现所需效果。此外,还可通过C#脚本实现更复杂的粒子效果,增强游戏视觉冲击力和沉浸感。
132 0
|
2月前
|
开发者 图形学 C#
深度解密:Unity游戏开发中的动画艺术——Mecanim状态机如何让游戏角色栩栩如生:从基础设置到高级状态切换的全面指南,助你打造流畅自然的游戏动画体验
【8月更文挑战第31天】Unity动画系统是游戏开发的关键部分,尤其适用于复杂角色动画。本文通过具体案例讲解Mecanim动画状态机的使用方法及原理。我们创建一个游戏角色并设计行走、奔跑和攻击动画,详细介绍动画状态机设置及脚本控制。首先导入动画资源并添加Animator组件,然后创建Animator Controller并设置状态间的转换条件。通过编写C#脚本(如PlayerMovement)控制动画状态切换,实现基于玩家输入的动画过渡。此方法不仅适用于游戏角色,还可用于任何需动态动画响应的对象,增强游戏的真实感与互动性。
78 0
|
4月前
|
图形学
【unity小技巧】unity最完美的CharacterController 3d角色控制器,实现移动、跳跃、下蹲、奔跑、上下坡、物理碰撞效果,复制粘贴即用
【unity小技巧】unity最完美的CharacterController 3d角色控制器,实现移动、跳跃、下蹲、奔跑、上下坡、物理碰撞效果,复制粘贴即用
265 0
|
5月前
|
vr&ar C# 图形学
【Unity 3D】VR飞机动态拆装及引擎开关控制案例(附源码和演示视频 超详细)
【Unity 3D】VR飞机动态拆装及引擎开关控制案例(附源码和演示视频 超详细)
102 0
|
移动开发 前端开发 JavaScript
分享8个前端可以制作360度WebVr全景视图框架
分享8个前端可以制作360度WebVr全景视图框架
1738 0
分享8个前端可以制作360度WebVr全景视图框架
|
Java Linux vr&ar
【EasyAR实战项目】图像追踪+触屏交互
全网首发EasyAR图像追踪实战项目,零基础也能做AR项目!本文章从下载Unity、EasyAR SDK开始,到模型的导入再到图像识别的处理到交互脚本的编写最后到项目的导出和运行结果,步骤解析的十分详细,非常适合新手小白做AR开发。
451 0
|
Python
Python实现超级玛丽游戏系列教程04背景滚动及摄像机(Camera)原理
Python实现超级玛丽游戏系列教程04背景滚动及摄像机(Camera)原理
106 0
|
算法 图形学 开发者
超逼真渲染!虚幻引擎技术大牛解读全局光照系统Lumen(1)
超逼真渲染!虚幻引擎技术大牛解读全局光照系统Lumen
170 0