首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >vue3+ts+threejs 1.创建场景

vue3+ts+threejs 1.创建场景

作者头像
路过君
发布2023-10-29 14:40:09
发布2023-10-29 14:40:09
5100
举报

效果

创建画布容器元素

代码语言:javascript
复制
<script setup lang="ts">
...
// 画布容器
const canvasRef = ref<HTMLElement>()
const canvasSize = ref<{ width: number, height: number }>({width: 0, height: 0})

// 监控更新画布尺寸
function handleResize(entry: ResizeObserverEntry) {
  canvasSize.value = {width: entry.contentRect.width, height: entry.contentRect.height}
}
...
</script>
<template>
   <div ref="canvasRef" v-psr-resize-observer="handleResize"/>
</template>

创建threejs渲染器,相机,场景

代码语言:javascript
复制
// 创建渲染器
const renderer = new THREE.WebGLRenderer();
// 创建相机
const camera = new THREE.PerspectiveCamera(
    75,  // 视野角度
    1, // 长宽比
    0.1, // 近截面
    1000, // 远截面
);
camera.position.z = 5;
//创建场景
const scene = new THREE.Scene();
// 在画布上渲染场景
watch(canvasRef, canvas => {
  if (canvas) {
    canvas.appendChild(renderer.domElement);
    animate()
  }
})

// 每次刷新时进行场景绘制
function animate() {
  requestAnimationFrame(animate);
  renderer.render(scene, camera);
}

// 让渲染器尺寸随画布缩放
watch(canvasSize, canvasSize => {
  // 更新渲染器尺寸
  renderer.setSize(canvasSize.width, canvasSize.height, false);
  // 更新相机长宽比
  camera.aspect = canvasSize.width != 0 ? (canvasSize.width / canvasSize.height) : 1
  camera.updateProjectionMatrix()
})

添加模型和动画

代码语言:javascript
复制
// 为场景添加模型
const geometry = new THREE.BoxGeometry(1, 1, 1);
const material = new THREE.MeshBasicMaterial({color: 0x00ff00});
const cube = new THREE.Mesh(geometry, material);
scene.add(cube);
// 为模型添加动画
const aniInterval = setInterval(() => {
  cube.rotation.x += 0.01
  cube.rotation.y += 0.01
}, 1000 / 100)

onUnmounted(() => {
  clearInterval(aniInterval)
})
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-10-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 效果
  • 创建画布容器元素
  • 创建threejs渲染器,相机,场景
  • 添加模型和动画
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档