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

通辽做家教的网站衡水企业网站

通辽做家教的网站,衡水企业网站,建设部网站6.1文件,免费网站建设一级在 Vue 中使用 Three.js 加载模型、控制视角、添加点击事件是构建 3D 场景的常见需求。下面是一个完整的示例,演示如何在 Vue 单文件组件中实现以下功能: 使用 GLTFLoader 加载 .glb/.gltf 模型添加 OrbitControls 控制视角(旋转、缩放、平移…

在 Vue 中使用 Three.js 加载模型、控制视角、添加点击事件是构建 3D 场景的常见需求。下面是一个完整的示例,演示如何在 Vue 单文件组件中实现以下功能:

  • 使用 GLTFLoader 加载 .glb/.gltf 模型
  • 添加 OrbitControls 控制视角(旋转、缩放、平移)
  • 给模型添加点击事件

使用的技术栈

  • Vue 3 + Composition API(或 Vue 2)
  • Three.js 核心库
  • three/examples/js/loaders/GLTFLoader
  • three/examples/js/controls/OrbitControls

📦 安装依赖(如未安装)

npm install three
npm install three-gltf-loader  # 或直接引入 GLTFLoader

示例代码:Vue 单文件组件

<template><div class="model-viewer-container" ref="viewerContainer"></div>
</template><script setup>
import { ref, onMounted } from 'vue'
import * as THREE from 'three'
import { OrbitControls } from 'three/addons/controls/OrbitControls.js'
import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'const viewerContainer = ref(null)let scene, camera, renderer, controls, modelfunction init() {// 创建场景scene = new THREE.Scene()scene.background = new THREE.Color(0xeeeeee)// 创建相机const width = viewerContainer.value.clientWidthconst height = viewerContainer.value.clientHeightcamera = new THREE.PerspectiveCamera(45, width / height, 0.1, 1000)camera.position.set(0, 2, 5)// 创建渲染器renderer = new THREE.WebGLRenderer({ antialias: true })renderer.setSize(width, height)renderer.setPixelRatio(window.devicePixelRatio)viewerContainer.value.appendChild(renderer.domElement)// 添加光源const ambientLight = new THREE.AmbientLight(0xffffff, 0.6)scene.add(ambientLight)const directionalLight = new THREE.DirectionalLight(0xffffff, 0.8)directionalLight.position.set(5, 10, 7.5)scene.add(directionalLight)// 添加控制器controls = new OrbitControls(camera, renderer.domElement)controls.enableDamping = true// 加载模型const loader = new GLTFLoader()loader.load('/models/test.glb', // 替换为你的模型路径(gltf) => {model = gltf.scenescene.add(model)// 添加点击事件监听window.addEventListener('click', onClick)},undefined,(error) => {console.error('An error occurred while loading the model:', error)})// 渲染循环function animate() {requestAnimationFrame(animate)controls.update()renderer.render(scene, camera)}animate()
}// 点击事件处理函数
function onClick(event) {if (!model) return// 计算鼠标归一化坐标const mouse = new THREE.Vector2()mouse.x = (event.clientX / window.innerWidth) * 2 - 1mouse.y = -(event.clientY / window.innerHeight) * 2 + 1// 创建射线const raycaster = new THREE.Raycaster()raycaster.setFromCamera(mouse, camera)// 获取模型中的所有可交互对象const intersects = raycaster.intersectObject(model, true)if (intersects.length > 0) {console.log('点击了模型!', intersects[0].object)alert('你点击了模型上的一个部件')}
}// 响应窗口变化
window.addEventListener('resize', () => {if (!camera || !renderer) returncamera.aspect = viewerContainer.value.clientWidth / viewerContainer.value.clientHeightcamera.updateProjectionMatrix()renderer.setSize(viewerContainer.value.clientWidth, viewerContainer.value.clientHeight)
})onMounted(() => {init()
})
</script><style scoped>
.model-viewer-container {width: 100%;height: 100vh;
}
</style>

文件结构建议

your-project/
├── public/
│   └── models/
│       └── test.glb   <-- 放置你的模型文件
├── src/
│   └── components/
│       └── ModelViewer.vue

注意:模型放在 public/models/ 目录下,通过 /models/test.glb 路径访问。


🔧 功能说明

功能实现方式
加载模型使用 GLTFLoader 加载 .glb.gltf 模型
控制视角使用 OrbitControls 实现自由旋转、缩放、平移
点击事件使用 Raycaster 进行射线检测,判断是否点击到模型
响应式布局监听 resize 事件并更新相机和渲染器尺寸

扩展建议

需求推荐做法
多个模型加载使用 Promise.all() 异步加载多个模型
模型动画播放使用 AnimationMixerClock 控制动画
加载进度条使用 LoadingManager 显示加载百分比
自定义材质遍历模型子对象并修改材质颜色、透明度等属性
高亮选中部分修改点击对象的材质颜色或使用 OutlinePass 后期高亮

文章转载自:

http://aFdJY8Zi.rLhgx.cn
http://60xBsD19.rLhgx.cn
http://e7eTWhml.rLhgx.cn
http://avqZboqX.rLhgx.cn
http://KuJsAnCZ.rLhgx.cn
http://pd9swfEz.rLhgx.cn
http://KAdfXRQw.rLhgx.cn
http://ttCu9Vup.rLhgx.cn
http://xyTftOjY.rLhgx.cn
http://PCIH1nGy.rLhgx.cn
http://s1b43WSf.rLhgx.cn
http://NXngAacK.rLhgx.cn
http://BYxcWLK3.rLhgx.cn
http://d7zbtpjR.rLhgx.cn
http://Esv8b2eC.rLhgx.cn
http://DObdqHGV.rLhgx.cn
http://iUIWjcjl.rLhgx.cn
http://LxV15l66.rLhgx.cn
http://7ayIGtzl.rLhgx.cn
http://q34La4a6.rLhgx.cn
http://sxAcYrDc.rLhgx.cn
http://6iP5e2AD.rLhgx.cn
http://E7MFG9N9.rLhgx.cn
http://IOMtX0iz.rLhgx.cn
http://aJAo07Y6.rLhgx.cn
http://gZvuckpN.rLhgx.cn
http://72PjUrfL.rLhgx.cn
http://nzAgYt00.rLhgx.cn
http://OaFxFtSy.rLhgx.cn
http://N1fqqgRO.rLhgx.cn
http://www.dtcms.com/wzjs/697126.html

相关文章:

  • 科普网站设计个人网站备案方法
  • 电商平台制作公司百度推广优化是什么意思
  • 站长之家域名查询排行做外语网站的公司
  • 凉山州城乡和住房建设厅网站成都网站建设哪家
  • 网站建设服务器的选择方式包括哪些平利县城乡建设局网站
  • 长春网站推广优化服务公司名字
  • 上海建设银行网站百度小程序异常怎么办
  • 电商类网站开发项目书旅游网站建设与网页设计意义
  • 北京建设银行对公网站ue4培训
  • 网站开发技术问题wordpress安装ssl
  • 坪山建设网站建站石家庄做网站比较好的公司有哪些
  • lol做框网站培训好吗网站建设
  • 网站建设招标 报告建站推广
  • 网站建设平台 汉龙策划公司收费
  • 四川门户网站建设管理规定余姚网站建设公司
  • 营销型网站建设宣传语我国档案网站建设比较分析
  • 与企业网站做接口大连 网站开发
  • 青岛中英网站建设做卖车网站需要什么手续费
  • 企业手机网站建设渠道wap百度
  • 手机版传奇网站木樨园网站建设公司
  • 网站建设流程平台医院网站源码 asp
  • 黄冈网站推广厂家海外医疗手机网站建设
  • 做甜品网站栏目广州 网站建设 制作
  • 拖拽式网站建设国内电商平台怎么做
  • 地税网站如何做税种确认有哪些免费做外贸的网站
  • 网站编程入门教程seo搜索是什么意思
  • 湖北建设部网站手机网站模板开发工具
  • 建设一个网站主要受哪些因素的影响因素办公室设计公司
  • 网站维护和制作怎么做会计分录seo排名优化教程
  • 长春网站建设开发维护陕西关键词优化推荐