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

记事本(父页面与iframe子页面的联通,vue3+ts展示fbx模型,与tga贴图)

 vue3+ts 展示fbx与tga贴图

npm i three --save
<template><div ref="modelContainer"></div>
</template><script setup lang="ts">
import { ref, onMounted } from 'vue';
import * as THREE from 'three';
import { FBXLoader } from 'three/addons/loaders/FBXLoader'; // 导入FBXLoader
import { TGALoader } from 'three/examples/jsm/loaders/TGALoader'
const modelContainer = ref<HTMLElement | null>(null);
let fbxModel = null as any;
onMounted(() => {// 创建场景const scene = new THREE.Scene();// 创建相机const camera = new THREE.PerspectiveCamera(75, window.innerWidth / window.innerHeight, 0.1, 1000);camera.position.z = 2.5;camera.position.y = 1.5;// 设置alpha为true// 设置clearColor为透明// 创建渲染器const renderer = new THREE.WebGLRenderer({ alpha: true });renderer.setSize(window.innerWidth, window.innerHeight);renderer.setClearColor(0x000000, 0);modelContainer.value?.appendChild(renderer.domElement);// 创建FBX加载器const loader = new FBXLoader();const tgaloader = new TGALoader()// 贴图路径数组const texturePaths = ['/public/models/LoGo_D.tga','/public/models/LoGo_N.tga'];// 加载FBX模型loader.load('/public/models/LoGo.fbx',(fbx) => {fbxModel = fbx;// 创建一个包含多个贴图的数组const textures = texturePaths.map(path => {const texture = tgaloader.load(path);texture.colorSpace = THREE.SRGBColorSpace;return texture;});// 创建一个包含多个贴图的uniform对象const uniforms = {texture1: { value: textures[0] },texture2: { value: textures[1] },};// 顶点着色器代码const vertexShader = `varying vec2 vUv;void main() {vUv = uv;gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);}`;// 片段着色器代码const fragmentShader = `varying vec2 vUv;uniform sampler2D texture1;uniform sampler2D texture2;void main() {vec4 color1 = texture2D(texture1, vUv);vec4 color2 = texture2D(texture2, vUv);gl_FragColor = mix(color1, color2, 0.001); }`;// 创建着色器材质const material = new THREE.ShaderMaterial({uniforms: uniforms,vertexShader: vertexShader,fragmentShader: fragmentShader,});// 遍历模型的所有子网格fbx.traverse((child: any) => {if (child instanceof THREE.Mesh) {// 应用着色器材质到子网格child.material = material;}});scene.add(fbxModel);},(xhr) => {console.log((xhr.loaded / xhr.total) * 100 + '% loaded');},(error) => {console.error(error);});// 创建光源const ambientLight = new THREE.AmbientLight(0xffffff, 0.5);scene.add(ambientLight);const pointLight = new THREE.PointLight(0xffffff, 1);camera.add(pointLight);scene.add(camera);// 渲染场景const animate = () => {requestAnimationFrame(animate);// 根据滚动条位置调整模型的旋转角度if (fbxModel) {fbxModel.rotation.y += 0.01;}// const scrollTops = window.pageYOffset || document.documentElement.scrollTop;// if (scrollTops >= 12220) {//     const maxRotation = Math.PI / 2; // 最大旋转角度为90度,模型躺下//     fbxModel.rotation.y = maxRotation * scrollTops;// }// 在这里可以添加模型的旋转或其他动画renderer.render(scene, camera);};animate();});
</script><style scoped>
/* 在这里可以添加样式 */
</style>

 iframe子页面与父页面

<script>
//子页面 iframe
window.parent.postMessage({data:'data'}, '*');//父页面
window.addEventListener('message',function (e: any) {if (e.data.action === "closeLoading") {TransferMethod()}},false
)
</script>

http://www.lryc.cn/news/288107.html

相关文章:

  • 【好书推荐-第五期】《互联网大厂推荐算法实战》(异步图书出品)
  • C++ Qt day2
  • Mac上如何设置映射某个网站站点域名的IP
  • 智能分析网关V4智慧冶金工厂视频智能监管方案
  • WebSocket实现HTML+SpringBoot聊天功能,小程序+SpringBoot聊天功能
  • SpringMVC-RESTFul
  • Spring Boot3整合knife4j(swagger3)
  • 解决Windows系统本地端口被占用
  • GPS位置虚拟软件 AnyGo mac激活版
  • 视频号视频怎么使用视频号下载助手提取视频呢?
  • 第一篇【传奇开心果短博文系列】鸿蒙开发技术点案例示例:从helloworld开始理解鸿蒙开发ArkTS编程思路
  • 四、MySQL之DML DQL
  • YOLOv8优化策略:注意力涨点系列篇 | 多尺度双视觉Dualattention | Dual-ViT,顶刊TPAMI 2023
  • 视频渲染靠cpu还是显卡 会声会影视频渲染的作用是什么
  • v-if 导致 elementui 表单校验失效问题解决
  • Linux本地部署SVN服务结合内网穿透实现远程访问
  • 短信平台(电信)
  • 11.STM32F4 输入捕获
  • opencv#30 线性滤波
  • 如何使用iPhone或iPad上的二维码共享Wi-Fi密码?这里有详细步骤
  • 在游戏里开公司!基于ERNIE SDK的多智能体游戏应用
  • 【SpringCloud Nacos】 微服务治理介绍及Nacos引入初体验
  • JavaEE进阶(6)SpringBoot 配置文件(作用、格式、properties配置文件说明、yml配置文件说明、验证码案例)
  • 面包屑是什么
  • C++ 设计模式之责任链模式
  • HTML5与App封装技术将网站一键打包成App
  • openssl3.2/test/certs - 060 - any.bad.com is excluded by CA2.
  • SpringBoot整理-数据库操作
  • IP被封怎么办?访问网站时IP被阻止?解决IP禁令全方法
  • 利用aiohttp异步爬虫实现网站数据高效抓取