vue3+ts+threejs 1.创建场景

news/2024/7/9 23:39:47 标签: vue, threejs, web3d

效果

在这里插入图片描述

创建画布容器元素

<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_21">创建threejs渲染器,相机,场景

// 创建渲染器
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()
})

添加模型和动画

// 为场景添加模型
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)
})

http://www.niftyadmin.cn/n/5130703.html

相关文章

fastadmin分类下拉(多级分类)使用教程

效果图1&#xff1a; 在后台分类管理中&#xff0c;添加需要的分类数据 效果图2&#xff1a; 在后台添加页面&#xff0c;点击下拉即可出现分类多级下拉数据 以上就是效果图。 分类下拉实现步骤&#xff1a; 1.更改控制器 找到需要修改的控制器&#xff0c;修改公共方法 _i…

引入个性化标签的协同过滤推荐算法研究_邢瑜航

第3章 引入个性化标签的I-CF推荐算法 3.2.2 相似性度量方法 3.2.3 改进后的算法步骤与流程

react高阶成分(HOC)例子效果

使用React函数式组件写了一个身份验证的一个功能&#xff0c;示例通过高阶组件实现的一个效果展示&#xff1a; import React, { useState, useEffect } from react;// 定义一个高阶组件&#xff0c;它接受一个组件作为输入&#xff0c;并返回一个新的包装组件 const withAuth…

CSRF防范介绍之一

一、前言 CSRF是Cross Site Request Forgery的缩写&#xff0c;即跨站请求伪造&#xff0c;CSRF攻击是借助受害者的Cookie骗取服务器的信任&#xff0c;以受害者名义伪造请求对服务器进行攻击&#xff0c;一直以来有个疑问&#xff0c;前后端分离使用LocalStorage存储用户令牌…

[SQL开发笔记]DELETE 语句:删除表中的行

一、功能描述: DELETE 语句:用于删除表中的行 二、DELETE 语句语法详解: DELETE 语法 DELETE FROM table_nameWHERE some_column=some_value; 三、DELETE 语句开发实例: 目标数据库及表:使用 DRobot数据库,"T_Drobot&

剑指JUC原理-5.synchronized底层原理

Java对象头 以32位虚拟机为例&#xff1a; 普通对象 在Java虚拟机中&#xff0c;每个对象都有一个对象头&#xff08;Object Header&#xff09;&#xff0c;其中包含了一些用于管理对象的元数据信息。对象头通常由两部分组成&#xff1a;mark word&#xff08;标记字&#x…

【面向对象程序设计】Java大作业 汽车租赁管理系统V4.0

前言 自己大二时候使用JavaMysql写的租车系统大作业V4.0黑窗口版的一个记录&#xff0c;简简单单的黑窗口&#xff0c;不是炫酷的前后端分离也没用GUI&#xff0c;但功能完善&#xff0c;该有都有&#xff0c;当时得分也还是挺不错的 技术栈 Java (jdk8)Mysql 资源包内容 …

嵌入式学习笔记(64)指针带来的一些符号的理解

我们写的代码是给编译器看的&#xff0c;代码要想达到你想象的结果&#xff0c;就必需要编译器对你的代码的理解和你自己对代码的理解一样。编译器理解代码就是理解的符号&#xff0c;所以我们要正确理解C语言中的符号&#xff0c;才能像编译器一样思考程序、理解代码。 3.2.1…