vue3+three入门一
<script setup lang="ts"> import * as THREE from 'three'; import {onMounted, ref} from "vue"; import { ArcballControls} from "three/examples/jsm/controls/ArcballControls"; const containerRef = ref(null) const width = ref() const height = ref() const animateKey = ref(false) let cube, camera, renderer,scene; onMounted(() => { width.value = containerRef.value.offsetWidth; height.value = containerRef.value.offsetHeight; initContainer() }) const initContainer = () => { scene = new THREE.Scene(); // 创建场景 camera = new THREE.PerspectiveCamera( 75, width.value / height.value, 0.1, 1000 ); // fov:视野角度, aspect:长宽比,near近截面,far:远截面 renderer = new THREE.WebGLRenderer();// 创建渲染器 renderer.setSize( width.value , height.value ); // 设置渲染器尺寸 containerRef.value.appendChild( renderer.domElement); const geometry = new THREE.BoxGeometry( 50, 50, 10 ); // 模型 const material = new THREE.MeshBasicMaterial( { color: 0xff0033 } ); // 材质 cube = new THREE.Mesh( geometry, material ); // 网格 需包含模型和材质 // 控制器 const controls = new ArcballControls( camera, renderer.domElement, scene ); controls.addEventListener( 'change', function () { renderer.render( scene, camera ); } ); scene.add( cube ); // 像场景中添加模型 camera.position.set( 0, 20, 100 );// 设置相机的位置 controls.update();// 控制器 animateKey.value = true // 因为animate自启动时页面还没加完成,所以加了个变量,当animateKey为true时才执行animate内的方法 animate() } function animate() { if(animateKey.value) { requestAnimationFrame( animate ); renderer.render( scene, camera ); } } animate() </script> <template> <div class="container" > <div class="container_canvas" ref="containerRef"></div> </div> </template> <style scoped lang="less"> .container { width: 100%; height: 100%; box-sizing: border-box; border: 1px solid red; .container_canvas { width: 80%; height: 80%; } } </style>
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!