1、Object3D的position和scale是三维向量Vector3

因此模型的位置和缩放等变化,也是使用Vector3的属性和方法实现,查询文档Vector3。

三维向量Vector3有xyz三个分量,查看three.js文档你可以知道Vector3对象具有属性.x、.y、.z,Vector3对象还具有.set()等方法。

//new THREE.Vector3()实例化一个三维向量对象
const v3 = new THREE.Vector3(0,0,0);
console.log('v3', v3);
v3.set(10,0,0);//set方法设置向量的值
v3.x = 100;//访问x、y或z属性改变某个分量的值

(1)平移translate-本质也是修改position

.translateOnAxis ( axis : Vector3, distance : Float )

axis -- 一个在局部空间中的标准化向量。

distance -- 将要平移的距离。

在局部空间中沿着一条轴来平移物体,假设轴已被标准化。

.translateX ( distance : Float ) : this 沿着X轴将平移distance个单位。

.translateY ( distance : Float ) : this 沿着Y轴将平移distance个单位。

.translateZ ( distance : Float ) : this 沿着Z轴将平移distance个单位。

(2)缩放scale

属性.scale表示模型对象的xyz三个方向上的缩放比例,默认值是THREE.Vector3(1.0,1.0,1.0)

//x轴方向放大2倍
mesh.scale.x = 2.0;
//网格模型xyz方向分别缩放0.5,1.5,2倍
mesh.scale.set(0.5, 1.5, 2)

2、object3D的rotation属性是欧拉Euler-弧度

模型的角度属性.rotation和四元数属性.quaternion都是表示模型的角度状态,只是表示方法不同,.rotation属性值是欧拉对象Euler,.quaternion属性值是是四元数对象Quaternion

Euler有xyz三个分量,查看three.js文档你可以知道Euler对象具有属性.x、.y、.z、.order,Euler对象还具有.set()等方法。

// 创建一个欧拉对象,表示绕着xyz轴分别旋转45度,0度,90度
const Euler = new THREE.Euler( Math.PI/4,0, Math.PI/2);
//修改属性
Euler.x = Math.PI/4;
Euler.y = Math.PI/2;
Euler.z = Math.PI/4;
Euler.set(0,0, Math.PI/2)

(1)旋转rotate

.rotateOnAxis ( axis : Vector3, angle : Float ) : this
axis —— 一个在局部空间中的标准化向量。
angle —— 角度,以弧度来表示。
在局部空间中绕着该物体的轴来旋转一个物体,假设这个轴已被标准化。

.rotateX ( rad : Float ) : this
.rotateY ( rad : Float ) : this
.rotateZ ( rad : Float ) : this

3、材质的颜色属性是Color对象

//构造函数
const color1 = new THREE.Color();//默认白色
const color2 = new THREE.Color( 0xff0000 );
const color2 = new THREE.Color( '#00ff00');
const color3 = new THREE.Color('rgb(255, 0, 0)');
const color7 = new THREE.Color( 1, 0, 0 ); //3个单独方法
material.color.setRGB(0,1,0);//RGB方式设置颜色
material.color.setHex(0x00ff00);//十六进制方式设置颜色
material.color.setStyle('#00ff00');//前端CSS颜色值设置颜色 //通用方法set()
material.color.set(0x00ff00);//十六进制方式设置颜色
material.color.set('#00ff00');//前端CSS颜色值设置颜色
material.color.set('rgb(0,255,0)');

4、模型材质父类Material

(1)材质半透明设置

material.transparent = true;//开启透明
material.opacity = 0.5;//设置透明度

(2)side属性

material.side = THREE.FrontSide;//前面可以看到,0
material.side = THREE.BackSide;//背面可以看到,1
material.side = THREE.DoubleSide;//双面可见,2

5、克隆.clone()和复制.copy()

(1)克隆.clone()-返回一个新对象

克隆.clone()简单说就是复制一个和原对象一样的新对象

const v1 = new THREE.Vector3(1, 2, 3);
//v2是一个新的Vector3对象,和v1的.x、.y、.z属性值一样
const v2 = v1.clone();
console.log('v2',v2);

注意:通过克隆.clone()获得的新模型和原来的模型共享材质和几何体。

(2)复制-obj2.copy(obj1)

复制.copy()简单说就是把一个对象obj1的属性赋值给另一个对象obj2

const obj1 = new THREE.Vector3(1, 2, 3);
const obj2 = new THREE.Vector3(4, 5, 6);
//读取boj1的赋值给obj2
obj2.copy(obj1);

文章中部分素材选取自Threejs中文网:http://www.webgl3d.cn/

three.js教程3-模型对象、材质material的更多相关文章

  1. three.js实现3D模型展示

    由于项目需要展示3d模型,所以对three做了点研究,分享出来 希望能帮到大家 先看看效果: three.js整体来说 不是很难 只要你静下心来研究研究 很快就会上手的 首先我们在页面上需要创建一个能 ...

  2. 【转载】Node.js 教程(菜鸟教程系列)

    很好的一篇教程:Node.js 教程 简单做下笔记 概述 简单的说 Node.js 就是运行在服务端的 JavaScript. Node.js 是一个基于Chrome JavaScript 运行时建立 ...

  3. three.js 运行3D模型

    HTML  <!DOCTYPE html> <html style="height: 100%;"> <head> <title>m ...

  4. ProBuilder快速原型开发技术 ---不规则模型与材质

    ProBuilder开发模型的强大之处,还在于可以按照要求精确定制不规则模型.克隆镜像模型.给模型着色以及添加材质等,下面笔者就这几方面进行讲解. 一:定制不规则模型 PB有一个专门定制不规则模型的功 ...

  5. JS魔法堂:深究JS异步编程模型

    前言  上周5在公司作了关于JS异步编程模型的技术分享,可能是内容太干的缘故吧,最后从大家的表情看出"这条粉肠到底在说啥?"的结果:(下面是PPT的讲义,具体的PPT和示例代码在h ...

  6. Node.js 教程 04 - 模块系统

    前言: Node.js的模块系统类似于C/C++的文件引用,可以声明对象,也可以定义类 创建对象. 大家这么理解,就简单了. 定义: 为了让Node.js的文件可以相互调用,Node.js提供了一个简 ...

  7. Node.js 教程 05 - EventEmitter(事件监听/发射器 )

    目录: 前言 Node.js事件驱动介绍 Node.js事件 注册并发射自定义Node.js事件 EventEmitter介绍 EventEmitter常用的API error事件 继承EventEm ...

  8. python Django教程 之 模型(数据库)、自定义Field、数据表更改、QuerySet API

    python  Django教程  之 模型(数据库).自定义Field.数据表更改.QuerySet API 一.Django 模型(数据库) Django 模型是与数据库相关的,与数据库相关的代码 ...

  9. JS入门之ActiveXObject对象(转载)

    JS入门之ActiveXObject对象   此对象提供自动化对象的接口.   function ActiveXObject(ProgID : String [, location : String] ...

  10. js基础到精通全面教程--JS教程

    适合阅读范围:对JavaScript一无所知-离精通只差一步之遥的人 基础知识:HTML JavaScript就这么回事1:基础知识 1 创建脚本块 1: <script language=”J ...

随机推荐

  1. #Dijkstra,二进制拆位#洛谷 5304 [GXOI/GZOI2019]旅行者

    题目 分析(\(logk\)次Dijkstra) 首先为什么\(O(nklogn)\)的多次\(dijkstra\)为什么会TLE, 因为中间有许多的冗余状态,即使两点求出的路径是最短的,它也不一定是 ...

  2. 劫持TLS绕过canary pwn89

    劫持TLS绕过canary pwn88 首先了解一下这个东西的前提条件和原理 前提: 溢出字节够大,通常至少一个page(4K) 创建一个线程,在线程内栈溢出 原理: 在开启canary的情况下,当程 ...

  3. OpenAtom OpenHarmony三方库创建发布及安全隐私检测

    OpenAtom OpenHarmony三方库(以下简称"三方库"或"包"),是经过验证可在OpenHarmony系统上可重复使用的软件组件,可帮助开发者快速开 ...

  4. abcde =(ab+cd)的平方

    int i, a, b; for (i = 1000; i < 10000; i++) { a = i / 100; b = i % 100; if ((a + b) * (a + b) == ...

  5. 单链表实现增删查改等操作(python版本)

    单向链表 : SingleLinkedList 节点类属性: 数据域:value 节点存储的数据 地址域:next 指向下一个节点的地址 链表类属性: 头指针:head 指向链表的第一个节点的地址 尾 ...

  6. android 当在github下载一个android项目后

    前言 github是一个很好的社区,有时候呢,我们从android下载项目下来无法build,有很多原因,比如说库不见了,或者说自己没有安装过支持的api版本等,会遇到各种问题. 在此总结一下. 问题 ...

  7. PTA前三次题目集总结

    以下内容是我对PTA三次习题作业最后一题的思路,源码以及总结 学到的java知识大多都来自写题目集 这些题目对我对java的认知与学习起到了不小的帮助 答题判题程序-1 题目内容 设计实现答题程序,模 ...

  8. MySQL—一条查询SQL语句的完整执行流程

    MySQL-一条查询SQL语句的完整执行流程 表结构和数据如下: 我们分析的sql语句如下: select tb_id,tb_name,tb_address from tb_user where tb ...

  9. 力扣500(java&python)-键盘行(简单)

    题目: 给你一个字符串数组 words ,只返回可以使用在 美式键盘 同一行的字母打印出来的单词.键盘如下图所示. 美式键盘 中: 第一行由字符 "qwertyuiop" 组成.第 ...

  10. 力扣92(java&python)-反转链表Ⅱ(中等)

    题目: 给你单链表的头指针 head 和两个整数 left 和 right ,其中 left <= right .请你反转从位置 left 到位置 right 的链表节点,返回 反转后的链表 . ...