threejs零基础搭建3D可视化汽车展厅

news2024/11/14 23:35:49

前置知识(最下面有完整代码)

每个代码都有注释,零基础也能看懂
中文官方文档教程

创建项目

创建空文件夹

执行如下命令初始化package.json文件

npm init -y

安装threejs包

yarn add three

安装tween.js动画库,用于做动画
tweenjs文档

yarn add @tweenjs/tween.js

安装gui调试工具

lil-gui官方文档

yarn add lil-gui

使用parcel工具打包执行项目

官方网站

yarn global add parcel-bundler

根目录下创建src/index.html

这个链接的资料,点击下载到scr文件夹内部,它是个public文件夹,将其下载下来放到scr文件夹内部

初始化html结构

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>
<body>
  
</body>
</html>

package.json里面配置启动命令(后面的是启动文件路径)

增加type:module

{
   
  "name": "demo",
  "version": "1.0.0",
  "description": "",
  "type": "module",
  "main": "index.js",
  "scripts": {
   
    "dev": "parcel src/index.html",
    "build": "parcel build src/index.html"
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "dependencies": {
   
    "three": "^0.166.1"
  }
}

src下新建app.jsindex.html里面引入一下

<!doctype html>
<html lang="en">

<head>
  <meta charset="utf-8" />
  <title>My First Parcel App</title>
  <style>
    * {
   
      padding: 0;
      margin: 0;
    }
  </style>
</head>

<body>
  <script src="./app.js"></script>
</body>

</html>

使用yarn run dev启动项目

双击启动后的网址,查看页面

在这里插入图片描述

能访问到网页就说明配置正常

案例一(设置几何体及其材质)

案例代码

后续所有操作都在app.js内部写

一切物体都身处一个场景内,即使3D页面也是如此

// 引入three.js
import * as THREE from 'three'
// 引入轨道控制器
import {
    OrbitControls } from 'three/examples/jsm/controls/OrbitControls.js'
// 引入材质纹理图片,用于设置正方体纹理
import pkq from './public/pkq1.jpg'
// 引入动画库插件
import TWEEN from '@tweenjs/tween.js'

// 全局变量
let scene, camera, renderer, controls, cube

// 初始化场景
function initScene () {
   
  // 创建场景
  scene = new THREE.Scene()
}

// 初始化相机
function initCamera () {
   
  // 参数一:夹角,参数二:宽高比,参数三:近裁剪面,参数四:远裁剪面
  camera = new THREE.PerspectiveCamera(45, window.innerWidth / window.innerHeight, 0.1, 1000)
  // 设置相机位置(x,y,z)
  // camera.position.set(0, 0, 10);
  // 也可以
  // camera.position.z = 10
  // 设置相机方向(指向的场景)
  camera.lookAt(scene.position)
}

// 初始化渲染器
function initWebGL () {
   
  // 设置渲染器
  renderer = new THREE.WebGLRenderer()
  // 设置渲染器的尺寸
  renderer.setSize(window.innerWidth, window.innerHeight)
  // 将渲染器添加到body
  document.body.appendChild(renderer.domElement)
}

// 添加坐标系
function initAxis () {
   
  // 参数一:场景,参数二:坐标系长度
  let axis = new THREE.AxesHelper(3)
  // 将坐标系添加到场景中
  scene.add(axis)
}

// 添加轨道控制器(可以滑动屏幕和缩放屏幕)
function initTrackballControls () {
   
  // 参数一:相机,参数二:渲染器
  let trackballControls = new OrbitControls(camera, renderer.domElement)
  // 添加控制器
  scene.add(trackballControls)
}

// 创建立方体
function initCube () {
   
  // 创建几何体形状
  let geometry = new THREE.BoxGeometry(1, 1, 1)
  // 设置图片纹理
  let texture = new THREE.TextureLoader().load(pkq)
  // 创建材质颜色
  let material = new THREE.MeshBasicMaterial({
   
    color: 'yellow',
    map: texture
  })
  // 创建网格
  cube = new THREE.Mesh(geometry, material)
  // 将网格添加到场景中
  scene.add(cube)
}

// 主函数
function main () 

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

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

相关文章

问题解决实录 | Anaconda | Anaconda Navigator 启动无反应

问题解决实录 | Anaconda | Anaconda Navigator 启动无反应 以管理员身份运行 Anaconda Prompt conda update -n root conda conda update --all如果执行完以上步骤 碰到 AttributeError: module ‘pkgutil’ has no attribute ‘ImpImporter’. Did you mean: ‘zipimporter…

python3.10.4——CentOS7安装步骤

目录 1.CentOS7中默认有python2.7.5 2.安装前置依赖程序 3.在python官网下载linux系统安装包 4.解析、编译安装python3.10.4 5.创建软链接 6.修改yum相关配置 7.重新检查python版本号 1.CentOS7中默认有python2.7.5 2.安装前置依赖程序 yum install wget zlib-devel bz…

因果推断 | 双重机器学习(DML)算法原理和实例应用

文章目录 1 引言2 DML算法原理2.1 问题阐述2.2 DML算法 3 DML代码实现3.1 策略变量为0/1变量3.2 策略变量为连续变量 4 总结5 相关阅读 1 引言 小伙伴们&#xff0c;好久不见呀。 距离上次更新已经过去了一个半月&#xff0c;上次发文章时还信誓旦旦地表达自己后续目标是3周更…

HOST处理器访问PCI设备

HOST处理器对PCI设备的数据访问主要包含两方面内容&#xff0c;一方面是处理器向PCI设备发起存储器和I/O读写请求&#xff1b;另一方面是处理器对PCI设备进行配置读写。 在PCI设备的配置空间中&#xff0c;共有6个BAR寄存器。每一个BAR寄存器都与PCI设备使用的一组PCI总线地址…

RK3568笔记四十一:DHT11驱动开发测试

若该文为原创文章&#xff0c;转载请注明原文出处。 记录开发单总线&#xff0c;读取DHT11温湿度 一、DHT11介绍 DHT11是串行接口&#xff08;单线双向&#xff09;DATA 用于微处理器与 DHT11之间的通讯和同步&#xff0c;采用单总线数据格式&#xff0c;一次通讯时间4ms左右…

无刷电机控制之——帕克变换

前言 克拉克逆变换请参考如下链接 等幅值变换与克拉克逆变换 一、FOC算法流程图 二、帕克变换概念 1、我们需要知道二维坐标系中的I α \alpha α和I β \beta β&#xff0c;这两个变量的变化规律&#xff0c;通俗来讲就是要知道这两个变量是谁输入的、谁控制的&#xff0c…

pytorch学习(十六)conda和pytorch的安装

1.安装anaconda 1.1 首先下载安装包 1&#xff09;进入anaconda官网 Anaconda | The Operating System for AI 2&#xff09;注册一下 3&#xff09;下载 4&#xff09;一直点直到安装完 5&#xff09;配置环境变量 在path路径中加入 Anaconda安装路径 Anaconda安装路径\S…

Redis高级篇—分布式缓存

目录 Redis持久化 RDB持久化 AOF持久化 RDB与AOF对比 Redis主从 全量同步 增量同步 Redis哨兵 RedisTemplate集成哨兵实现 Redis分片集群 散列插槽 集群伸缩 故障转移 自动故障转移 手动故障转移 RedisTemplate访问分片集群 Redis持久化 RDB持久化 RDB全称Re…

zabbix监控Windows机器进程数量

zabbix监控Windows机器进程数量 文章目录 zabbix监控Windows机器进程数量背景前提条件目的实施 背景 一个windows上的进程总是崩溃&#xff0c;总会出现进程不存在的情况&#xff0c;不能实时去服务器上检查&#xff0c;自己不勤快就要动脑子&#xff0c;让自己变的更懒&#…

Java语言程序设计基础篇_编程练习题*15.9 (使用箭头键画线)

*15.9 (使用箭头键画线) 请编写一个程序&#xff0c;使用箭头键绘制线段。所画的线从面板的中心开始&#xff0c;当敲 击向右、向上、向左或向下的箭头键时&#xff0c;相应地向东、向北、向西或向南方向画线&#xff0c;如图 15-26b所示 代码展示&#xff1a;编程练习题15_9D…

汽车电动空调系统

1.电动空调系统概述 电动汽车制冷空调系统与传统汽车制冷空调系统基本原理一样&#xff0c;区别在于电动汽车空调系统采用电动空调压缩机。电动空调压缩机由驱动电机&#xff0c;压缩机&#xff0c;控制器集成。 电动空调压缩机的驱动电机采用体积小&#xff0c;质量轻&#x…

【线性表】:顺序表里一些主要功能的实现

框架 线性表 是 n 个具有相同特征的数据元素的有限序列 常见的线性表&#xff1a;顺序表、链表、栈、队列… 线性表在逻辑上是线性结构&#xff0c;也就是连续的一条直线 但在物理结构上不一定是连续的&#xff0c;线性表在物理上存储时&#xff0c;通常以数组和链式结构的形式…

数据结构(栈及其实现)

栈 概念与结构 栈&#xff1a;⼀种特殊的线性表&#xff0c;其只允许在固定的⼀端进⾏插⼊和删除元素操作。 进⾏数据插⼊和删除操作的⼀端称为栈顶&#xff0c;另⼀端称为栈底。栈中的数据元素遵守后进先出 LIFO&#xff08;Last In First Out&#xff09;的原则。 压栈&…

Windows版MySQL5.7解压直用(如何卸载更换位置重新安装)

文章目录 停止mysql进程及服务迁移整个mysql文件夹删除data重启计算机重新安装 停止mysql进程及服务 net stop mysql mysqld -remove mysql迁移整个mysql文件夹 删除data 重启计算机 shutdown -r -t 0重新安装 https://blog.csdn.net/xzzteach/article/details/137723185

【Socket 编程 】基于UDP协议实现通信并添加简单业务

文章目录 前言实现echo server对于服务器端对于客户端UdpServer.hpp文件nococpy.hpp文件InetAddr.hpp头文件Log.hpp头文件UdpServerMain.cpp源文件UdpClientMain.cpp源文件运行结果 实现翻译业务Dict.hpp头文件UdpServerMain.cppUdpserver.hpp运行结果 前言 在了解了Socket编程…

最优化理论与方法-第十一讲-线性规划-极点的刻画

文章目录 1. 概述2. 线性规划定义3. 多面体的基本性质3.1 定义3.2 证明13.3 证明2 B站老师学习视频 1. 概述 线性规划的标准形式&#xff1b;多面体的几何分解&#xff1b;单纯形法&#xff1b;对偶单纯形法 2. 线性规划定义 线性规划Linear Programming&#xff1a;目标函数…

Ubuntu16.04环境下Baxter机器人开发环境搭建要点说明

Ubuntu16.04环境下Baxter机器人开发环境搭建要点说明 前面写过一篇文章&#xff0c;描述了在ubuntu20.04环境下baxter机器人开发环境的搭建&#xff0c;本人在后来的使用中&#xff0c;出于一些原因又在ubuntu16环境下搭建了开发环境&#xff0c;二者总体流程基本类似&#xf…

【数据分享】2013-2022年我国省市县三级的逐年SO2数据(excel\shp格式\免费获取)

空气质量数据是在我们日常研究中经常使用的数据&#xff01;之前我们给大家分享了2000——2022年的省市县三级的逐年PM2.5数据和2013-2022年的省市县三级的逐年CO数据&#xff08;均可查看之前的文章获悉详情&#xff09;&#xff01; 本次我们分享的是我国2013——2022年的省…

【Spark官方文档部分翻译】RDD编程指南(RDD Programming Guide)

写在前面 内容如何选择 本翻译只翻译本人认为精华的部分&#xff0c;本人认为的Spark的一些核心理念&#xff0c;编程思想。一些特别基础的操作包括但不限于搭建环境就不在此赘述了。 配套版本 本系列基于Spark 3.3.1&#xff0c;Scala 2.12.10&#xff0c;进行翻译总结 原…

pycharm报错:No module named pip/No module named pytest

1、问题概述? 今天在执行一个python脚本的时候,控制台提示:No module named pytest,就是没有pytest模块,于是我使用pip命令进行安装,命令如下; pip install pytest 结果又提示No module named pip,说我没有pip模块,没办法,再安装pip 2、安装pip-方式1 在pycharm的T…