three.js之模型

news2024/9/23 21:23:13

文章目录

  • 简介
  • 网格模型
  • 旋转平移缩放
    • 方法
      • 平移
      • 旋转
    • 属性
    • 缩放
    • 位置
    • 平移
    • 旋转
  • 复制与克隆
    • 复制方法
    • 克隆方法
    • 注意

专栏目录请点击

简介

  • 我们常见的模型有点模型,线模型、网格模型
  • 他们的分类如下

点模型

  • Points
  • 对应的材质为点材质PointsMaterial

线模型

  • Line 线渲染模式
  • LineLoop 闭环先渲染模式
  • LineSegments 剪断线渲染模式
  • 线模型一般对应的是线材质
    • LineBasicMaterial
    • LineDashedMaterial

网格模型

  • Mesh 三角形渲染模式
  • 网格模型一般对应的是网格材质,网格材质比较多
    • MeshBasicMaterial
    • MeshLambertMaterial
    • MeshPhongMaterial
    • MeshStandardMaterial

点模型、线模型、网格模型都是由几何体Geometry和材质Material构成,着三种模型的区别在于对几何体顶点数据的渲染方式不同

网格模型

如果设置网格模型的wireframetrue,所有三角形会以线条的形式绘制出来

var geometry = new THREE.BoxGeometry(100, 100, 100); //创建一个立方体几何对象Geometry
// 三角面(网格)渲染模式   MeshLambertMaterial  MeshBasicMaterial
var material = new THREE.MeshBasicMaterial({
    color: 0x0000ff, //三角面颜色
    wireframe:true,//网格模型以线条的模式渲染
}); //材质对象
var mesh = new THREE.Mesh(geometry, material); //网格模型对象Mesh
scene.add(mesh); //网格模型添加到场景中

在这里插入图片描述

旋转平移缩放

方法

平移

改变position属性

  • translateX ( distance ):沿X轴平移
  • translateY ( distance ):沿Y轴平移
  • translateZ ( distance ):沿Z轴平移
  • translateOnAxis( axis, distance ):沿axis平移

旋转

改变rotation和quaternion属性

  • rotateX(angle):绕X轴旋转
  • rotateY(angle):绕Y轴旋转
  • rotateZ(angle):绕Z轴旋转
  • rotateOnAxis(axis, angle):绕axis轴旋转

属性

  • 缩放:scale,属性值:Vector3
  • 位置:position,属性值:Vector3
  • 角度:rotation,属性值:Euler
  • 四元数:quaternion,属性值:Quaternion

缩放

  1. scale表示模型对象的缩放比例,他的默认值为THREE.Vector3(1.0,1.0,1.0),他是一个三维的向量Vector3
  2. 我们可以使用set方法,对其进行缩放
mesh.scale.set(0.5, 1.5, 2) // 网格模型xyz方向分别缩放0.5,1.5,2倍
mesh.scale.x = 2.0; // x 轴放大2倍

位置

  • 位置属性position也是一个三维向量对象Vector3,通过模型位置属性,可以设置模型在场景中的位置
  • position的默认值是THREE.Vector3(0,0,0)
mesh.position.y = 80; // 设置模型的y坐标
mesh.position.set(80,2,10); // 设置模型的x,y,z坐标

平移

  • 使用translate进行平移
mesh.translateX(100);//沿着x轴正方向平移距离100
mesh.translateZ(-50); // 沿着Z轴负方向平移距离50
  • 沿着自定义的方向移动。
//向量Vector3对象表示方向
var axis = new THREE.Vector3(1, 1, 1);
axis.normalize(); //向量归一化
//沿着axis轴表示方向平移100
mesh.translateOnAxis(axis, 100);

执行translateX()translateY()translateOnAxis()等方法本质上改变的都是模型的位置属性position

旋转

  • 围绕x轴旋转
mesh.rotateX(Math.PI/4);//绕x轴旋转π/4
  • 围绕向量旋转
var axis = new THREE.Vector3(0,1,0);//向量axis
mesh.rotateOnAxis(axis,Math.PI/8);//绕axis轴旋转π/8

执行模型旋转的方法改变的是表示角度状态的属性rotation或者四元属性quaternion,他们都表示角度状态

  • rotation的属性值是欧拉对象Euler
  • quaternion的属性值是四元数对象Quaternion
// 绕着Y轴旋转90度
mesh.rotateY(Math.PI / 2);
//控制台查看:旋转方法,改变了rotation属性
console.log(mesh.rotation);

复制与克隆

three.js大多数对象都有克隆clone和复制copy两个方法

复制方法

A.copy(B)表示B的属性复制给A

var p1 = new THREE.Vector3(1.2,2.6,3.2);
var p2 = new THREE.Vector3(0.0,0.0,0.0);
p2.copy(p1)
// p2向量的xyz变为p1的xyz值

克隆方法

A=B.clone()表示返回一个与B相同的对象给A(不必再新建一个模型)

var p1 = new THREE.Vector3(1.2,2.6,3.2);
var p2 = p1.clone();
// p2对象和p1对象xyz属性相同
console.log(p2);

注意

需要注意的是我们要注意基本类型的数据和引用类型的数据

  1. 对于向量而言,x,y,z这都是他们的基本类型的数据
  2. 对于网格模型而言,材质属性都是对象的索引值

如果克隆的是索引值的话,那么一个对象的属性发生改变,另一个克隆的对象也会发生改变

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/57206.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

AIGC独角兽官宣联手,支持千亿大模型的云实例发布,“云计算春晚”比世界杯还热闹...

梦晨 发自 凹非寺量子位 | 公众号 QbitAI现在AI最火的方向是什么?那必须是AIGC(AI Generated Content,利用人工智能技术来生成内容)。AIGC最火的公司是谁?莫过于开源AI作画模型Stable Diffusion背后的StabilityAI。对于…

【数学】焦点弦定理(?)

因为和焦点弦相关的定理太多,我不会把哪一个公式叫成这样的名字,但百度搜出来就是这个名字 如图,椭圆中焦点弦 AB,∣FB∣k∣FA∣(k>0)AB, |FB|k|FA|(k>0)AB,∣FB∣k∣FA∣(k>0) ,求 ABABAB 倾斜角的余弦值 cos⁡θ\cos\t…

Anntec ZKUXFT XT2 FGPA卡DPDK使用方法

1. 建议环境 CPU Architecture x86_64、aarch64 CPU MHz: 2000以上 Memory 每个node空闲内存超过2G 硬盘 剩余空间大于100M OS Ubuntu,centos,银河麒麟,UOS等Linux …

亚马逊 CTO Werner Vogels:2023 年及未来五大技术趋势预测

近年来,几次全球性危机占据了我们的日常生活,因此看看我们是否可以利用技术来解决这些棘手的人类问题。如今,我们可以从很多互联设备获取数据,例如:可穿戴设备、医疗设备、环境传感器、视频捕捉设备等,数据…

DiffKit -- 世上最牛且开源的表数据对比工具

DiffKit -- 世上最牛且开源的表数据对比工具1. DiffKit Introduction1.1 Introduction1.2 Compatibility1.3 Download2. Quick Start3. User Guide4. Code5. Waken1. DiffKit Introduction 1.1 Introduction DiffKit Website: http://www.diffkit.org/index.html. 1.2 Compati…

excel数据分析

目录1. 对比分析2. 结构分析3. 分布分析3.1 VLooKup模糊匹配功能进行分组3.2 数据透视表进行数值型数据分组1. 对比分析 2. 结构分析 3. 分布分析 定义:根据分析目的,将数值型数据进行等距或不等距的分组 消费分布分析收入分布分析年龄分布分析 定量…

[附源码]Python计算机毕业设计Django交通事故档案管理系统

项目运行 环境配置: Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术: django python Vue 等等组成,B/S模式 pychram管理等等。 环境需要 1.运行环境:最好是python3.7.7,…

思派健康通过上市聆讯:半年亏损约35亿元,马旭广为董事长

12月2日,思派健康科技有限公司(下称“思派健康”)在港交所递交了聆讯后资料集。这代表着,思派健康已经通过港交所上市聆讯,将很快发行并在港交所IPO。 招股书显示,思派健康目前经营三条业务线,…

[附源码]JAVA毕业设计家庭理财管理系统(系统+LW)

[附源码]JAVA毕业设计家庭理财管理系统(系统LW) 目运行 环境项配置: Jdk1.8 Tomcat8.5 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术…

RTK-RTD-SBAS-WAAS-PPP-PPK-WADGPS

1. RTD:英文全称Real Time Differential,中文意思是实时动态码相位差分技术。工作方法是基准站将伪距(或者坐标)修正值(差分值)发给用户接收机,用户接收机根据差分值与本身的观测值算出精确位置…

事业编招聘:共青团市委所属事业单位2022年公开招聘公告

杭州青少年活动中心为共青团杭州市委所属财政适当补助事业单位,因工作需要,公开招聘事业编制工作人员3名。根据《关于贯彻落实国家人事部〈事业单位公开招聘人员暂行规定〉的实施办法》(杭人政〔2006〕5号)和《杭州市事业单位公开…

计网个人作业03

R14. True or false? a a. Suppose Host A is sending a large file to Host B over a TCP connection. If the sequence number for a segment of this connection is m, then the sequence number for the subsequent segment will necessarily be m 1. 假设主机A通过一…

厉害了!阿里内部都用的Spring+MyBatis源码手册,实战理论两不误

目前大部分的 Java 互联网项目,都是用 Spring MVC Spring MyBatis 搭建平台的。 使用 Spring IoC 可以有效的管理各类的 Java 资源,达到即插即拔的功能;通过 Spring AOP 框架,数据库事务可以委托给 Spring 管理,消除…

slam学习 - 基本VO代码学习

本打算学习 orb -slam3 源码,但还是先把《slam 14》上的代码看完再说,至少把整个流程走一遍。 相关参考 https://blog.csdn.net/weixin_44684139/article/details/105305564 https://blog.csdn.net/qq_35590091/article/details/97111744 代码需求分析…

蚁群算法(ant system,AS)

蚁群算法蚂蚁系统(ant system,AS)由Dorigo于1996年发表,文章题目为[《The Ant System : optimization by a colony of cooperating agents》](https://www.docin.com/p-1565494487.html)。在耳熟能详的TSP旅行商问题上AS算法有着不错的效果,这也是被大多…

Dynamsoft Barcode Reader C, C++, .NET, Java SDK

Dynamsoft Barcode Reader 9.6.0 支持 win/mac/linux,没有Python版本提供 Adds support for handling barcode image orientation. November 30, 2022 - 16:06 New Version Features C, C, .NET, Java and Python SDK Added support for handling image orientation. With …

为什么数据库不应该使用外键

当我们想要持久化地存储数据时,使用关系型数据库往往都是最稳妥的选择,这不仅因为今天的关系型数据库种类非常丰富并且稳定,还因为不同社区对关系型数据库的支持都非常完备。我们在前面的文章中曾经分析过 为什么 MySQL 的自增主键不单调也不…

利用Python处理excel表格,pandas分割表格、拆分表格

前言 记录一下,在使用pandas处理excel表格表格时候,关于分割(切分)表格这一块儿的操作。 这个系列会有三篇左右文章,这是第一篇,excel表格切割 我们常说的 excel文件, 在广义上,是指以 xls 或 xlsx 为后缀…

Compose 动画艺术探索之灵动岛

本文为稀土掘金技术社区首发签约文章,14天内禁止转载,14天后未获授权禁止转载,侵权必究! 本篇文章是此专栏的第五篇文章,本篇文章应该是此专栏中最后一篇直接关于动画的文章了,之后文章中可能会提到&#…

SpringBoot @InitBinder注解实现Bean国际化校验

参考资料 参考: 妥当性チェックのエラーメッセージ出力方法 (需翻墙)springMVC之InitBinder的用法1springMVC之InitBinder的用法2springMVC之InitBinder 和 ValidatorSpring MVCにおけるフォームバリデーションの適用事例【後編】 目录一. 前期准备1.1 自定义校验注…