首页 > 其他分享 >three.js教程3-模型对象、材质

three.js教程3-模型对象、材质

时间:2023-02-08 20:55:06浏览次数:64  
标签:教程 material const Vector3 THREE three new js Euler

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/

标签:教程,material,const,Vector3,THREE,three,new,js,Euler
From: https://www.cnblogs.com/tiandi/p/17070274.html

相关文章

  • 阿里云天池 天池实验室DSW探索者版 免费GPU 天池notebook教程
    1、DSW教程点击天池notebook,进入我的实验室选择一个私有项目,点击编辑集成机器学习PAIDSW(DataScienceWorkshop)探索者版开发环境左边文件管理,中间工作区,右边是计算资源。在......
  • Jupyter notebook基础教程(启动,汉化,操作)
    1、启动进入需要启动的目录,shift+右键启动终端然后在终端中输入命令即可启动jupyter到当前目录(通过终端的链接访问程序)jupyternotebookjupyternotebook--port9999#......
  • C# Newtonsoft.Json null 转空值{} 把对象null转换{}为JSON字符串
    ///<summary>///把对象null转换{}为JSON字符串///</summary>///<paramname="o">对象</param>///<returns>JSON字符串</return......
  • AIML教程_编程入门自学教程_菜鸟教程-免费教程分享
    教程简介AIML<that>标签-从简单和简单的步骤学习AIML,从基本到高级概念,包括简介,环境设置,第一个应用程序,基本标签,<star>等。标签,<srai>标签,<随意>标记,<set>标记,<get>......
  • js实现简单倒计时
    <!DOCTYPEhtml><html><head><metacharset="utf-8"><metaname="viewport"content="width=device-width,initial-scale=1"><title></title></head>......
  • 前端面试题(1) js
    keywords:JS深拷贝深拷贝:针对【引用】类型,传递的是地址,多变量同时指向同一块内存地址(比如某个对象)letobj1={ //1.不需要处理 //基本数据类型可以不做处理,typeof!==......
  • 前端页面分页算法 js+php
    实现效果: 实现思路:通过当前选中页码数值和总页码数量,计算返回结果,以数组的形式返回。遍历数组内容,完成页面渲染。 php算法:/***getNavigatePage**@......
  • 数组的常用方法 js 230208
    判断是否是数组头部操作头部添加头部删除尾部操作未位添加push未位删除pop排序sort方法,接收一个参数,完成排序reverse方法,反转查找indexOflastIndexOf转字符串数组拼字符串字......
  • js实现页面窗口录制
    一、在线demo1、在线demo地址:http://www.lb0125.com/videoRecord.html 注:目前测试发现只有在chrome浏览器里可以使用二、直接上代码<!DOCTYPEhtml><html><head>......
  • JSP概念 原理 脚本
    JSP概念JavaServerPages:java服务端页面可以理解为:一个特殊页面,其中既可以指定定义html标签 有可以定义java代码用于简化书写原理......