当前位置: 首页 > article >正文

Three.js+Vue3+Vite物体位移、缩放与旋转(二)

上篇文章中我们阐述了如何创建一个场景,本篇文章中我们继续讲述其他的功能,主要阐述对于物体即几何体的位移、缩放和旋转,另外再额外先补充上篇文章中未书写到的导入轨道控制器,因为本篇讲述的功能可能需要用到这个。

一、导入轨道控制器

//导入轨道控制器
import { OrbitControls } from 'three/examples/jsm/controls/OrbitControls'
//在方法中添加轨道控制器
const getThree = () => {
//添加轨道控制器---OrbitControls
  const controls = new OrbitControls(camera, renderer.domElement)
// 渲染场景和动画
  const animate = () => {
    //进行更新
    controls.update()
  }
}

二、物体位移与父元素

在上篇文章中我们创建了几何体、材质及元素,接下来我们在这个的基础上,给它添加父元素

1. 创建父元素材质

为了与子元素的材质有所区别,以便于我们更明确的观察两者间的位置,给父元素添加个别的材质

//创建材质--父元素
  const parentMaterial = new THREE.MeshBasicMaterial({ color: 0xff0000 })

2.添加父元素

//添加父元素
  const parentCube = new THREE.Mesh(geometry, parentMaterial)

3.设置父元素与子元素关系

//设置父子关系
  parentCube.add(cube)

4.设置子元素位移

//设置子元素位移缩放--参数分别为x,y,z
  cube.position.set(13, 0, 0)

5.设置父元素位移

//设置父元素位移缩放--参数分别为x,y,z
  parentCube.position.set(-13, 0, 0)

6.场景中添加父元素

 // 加入场景--父元素
  scene.add(parentCube)

7.完整代码及效果

以下只是涉及到上述内容的具体代码

// 创建几何体
  const geometry = new THREE.BoxGeometry(5, 5, 5)
  // 创建材质--子元素
  const material = new THREE.MeshBasicMaterial({ color: 0x00ff00 })
  //创建材质--父元素
  const parentMaterial = new THREE.MeshBasicMaterial({ color: 0xff0000 })
  // 创建网格
  const cube = new THREE.Mesh(geometry, material)
  //添加父子关系
  const parentCube = new THREE.Mesh(geometry, parentMaterial)
  //设置父子关系
  parentCube.add(cube)
  //设置子元素位移缩放--参数分别为x,y,z
  cube.position.set(13, 0, 0)
  //设置父元素位移缩放--参数分别为x,y,z
  parentCube.position.set(-13, 0, 0)

  // 加入场景--父元素
  scene.add(parentCube)

从下面的图中我们不难发现,子元素的位置居于坐标轴中心位置,而父元素则在设置位置的x:-13位置,其实子元素的位置还是设置的x:13的位置,只不过它现在的相对位置不是坐标轴原点,而是父元素的位置,父元素的(-13,0,0)这个才是它的原点。

三、物体的缩放与旋转

 1.物体的缩放

对于物体的放大和缩小所用到的方法是scale,这个其实还是比较简单的

//对物体进行缩放--局部缩放
  cube.scale.set(2, 2, 2)

2.物体的旋转

//对物体进行旋转--欧拉角旋转
  cube.rotation.x = Math.PI / 4

 


http://www.kler.cn/a/506330.html

相关文章:

  • Redis 3.2.1在Win10系统上的安装教程
  • 【Vim Masterclass 笔记14】S07L29 + L30:练习课08 —— Vim 文本对象同步练习(含点评课内容)
  • 【AI】【RAG】使用WebUI部署RAG:数据优化与设置技巧详解
  • SpringBoot入门实现简单增删改查
  • 【k8s】用户和服务账户联系(user、serviceaccount、sa)
  • 【计算机网络】深入浅出计算机网络
  • 【MySQL】使用C语言链接
  • R语言基础| 方差分析
  • 浅谈云计算11 | 虚拟机的主要功能
  • (RAG系列)FastGPT批量添加索引
  • WXML模版语法-事件绑定
  • 前端常见的设计模式之【单例模式】
  • 【机器学习:二十三、迁移学习】
  • 冯·诺依曼体系结构:计算机科学的奠基石
  • linux、华为modelarts、昇腾服务器、docker中,服务进程还在,但是不在运行状态,没有响应
  • 133、sqlserver查看哪个表被锁表了以及解锁方法
  • MIAOYUN信创云原生项目亮相西部“中试”生态对接活动
  • uniapp省市区懒加载封装
  • 【Linux】12.Linux进程概念(1)
  • products页面出现多选框后,能够直接将勾选的products删除吗?而不用跳转到flow再删除。例如将勾选的products传给flow
  • vmware虚拟机配置ubuntu 18.04(20.04)静态IP地址
  • 如何利用AI进行用户体验测试
  • 中职网络建设与运维ansible服务
  • jsx语法中el-table-v2中cellRender如何使用动态绑定
  • GaussDB中的Vacuum和Analyze
  • 3D打印汽车零部件