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

webgl three 模型操作

     模型位置操作是改变相关属性  平移改变位置 缩放改变缩放值 旋转改变角度
     webgl中是4x4矩阵 前三排是原始状态 第四排是改变值
    .position 位置 .scale 缩放 .rotation 绕轴旋转 .quaternion 绕axis旋转
    其实和svg差不多

缩放

缩放是操作对角线

 //    Matrix4x4 scale://[0] : ( sx,  0,  0,  0 )//[1] : ( 0,  sy,  0,  0 )//[2] : ( 0,  0,  sz,  0 )//[3] : ( 0,  0,  0,   1 )//Matrix4x4 scale://[0] : ( 1,  0,  0,  0 )//[1] : ( 0,  1,  0,  0 )//[2] : ( 0,  0,  1,  0 )//[3] : ( 0,  0,  0,  1 )

three方法

geometry1.scale(0.5, 0.5, 0.5);

参数为倍数 大于1放大 小于1缩小

平移
geometry1.translate(-100, -100, -100);

    position和translate的区别
    position是直接相对于原来的点直接改变 不受其他影响直接改变到指定位置
    translate是相对于上一次移动多少距离 受缩放旋转等影响

geometry1.center();

 center和平移对应 可以把平移后的模型回归原始坐标

但是position改变后的坐标无法通过center回到原来位置

旋转

模型分别沿xyz轴旋转

geometry1.rotateX(Math.PI / 4);
geometry1.rotateY(Math.PI / 4);
geometry1.rotateZ(Math.PI / 4);

也可以通过属性直接修改

mesh.rotation.x = Math.PI / 4;
mesh.rotation.y = Math.PI / 4;
mesh.rotation.z = Math.PI / 4;

vector3介绍

//三维向量 就是一个包含xyz的objconst v3 = new THREE.Vector3(0, 0, 0);

模型绕axis轴旋转 

const axis = new THREE.Vector3(0, 1, 0);//向量axismesh.rotateOnAxis(axis, Math.PI / 8);//绕axis轴旋转π/8

axis轴就是中心轴

测试说明

 const axis = new THREE.Vector3(0, 1, 0);//向量axisconst material21 = new THREE.MeshBasicMaterial({ color: 0xF79709, side: THREE.DoubleSide }); //0xff0000设置材质颜色为红色const material22 = new THREE.MeshBasicMaterial({ color: 0xFFFF00, side: THREE.DoubleSide }); //0xff0000设置材质颜色为红色const material23 = new THREE.MeshBasicMaterial({ color: 0x00FF00, side: THREE.DoubleSide }); //0xff0000设置材质颜色为红色const mesh20 = new THREE.Mesh(geometry1, material1);const mesh24 = new THREE.Mesh(geometry1, material21);const mesh22 = new THREE.Mesh(geometry1, material22);const mesh23 = new THREE.Mesh(geometry1, material23);mesh20.position.set(100, 100, 100);//设置组合对象的位置mesh24.position.set(100, 100, 100);mesh22.position.set(100, 100, 100);//设置组合对象的位置mesh23.position.set(100, 100, 100);//加到三维场景中//scene.add(mesh20);scene.add(mesh24);scene.add(mesh22);scene.add(mesh23);//rotateOnAxis沿着中心 指定轴逆时针旋转指定角度mesh20.rotateOnAxis(axis, Math.PI / 16);//绕axis轴旋转π/8mesh24.rotateOnAxis(axis, Math.PI / 16);//绕axis轴旋转π/8mesh22.rotateOnAxis(axis, Math.PI / 8);//绕axis轴旋转π/8mesh23.rotateOnAxis(axis, Math.PI / 4);//绕axis轴旋转π/8

运行结果

Euler和Quaternion

Euler 参数为各坐标轴旋转角度 第四个参数为旋转顺序

const Euler = new THREE.Euler(Math.PI / 4, 0, Math.PI / 2,"XYZ");

后续扩展

相关文章:

  • 【C++】特殊类设计 | 单例设计模式
  • 一、QGroundControl地面站使用介绍
  • 【python】使用函数名而不加括号是什么情况?
  • LeetCode刷题之HOT100之比特位计数
  • PHP在线制作表白网源码
  • 电脑usb数据线共享网络给手机
  • 必应崩了?
  • 高校网络安全管理运维赛WP
  • Springboot+Vue项目-基于Java+MySQL的游戏交易系统(附源码+演示视频+LW)
  • JVM(7):虚拟机性能分析和故障解决工具之jstat工具
  • 五步定位性能瓶颈
  • 第13章 Python建模库介绍
  • 提权方式及原理汇总
  • [力扣题解] 474. 一和零
  • vue 拷贝
  • 【407天】跃迁之路——程序员高效学习方法论探索系列(实验阶段164-2018.03.19)...
  • 【笔记】你不知道的JS读书笔记——Promise
  • 03Go 类型总结
  • Android框架之Volley
  • CAP 一致性协议及应用解析
  • IP路由与转发
  • JavaScript对象详解
  • Just for fun——迅速写完快速排序
  • pdf文件如何在线转换为jpg图片
  • select2 取值 遍历 设置默认值
  • Spring核心 Bean的高级装配
  • vue自定义指令实现v-tap插件
  • 更好理解的面向对象的Javascript 1 —— 动态类型和多态
  • 06-01 点餐小程序前台界面搭建
  • zabbix3.2监控linux磁盘IO
  • ​RecSys 2022 | 面向人岗匹配的双向选择偏好建模
  • ​你们这样子,耽误我的工作进度怎么办?
  • # MySQL server 层和存储引擎层是怎么交互数据的?
  • # 再次尝试 连接失败_无线WiFi无法连接到网络怎么办【解决方法】
  • #{}和${}的区别是什么 -- java面试
  • #1015 : KMP算法
  • (C#)获取字符编码的类
  • (翻译)Quartz官方教程——第一课:Quartz入门
  • (附表设计)不是我吹!超级全面的权限系统设计方案面世了
  • (附源码)spring boot网络空间安全实验教学示范中心网站 毕业设计 111454
  • (顺序)容器的好伴侣 --- 容器适配器
  • (学习日记)2024.02.29:UCOSIII第二节
  • (原)记一次CentOS7 磁盘空间大小异常的解决过程
  • (转)h264中avc和flv数据的解析
  • (转载)虚函数剖析
  • .bat批处理(十):从路径字符串中截取盘符、文件名、后缀名等信息
  • .net core Swagger 过滤部分Api
  • .NET WebClient 类下载部分文件会错误?可能是解压缩的锅
  • .NET 中使用 TaskCompletionSource 作为线程同步互斥或异步操作的事件
  • .NET:自动将请求参数绑定到ASPX、ASHX和MVC(菜鸟必看)
  • @四年级家长,这条香港优才计划+华侨生联考捷径,一定要看!
  • [ 手记 ] 关于tomcat开机启动设置问题
  • []我的函数库
  • [20170713] 无法访问SQL Server
  • [ABP实战开源项目]---ABP实时服务-通知系统.发布模式