threejs创建一个旋转的正方体【完整代码】

效果:

中文网three.js docs

1.搭建环境 安装three

首先我们需要新建一个项目 vue/react都可 这里以vue为演示

npm i three

找到一个新的页面 在页面script的地方导入three 

import * as THREE from "three"

或者自己逐个导入

import {
  PerspectiveCamera,
  Scene,
  WebGLRenderer,
} from "three";
import * as THREE from "three"

2.搭建场景

<script>
import {
  PerspectiveCamera,
  Scene,
  WebGLRenderer,
} from "three";
import * as THREE from "three"
export default {
  mounted() {
    const scene = new Scene()
    const camera = new PerspectiveCamera( 75, window.innerWidth / window.innerHeight, 0.1, 1000 );
    const renderer = new WebGLRenderer();
    renderer.setSize( window.innerWidth, window.innerHeight );
    document.body.appendChild( renderer.domElement );

}
</script>

简单介绍:

scence:场景-画布

camera:相机-PerspectiveCamera(投影摄像机:模拟人眼)-类似于模拟人的眼睛

render:渲染器-(画布+人=画) 这里就是一整幅画

将这一整幅画插入到body中

3.新建一个立方体

import {
  PerspectiveCamera,
  Scene,
  WebGLRenderer,
} from "three";
import * as THREE from "three"
export default {
  mounted() {
    const scene = new Scene()
    const camera = new PerspectiveCamera( 75, window.innerWidth / window.innerHeight, 0.1, 1000 );
    const renderer = new WebGLRenderer();
    renderer.setSize( window.innerWidth, window.innerHeight );
    document.body.appendChild( renderer.domElement );

    const geometry = new THREE.BoxGeometry( 1, 1,1 );
    const material = new THREE.MeshBasicMaterial( {
        wireframe:true,
        color: 0x42b983
      } );

    const cube = new THREE.Mesh( geometry, material );
    scene.add( cube );
    camera.position.z = 5;

  },

}

 简单介绍:

BoxGeometry:three提供的正方体 xyz

MeshBasicMaterial:基础材料 wireframe:true:将材料以线条的方式显示

Mesh:将形状+材料合并

创造一个立方体 设置好材料 形成一个完整的正方体 将这个完整的正方体添加到场景中

并且将相机拿远一点 就是camera.postion.z=5

如果不拿远 我们的视角就在相机内部 如下图

4.将正方体运动起来

function animate() {
				requestAnimationFrame( animate );

				cube.rotation.x += 0.01;
				cube.rotation.y += 0.01;

				renderer.render( scene, camera );
			}

			animate();

 requestAinmationFrame:动画针 重复调用animate函数

cube.rotation.y += 0.01:将正方体沿着x轴y轴旋转0.1

renderer.render( scene, camera ):重新渲染

按照浏览器的刷新频率去让正方体沿xy旋转 并且重新渲染

这样肉眼看起来就像立方体动了起来

5.完整代码

import {
  PerspectiveCamera,
  Scene,
  WebGLRenderer,
} from "three";
import * as THREE from "three"
export default {
  mounted() {
    const scene = new Scene()
    const camera = new PerspectiveCamera( 75, window.innerWidth / window.innerHeight, 0.1, 1000 );
    const renderer = new WebGLRenderer();
    renderer.setSize( window.innerWidth, window.innerHeight );
    document.body.appendChild( renderer.domElement );

    const geometry = new THREE.BoxGeometry( 1, 1,1 );
    const material = new THREE.MeshBasicMaterial( {
        wireframe:true,
        color: 0x42b983,
      } );

    const cube = new THREE.Mesh( geometry, material );
    scene.add( cube );

    camera.position.z = 5;
    function animate() {
				requestAnimationFrame( animate );

				cube.rotation.x += 1;
				cube.rotation.y += 0.01;

				renderer.render( scene, camera );
			}

			animate();

  },

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/185361.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

SQLite 和 SQLiteDatabase 的使用

实验七&#xff1a;SQLite 和 SQLiteDatabase 的使用 7.1 实验目的 本次实验的目的是让大家熟悉 Android 中对数据库进行操作的相关的接口、类等。SQLiteDatabase 这个是在 android 中数据库操作使用最频繁的一个类。通过它可以实现数据库的创建或打开、创建表、插入数据、删…

保姆级 ARM64 CPU架构下安装部署Docker + rancher + K8S 说明文档

1 K8S 简介 K8S是Kubernetes的简称&#xff0c;是一个开源的容器编排平台&#xff0c;用于自动部署、扩展和管理“容器化&#xff08;containerized&#xff09;应用程序”的系统。它可以跨多个主机聚集在一起&#xff0c;控制和自动化应用的部署与更新。 K8S 架构 Kubernete…

【nlp】3.6 Tansformer模型构建(编码器与解码器模块耦合)

Tansformer模型构建(编码器与解码器模块耦合) 1. 模型构建介绍2 编码器-解码器结构的代码实现3 Tansformer模型构建过程的代码实现4 小结1. 模型构建介绍 通过上面的小节, 我们已经完成了所有组成部分的实现, 接下来就来实现完整的编码器-解码器结构耦合. Transformer总体架…

聚类笔记:HDBSCAN

1 算法介绍 DBSCAN/OPTICS层次聚类主要由以下几步组成 空间变换构建最小生成树构建聚类层次结构(聚类树)压缩聚类树提取簇 2 空间变换 用互达距离来表示两个样本点之间的距离 ——>密集区域的样本距离不受影响——>稀疏区域的样本点与其他样本点的距离被放大——>…

Unity Android FireBase bugly报错查询

报错如下图&#xff0c;注意&#xff0c;标红的三处 使用的il2cpp和架构是arm64-v8a 那我们就可以根据这些去找对应的符号表&#xff0c;在unity安装目录下 Unity2020.3.33f1\Editor\Data\PlaybackEngines\AndroidPlayer\Variations\il2cpp\Release\Symbols\arm64-v8a 找到l…

缓存组件状态,提升用户体验:探索 keep-alive 的神奇世界

&#x1f90d; 前端开发工程师&#xff08;主业&#xff09;、技术博主&#xff08;副业&#xff09;、已过CET6 &#x1f368; 阿珊和她的猫_CSDN个人主页 &#x1f560; 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 &#x1f35a; 蓝桥云课签约作者、已在蓝桥云…

晨控CK-FR03-EIP读卡器与欧姆龙NX/NJ系列EtherNet/IP通讯手册

晨控CK-FR03-EIP读卡器与欧姆龙NX/NJ系列EtherNet/IP通讯手册 CK-FR03-EIP是一款基于射频识别技术的高频RFID标签读卡器&#xff0c;读卡器工作频率为13.56MHZ&#xff0c;支持对I-CODE 2、I-CODE SLI等符合ISO15693国际标准协议格式标签的读取。 读卡器同时支持标准工业通讯…

Linux文件查看命令

1.cat加上文件名 &#xff08;因为所有文件内容都会打印到屏幕上&#xff0c;所以内容少时使用这个&#xff0c;总不能用cat来定义一本小说&#xff09; 3.往文件中写入数据——cat加上>(重定向符&#xff09;加上文件名&#xff0c;写完之后&#xff0c;按键 cat原本是把…

Mac OS 干货教学-超详细Wifi破解教学

Mac OS 干货教学&#x1f525;-超详细Wifi破解教学 尊重原创&#xff0c;编写不易 &#xff0c;帮忙点赞关注一下~转载小伙伴请注明出处&#xff01;谢谢 PS&#xff1a;学术交流&#xff0c;私自破解他人wifi可能要负担法律责任或让办公电脑被Hack黑客风险&#xff01;本次本…

python之pyqt专栏2-项目文件解析

项目结构 在上一篇文章python之pyqt专栏1-环境搭建&#xff0c;创建新的pyqt项目&#xff0c;下面我们来看一下这个项目下的文件。 从下面的文件结构图可以看到&#xff0c;该项目下有3个文件&#xff0c;untitled.ui,untitled.py 以及main.py。 QtDesigner可以UI界面的方式&am…

python 将当前时间转成CP56time2a BIN码

def cp56time2a_hex_str():# 获取当前时间now datetime.now()# 将当前时间格式化为CP56time2a格式s now.strftime("%Y%m%d%H%M%S")[2:]cp56time2a [s[i:i 2] for i in range(0, len(s), 2)]seconds cp56time2a[-1:][0]cp56time2a cp56time2a[:-1]seconds_hex …

openstack(2)

目录 块存储服务 安装并配置控制节点 安装并配置一个存储节点 验证操作 封装镜像 上传镜像 块存储服务 安装并配置控制节点 创建数据库 [rootcontroller ~]# mysql -u root -pshg12345 MariaDB [(none)]> CREATE DATABASE cinder; MariaDB [(none)]> GRANT ALL PR…

bat批处理文件

常用的bat批处理命令 1、遍历移动文件最好将文件编码保存为 ANSI编码 新的改变 1、遍历移动文件 把子目录里面的文件批量移动到当前目录 &#xff08;或根目录&#xff09; 项目中要批量导入附件&#xff0c;但是收集的子公司员工信息&#xff0c;都是每个人一个文件夹的&…

需求变更导致估算不精准 6大措施

需求变更可能导致估算不精准、项目成本增加、进度延迟等问题&#xff0c;如果不能准确地估算项目&#xff0c;往往会造成资源浪费和开发效率的降低&#xff0c;因此亟需解决因需求变更导致地估算不精准的问题。 一般来说&#xff0c;主要是从以下6个方面入手解决&#xff1a; 1…

python实现存款日利息计算器(窗口界面形式)

输入存款金额&#xff0c;7日年化收益率&#xff0c;输出每日利息 完整源码如下&#xff1a; import tkinter as tk from tkinter import messageboxdef calculate_interest():deposit float(entry_deposit.get())interest_rate float(entry_interest_rate.get())daily_int…

基于Zigbee的教室智能环境监控系统(论文+源码)

1.系统设计 此次研究的目的是设计一款基于Zigbee的教室智能环境监控系统&#xff0c;其系统框图如下图2.1。在此拟由CC2530单片机作为核心进行设计。同时结合多种传感器&#xff0c;如温度传感器&#xff0c;用来检测环境的温度。光照传感器&#xff0c;用来通过检测光照强度&…

告别传统Office,办公软件将如何选择

各家奶茶店的商战正如火如荼地进行着&#xff0c;各种办公软件之间的竞争亦是弥漫着无形的硝烟。WPS虽然凭借其操作便利、简单易上手的优势获得不少打工人的青睐&#xff0c;即使是在手机端&#xff0c;也可进行简单的数据处理。但是&#xff0c;正所谓“术业有专攻”&#xff…

前端入门(三)Vue生命周期、组件技术、事件总线、

文章目录 Vue生命周期Vue 组件化编程 - .vue文件非单文件组件组件的注意点组件嵌套Vue实例对象和VueComponent实例对象Js对象原型与原型链Vue与VueComponent的重要内置关系 应用单文件组件构建 Vue脚手架 - vue.cli项目文件结构refpropsmixin插件scoped样式 Vue生命周期 1、bef…

【STM32单片机】LED点阵花样显示设计

文章目录 一、功能简介二、软件设计三、实验现象联系作者 一、功能简介 本项目使用STM32F103C8T6单片机控制器&#xff0c;使用8*8LED点阵模块、按键模块等。 主要功能&#xff1a; 系统运行后&#xff0c;默认以静态模式显示&#xff0c;此时点阵左右循环切换图像。 当按下K…

C++之unordered_map/set的使用

前面我们已经学习了STL中底层为红黑树结构的一系列关联式容器——set/multiset 和 map/multimap(C98). unordered系列关联式容器 在C98中, STL提供了底层为红黑树结构的一系列关联式容器, 在查询时效率可达到log2N,即最差情况下需要比较红黑树的高度次, 当树中的节点非常多时,…