WEB 3D 技术,通过node环境创建一个three案例

news2024/11/24 18:33:30

好 文章 前端3D Three.js 在本地搭建一个官方网站 中我们 搭建了一个Three的官网

现在呢 我们就来创建第一个ThreeJs的资源
这里呢 我们还是选择一个脚手架的开发模式 因为现在基本所有的前端都在使用这样的开发方式
这里 我们创建一个文件夹目录 作为我们项目的存放目录
在这里插入图片描述
我们在这个目录下打开终端 输入

npm init vite@latest

然后就会开始对话 项目名字 我这里叫 dom01吧 其实命名用什么 1 什么 2的这种数字其实是很捞的 但我们学习就没什么了
在这里插入图片描述
按下回车后 第二个问题 问我们要用什么框架 第一个是不用任何框架
然后 vue和react应都是老朋友了
这里 我们先选择第一个 后面 vue和react的我也都会说
已经 Three 也是可以ts改造的
这里 我们先选择第一个按回车 暂时不需要任何框架
在这里插入图片描述
然后 这里他会问你要 ts还是js 这里我们js先吧 开始就不要搞的很复杂了
在这里插入图片描述
然后回车确定 我们的项目就创建好啦
在这里插入图片描述然后用编辑器打开我们的项目
在这里插入图片描述
然后 这里我们安装一下依赖 终端输入

npm install

运行结束后 我们项目的 依赖就都安装好啦
在这里插入图片描述

通过 package.json 我们可以看到 启动命令是 dev
我们终端执行

npm run dev

在这里插入图片描述
然后 我们浏览器访问终端提供给我们的项目运行地址
这就是 我们最基本的一个项目运行环境
在这里插入图片描述
好 然后 我们打开项目 看到入口文件 main.js 才会发现 内容其实都是innerHTML写进来的
在这里插入图片描述
这里 我们除了引入style.css之外的代码 全部不需要直接干掉
在这里插入图片描述
然后 我们来改一下这个 style.css
参考代码如下

*{
  margin: 0;
  padding: 0;
}
canvas{
  width: 100vw;
  height: 100vh;
  display: block;
}

首先 我们设置全局样式 不要内外边距 然后 canvas 是我们一个画布的名称元素
我们先写他全屏大小
在这里插入图片描述
好 那么 现在 我们就需要安装 three.js了
我们终端 先终止项目运行 然后输入

npm install three

在这里插入图片描述
然后 我们直接在入口文件 main.js
编写代码如下

import './style.css'
import * as THREE from "three";

//创建场景
const scene = new THREE.Scene();

//创建相机
const camera = new THREE.PerspectiveCamera(
    45, //视角 视角越大  能看到的范围就越大
    window.innerWidth / window.innerHeight,//相机的宽高比  一般和画布一样大最好
    0.1,  //近平面  相机能看到最近的距离
    1000  //远平面  相机能看到最远的距离
);

//c创建一个canvas容器  并追加到 body上
const renderer = new THREE.WebGLRenderer(0);
renderer.setSize(window.innerWidth, window.innerHeight);
document.body.appendChild(renderer.domElement);

//创建一个几何体
const geometry = new THREE.BoxGeometry(1, 1, 1);
//创建材质
const material = new THREE.MeshBasicMaterial({ color:0x08ffe });
//创建网格
const cube = new THREE.Mesh(geometry, material);
//将网格添加到场景中
scene.add(cube);
//设置相机位置   这里 我们设置Z轴  大家可以试试  S Y 和 Z  都是可以的
camera.position.z = 5;
//设置相机默认看向哪里   三个 0  代表 默认看向原点
camera.lookAt(0, 0, 0);
//将内容渲染到元素上
renderer.render(scene, camera);

这里 我觉得自己注释写的还是比较清晰的 就不多解释了
然后 相机这个概念就是 相当于 我们是通过一个相机去看这个图像的
看完注释 你在看这句话就完全明白了
然后我们界面效果就是这样的
在这里插入图片描述
这的确是个立方体 但是 我们知道 很多 3D图像界面 是可以拖动的 可以从不同角度去看的 但 我们这个好像是个死啊
完全动不了

这里 我们可以写一个转动函数
我这里直接叫 animate 吧
参考代码如下

function animate() {
    requestAnimationFrame(animate);
    cube.rotation.x += 0.01;
    cube.rotation.y += 0.01;
    renderer.render(scene, camera);
}
animate();

在这里插入图片描述
这里 我们的逻辑就是 它会一直调用自己 保证一直不会停止转动
每次调用 将 x y 两个方向轴都加一
让元素一直动画
在这里插入图片描述
这样 我们这个立方体就活动起来了
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【MySQL教程】| (1-1) 2023MySQL-8.1.0 安装教程

文章目录 一、安装包下载二、安装配置1、解压安装包2、编写MySQL配置文件3、初始化MySQL数据库3、安装mysql服务并启动4、MySQL服务5、连接MySQL6、修改密码 三、配置环境变量四、防止mysql自启动拖慢开机时间 近日有粉丝问到mysql在win11的安装中遇到一些问题,应粉…

基于 QT 实现 Task Timer,高效利用时间

一、开发环境 Ubuntu 20.04 QT6.0 二、新建 Qt Wigets Application 这里的基类选择 Wigets, pro 配置文件添加 sql 模块,需要用到 sqlite, QT sql 三、添加数据库连接头文件 // connection.h #ifndef CONNECTION_H #define CONNECTION_…

pycharm配置python3.8版本专门用于undecteded_chromedriver测试

pycharm配置python3.8版本专门用于undecteded_chromedriver测试 作者:虚坏叔叔 博客:https://pay.xuhss.com 早餐店不会开到晚上,想吃的人早就来了!😄 一、Pycharm及python环境的配置 1.安装python-3.8.7rc1-amd64.e…

QT常用控件介绍

QT信号与槽机制 connect (A,SIGNLA(aaa()),B, SLOT(bbb())); GUI继承简介 布局管理器 垂直布局水平布局网格布局表单布局 输出控件 Label: 标签Text Browser: 文本浏览器Graphics View : 图形视图框架Calendar Widget: 日历控件LCD Number: 液晶字体数…

游戏逆向中的 NoClip 手段和安全应对方式

文章目录 墙壁边界寻找碰撞 NoClip 是一种典型的黑客行为,允许你穿过墙壁,所以 NoClip 又可以认为是避免碰撞体积的行为 墙壁边界 游戏中设置了碰撞体作为墙壁边界,是 玩家对象 和墙壁发生了碰撞,而不是 相机 玩家对象有他的 X…

操作系统初探 - 进程的概念

目录 预备知识 冯诺依曼和现代计算机结构 操作系统的理解 进程和PCB的概念 PCB中的信息 查看进程信息的指令 - ps pid 进程状态 预备知识 在学习操作系统之前我们需要先了解一下如下的预备知识。 冯诺依曼和现代计算机结构 美籍匈牙利科学家冯诺依曼最先提出“程序存…

【CAD二次开发】给CAD添加TRUSTEDPATHS避免dll插件信任弹窗

找到配置文件目录,遍历下面的每个配置文件; 找到 Variables 下的TRUSTEDPATHS项目;在后面添加新的目录即可,多个目录使用分号分隔; public static void AddPath(string trusedPath){// 指定注册表键的路径

画CMB天图使用Planck配色方案

使用Planck的配色方案: 全天图: 或者方形图: 使用下面设置即可: import pspy, pixell from pspy.so_config import DEFAULT_DATA_DIR pixell.colorize.mpl_setdefault("planck")此方法不会改变matplotlib默认配色方案…

浏览器指定DNS

edge--设置 https://dns.alidns.com/dns-query

JavaSE | 初识Java(六) | 数组 (上)

数组的创建及初始化 T[] 数组名 new T[N]; //T:表示数组中存放元素的类型 //T[]:表示数组的类型 //N:表示数组的长度 int[] array1 new int[10]; // 创建一个可以容纳10个int类型元素的数组 double[] array2 new double[5]; // 创建一个可…

再次总结nios II 下载程序到板子上时出现 Downloading RLF Process failed的问题

之前也写过两篇关于NIOS II 出现:Downloading RLF Process failed的问题,但是总结都不是很全面,小梅哥的教程总结的比较全面特此记录。 问题:nios II 下载程序到板子上时出现 Downloading RLF Process failed的问题。 即当nios中…

Google vs IBM vs Microsoft: 哪个在线数据分析师证书最好

Google vs IBM vs Microsoft: 哪个在线数据分析师证书最好? 对目前市场上前三个数据分析师证书进行审查和比较|Madison Hunter 似乎每个重要的公司都推出了自己版本的同一事物:专业数据分析师认证,旨在使您成为雇主的下一个热门商品。 随着…

Python 无废话-基础知识元组Tuple详讲

“元组 Tuple”是一个有序、不可变的序列集合,元组的元素可以包含任意类型的数据,如整数、浮点数、字符串等,用()表示,如下示例: 元组特征 1) 元组中的各个元素,可以具有不相同的数据类型,如 T…

【APUE】文件系统 — 目录和文件

目录 1、获取文件属性 2、文件访问权限 3、umask 4、文件权限管理 4.1 chmod 4.2 fchmod 5、粘住位 6、文件系统举例 6.1 FAT系统 6.2 UFS系统 6.3 补充 7、链接 7.1 硬链接 7.2 符号链接 7.3 相关函数 7.3.1 link 7.3.2 unlink 7.3.3 remove 7.3.4 re…

JavaWeb项目:smbms(mysql)

1.准备工作,创建数据库 CREATE DATABASE smbms;USE smbms;CREATE TABLE smbms_address (id BIGINT(20) NOT NULL AUTO_INCREMENT COMMENT 主键ID,contact VARCHAR(15) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT 联系人姓名,addressDesc VARCHAR(50) COLLATE u…

字符串,字符数组,类型转换,整数越界,浮点数,枚举

目录 自动类型转换 强制类型转换 数据类型 sizeof 数据类型所占字节数 整数越界 浮点数 字符型 字符串变量 ​编辑字符串的输入输出 main函数的参数 ,argc,argv 单个字符输入输出 putchar getchar strlen,strcmp,strcat,strchr,strstr strlen 求字…

数学建模Matlab之检验与相关性分析

只要做C题基本上都会用到相关性分析、一般性检验等! 回归模型性能检验 下面讲一下回归模型的性能评估指标,用来衡量模型预测的准确性。下面是每个指标的简单解释以及它们的应用情境: 1. MAPE (平均绝对百分比误差) 描述: 衡量模型预测的相对…

在visual studio里配置Qt插件并运行Qt工程

Qt插件,也叫qt-vsaddin,它以*.vsix后缀名结尾。从visual studio 2010版本开始,VS支持Qt框架的开发,Qt以插件方式集成到VS里。这里在visual studio 2019里配置Qt 5.14.2插件,并配置Qt环境。 1 下载VS2019 下载VS2019,官…

Grander因果检验(格兰杰)原理+操作+解释

笔记来源: 1.【传送门】 2.【传送门】 前沿原理介绍 Grander因果检验是一种分析时间序列数据因果关系的方法。 基本思想在于,在控制Y的滞后项 (过去值) 的情况下,如果X的滞后项仍然有助于解释Y的当期值的变动,则认为 X对 Y产生…

nodejs+vue流浪猫狗救助领养elementui

第三章 系统分析 10 3.1需求分析 10 3.2可行性分析 10 3.2.1技术可行性:技术背景 10 3.2.2经济可行性 11 3.2.3操作可行性: 11 3.3性能分析 11 3.4系统操作流程 12 3.4.1管理员登录流程 12 3.4.2信息添加流程 12 3.4.3信息删除流程 13 第四章 系统设计与…