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

网站备案时 首页wordpress百家号模版

网站备案时 首页,wordpress百家号模版,内容电商平台有哪些,上海网站建设哪家公司好嗨#xff0c;我是小路。今天主要和大家分享的主题是“threeJsvue 轻松切换几何体贴图”。 想象一下#xff0c;手头上正好有个在线3D家具商店#xff0c;用户不仅可以看到产品的静态图片#xff0c;还能实时更换沙发的颜色或材质#xff0c;获得真实的购物体验。…        嗨我是小路。今天主要和大家分享的主题是“threeJsvue 轻松切换几何体贴图”。         想象一下手头上正好有个在线3D家具商店用户不仅可以看到产品的静态图片还能实时更换沙发的颜色或材质获得真实的购物体验。这就是我们今天分享的主题——通过简单的几行代码您可以赋予任何3D几何体不同的外观增强用户的参与感。 几何体贴图示例 一、示例介绍 设计一个几何体并通过gui切换3d几何体上不同的图片。就像LOL切换皮肤只是这个是最基础的。 1.加载图片 定义通过纹理贴图加载器将图片加载到几何体的材质里面。主要是放入.map属性里面。 //纹理贴图加载器TextureLoader const texLoader new THREE.TextureLoader(); 2.图片偏移动画 定义将图片距离初始位置平移一定的距离。 //纹理U方向偏移 将图片进行偏移 texture.offset.x 0.5; //渲染 const render () { //贴图动画每次渲染时动画平移0.01texture?texture.offset.x 0.01:null;renderer.render(scene, camera); //执行渲染操作meshObjx.bool ? mesh.rotateX(0.01) : null;//每次绕y轴旋转0.01弧度meshObjy.bool ? mesh.rotateY(0.01) : null;//每次绕y轴旋转0.01弧度meshObjz.bool ? mesh.rotateZ(0.01) : null;//每次绕y轴旋转0.01弧度//重复渲染requestAnimationFrame(render);//请求再次执行渲染函数render渲染下一帧 } 3.图片显示面 定义一般几何体默认有两个面一个是正面一个是背面。当图片切换成矩形平面时这种效果更为明显。具体的效果可看详情图。 child.material.side THREE.SingleSide 二、实例代码 1、封装代码 const imgArr reactive({ img: }) let texture reactive(); //更换模型图片 const setImg () {//.load()方法加载图像返回一个纹理对象Textureconst girlTexture texLoader.load(./girl.png);const goalTexture texLoader.load(./goal.png);//切换模型上图片gui.add(imgArr, img, { 可爱: 1, 目标: 2 }).name(模型图片).onChange((value) {//遍历mesh下所有的对象mesh.traverse((child) {if (child instanceof THREE.Mesh) {if ([1, 2].includes(value)) {switch (value) {case 1:texture girlTexturebreak;case 2:texture goalTexturebreak;default:break;}//给模型进行贴图// 设置阵列模式texture.wrapS THREE.RepeatWrapping;texture.wrapT THREE.RepeatWrapping;// uv两个方向纹理重复数量 2*2 4个图片 自动将图片按照制定的数量平铺texture.repeat.set(2, 2);//注意选择合适的阵列数量//纹理U方向偏移 将图片进行偏移texture.offset.x 0.5;child.material.map texture;//THREE.SingleSide 单面THREE.DoubleSide 双面 默认是双面贴图console.log(THREE.DoubleSide)child.material.side THREE.SingleSide//开启透明child.material.transparent false//更新模型child.material.needsUpdate true;}}})}) } 2、整个示例代码 templatediv classpageBoxdiv classleftBox refleftRef/divdiv classrightBox refrightRef :style{ background: bgColor }/div/div/template script setup import { onMounted, reactive, ref } from vue; import * as THREE from three; // 引入轨道控制器扩展库OrbitControls.js import { OrbitControls } from three/addons/controls/OrbitControls.js; // 设置相机控件轨道控制器OrbitControls// 引入dat.gui.js的一个类GUI import { GUI } from three/addons/libs/lil-gui.module.min.js; const bgColor ref() // 实例化一个gui对象 const gui new GUI();const leftRef ref(); const rightRef ref() const meshObjx reactive({ bool: false }) const meshObjy reactive({ bool: false }) const meshObjz reactive({ bool: false }) // 定义相机输出画布的尺寸(单位:像素px) let width 800; //宽度 let height window.innerHeight; //高度 // 创建3D场景对象Scene const scene new THREE.Scene();// 实例化一个透视投影相机对象 const camera new THREE.PerspectiveCamera(50, width / height, 2, 6000);//创建一个平面矩形对象Geometry const geometry new THREE.PlaneGeometry(150, 150, 150);// //纹理贴图加载器TextureLoader const texLoader new THREE.TextureLoader();//创建一个材质对象Material const material new THREE.MeshBasicMaterial({color: 0xffffff,//0xff0000设置材质颜色为红色opacity: 0.5, }); //将集合形体和材质融合 const mesh new THREE.Mesh(geometry, material); //网格模型对象Mesh// 创建渲染器对象 const renderer new THREE.WebGLRenderer();onMounted(() {initData()render();//添加相机空间const controls new OrbitControls(camera, renderer.domElement);// 如果OrbitControls改变了相机参数重新调用渲染器渲染三维场景controls.addEventListener(change, function () {renderer.render(scene, camera); //执行渲染操作});//监听鼠标、键盘事件//当窗口发生改变时触发时间重新渲染window.onresize () {height window.innerHeight;width window.innerWidth / 2;renderer.setSize(width, height); //设置three.js渲染区域的尺寸(像素px)initData()} }) const initData () {//设置网格模型在三维空间中的位置坐标默认是坐标原点mesh.position.set(0, 10, 0);scene.add(mesh);//相机在Three.js三维坐标系中的位置// 根据需要设置相机位置具体值camera.position.set(200, 200, 200);camera.lookAt(mesh.position);//指向mesh对应的位置// AxesHelper辅助观察的坐标系const axesHelper new THREE.AxesHelper(150);scene.add(axesHelper);// 添加一个辅助网格地面// const gridHelper new THREE.GridHelper(300, 25, 0x004444, 0x004444);// scene.add(gridHelper);setGui();renderer.setSize(width, height); //设置three.js渲染区域的尺寸(像素px)//将innerHTML置空避免append重复添加渲染leftRef.value.innerHTML leftRef.value.append(renderer.domElement); }//设置gui const setGui () {//改变交互界面style属性gui.domElement.style.right 0px;gui.domElement.style.width 300px;//将gui和 几何体的位置绑定//将对应的属性x重命名gui.add(mesh.position, x, 0, 100).name(几何体x轴).onChange((value) {console.log(x, value)//改变x时进行其它的操作mesh.position.y 50})//设置交互界面每次改变属性值间隔是多少gui.add(mesh.position, y, 0, 100).step(0.1)//设置交互界面 生成交互界面是下拉菜单,设置为数组// gui.add(mesh.position,z,[-100,0,100]).name(Z轴)gui.add(mesh.position, z, { left: -100, center: 0, right: 100 }).name(Z轴)//设置交互页面 单选框 当变量的类型为布尔类型时才会生成单选框gui.add(meshObjx, bool).name(是否开启x轴旋转)gui.add(meshObjy, bool).name(是否开启y轴旋转)gui.add(meshObjz, bool).name(是否开启z轴旋转)//改变颜色gui.addColor({ color: 0x00ffff }, color).onChange((value) {//value是十进制需要转换成十六进制bgColor.value # value.toString(16);mesh.material.color.set(value)})setImg(); }const imgArr reactive({ img: }) let texture reactive(); //更换模型图片 const setImg () {//.load()方法加载图像返回一个纹理对象Textureconst girlTexture texLoader.load(./girl.png);const goalTexture texLoader.load(./goal.png);//切换模型上图片gui.add(imgArr, img, { 可爱: 1, 目标: 2 }).name(模型图片).onChange((value) {//遍历mesh下所有的对象mesh.traverse((child) {if (child instanceof THREE.Mesh) {if ([1, 2].includes(value)) {switch (value) {case 1:texture girlTexturebreak;case 2:texture goalTexturebreak;default:break;}//给模型进行贴图// 设置阵列模式texture.wrapS THREE.RepeatWrapping;texture.wrapT THREE.RepeatWrapping;// uv两个方向纹理重复数量 2*2 4个图片 自动将图片按照制定的数量平铺texture.repeat.set(2, 2);//注意选择合适的阵列数量//纹理U方向偏移 将图片进行偏移texture.offset.x 0.5;child.material.map texture;//THREE.SingleSide 单面THREE.DoubleSide 双面 默认是双面贴图console.log(THREE.DoubleSide)child.material.side THREE.SingleSide//开启透明child.material.transparent false//更新模型child.material.needsUpdate true;}}})}) } //渲染 const render () {texture?texture.offset.x 0.01:null;renderer.render(scene, camera); //执行渲染操作meshObjx.bool ? mesh.rotateX(0.01) : null;//每次绕y轴旋转0.01弧度meshObjy.bool ? mesh.rotateY(0.01) : null;//每次绕y轴旋转0.01弧度meshObjz.bool ? mesh.rotateZ(0.01) : null;//每次绕y轴旋转0.01弧度//重复渲染requestAnimationFrame(render);//请求再次执行渲染函数render渲染下一帧 }/script style scoped langless .pageBox {width: 100%;height: 100vh;padding: 0;margin: 0;display: flex;justify-content: space-between;align-items: center;.rightBox {width: 100%;height: 100%;background: yellow;} } /style三、注意事项 1、在vue框架的基础上一定要注意加载图片存放的路径。默认的当前文件夹是.public,不是src。 2、一定要设置模型的.needUpdate 为true重新对3d几何体进行渲染否则容易出现gui切换了图片但是3d几何体上图片未做任何的切换的问题。 如果你认为该文章对你有帮助伸出您的小手帮忙【点赞】【关注】【收藏】。
http://www.dnsts.com.cn/news/52803.html

相关文章:

  • 企业网站 制作wordpress修改功能小工具
  • 招聘销售员网站建设网络推广手袋 东莞网站建设
  • 庆阳做网站公司郑州睿网站建设
  • 网站空间集装箱网站制作 北京网站建设公司
  • 淘宝网站建设单子好接吗北京网站设计制作多少钱
  • dx网站是哪家公司做的wordpress如何增加商品
  • 电商网站建设与管理标点狗logo设计官网
  • 网站备案资质word用来做网站的
  • 资中做网站多少钱珍爱网
  • 国外的工业设计网站保山做网站建设
  • 如何选择制作网站公司东莞百度网站快速排名
  • 兰州手机网站wordpress 插件反复安装
  • 西安做网站招聘网站开发项目需要什么人员
  • 知乎免费阅读网站苏州百度代理公司
  • 免费创建自己的网站平台2345浏览器网页
  • 怎样在自己的网站上家程序苏州推广排名
  • 南充 网站建设珠宝公司网站模板
  • 大连seo建站国内特效比漂亮的网站
  • .net 建网站建湖网页设计
  • 服装网站建设公司led网站建设方案模板
  • 2016网站设计规范wordpress 替代文本
  • 襄阳地区网站做的好的国内知名互联网公司
  • 西部数码网站管理助手 d盘网络教育全程托管
  • 网站加速器个人主页英语
  • 政务网站建设规范wordpress手机版侧栏导航条
  • 建设网站报价陕西省建设网三类人员官网
  • 单位网站建设汇报桂林市网站设计
  • 广州公共资源建设工程交易中心网站找人做自建房图纸去哪个网站
  • 怎样做医院网站免费招标信息网官网
  • 游戏企业用什么程序做网站活动推广方式