【ThreeJS Basics 1-3】Hello ThreeJS,实现第一个场景

server/2025/2/12 6:11:00/

文章目录

  • 环境
  • 创建一个项目
  • 安装依赖
  • 基础 Web 页面
  • 概念解释
  • 编写代码
  • 运行项目


环境

我的环境是 node version 22


创建一个项目

首先,新建一个空的文件夹,然后 npm init -y , 此时会快速生成好默认的 package.json

安装依赖

在新建的项目下用 npm 安装依赖

  • npm install vite
  • npm install three

基础 Web 页面

在项目下新建 index.html

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>First Three.js Project</title>
</head>
<body><canvas class="webgl"></canvas><script type="module" src="./script.js"></script>
</body>
</html>

概念解释

想要使用 ThreeJS 实现一些场景,以下的对象是必要的

  • A scene that will contain objects
  • Some objects
  • A camera
  • A renderer

大概的思路是

  1. 新建场景
  2. 新建一个立方体,把他加入场景
  3. 新建一个照相机,加入场景
  4. 创建渲染器,配置渲染尺寸,说明渲染那个场景,以及用那个摄像头渲染

以下就是在脚本中如何定义并使用这四种对象

编写代码

新建 script.js

import * as THREE from 'three'// Canvas
const canvas = document.querySelector('canvas.webgl')// Scene
const scene = new THREE.Scene()/*** Object*/
const geometry = new THREE.BoxGeometry(1, 1, 1)
const material = new THREE.MeshBasicMaterial({ color: 0xff0000 })
const mesh = new THREE.Mesh(geometry, material)
scene.add(mesh)/*** Sizes*/
const sizes = {width: 800,height: 600
}/*** Camera*/
const camera = new THREE.PerspectiveCamera(75, sizes.width / sizes.height)
camera.position.z = 3
scene.add(camera)/*** Renderer*/
const renderer = new THREE.WebGLRenderer({canvas: canvas
})
renderer.setSize(sizes.width, sizes.height)
renderer.render(scene, camera)

运行项目

通过 npm run dev 跑起来看一看

在这里插入图片描述
也许你会觉得它并不像个空间上的物体,这是因为,我们的照相机跟物体是水平的

所有的元素,添加到场景时候,位置坐标都是 ( 0,0,0 )

我们修改一下材质 wireframe

const material = new THREE.MeshBasicMaterial({ color: 0xff0000, wireframe: true })

你就会得到如下的画面

在这里插入图片描述


http://www.ppmy.cn/server/166975.html

相关文章

除了重定向,还有其他方法处理未定义路由吗?

是的&#xff0c;除了重定向&#xff0c;处理未定义路由还有其他方法。以下是几种常见的处理方式&#xff1a; 1. 显示404页面而不重定向 你可以直接在路由配置中定义一个 404 路由&#xff0c;并在应用中有条件地显示该页面&#xff0c;而不进行重定向。这种方式允许你在未定…

JUnit5 单元测试详解

目录 一、什么是单元测试&#xff0c;为什么要进行单元测试&#xff1f; 二、JUnit 框架介绍 1.如何引进这些Jar包&#xff1f; 2.如何查看是否引进&#xff1f; ⑴. Project&#xff08;项目&#xff09; ⑵. Modules&#xff08;模块&#xff09; ⑶. Libraries&#…

python之keyring库:安全密码管理库,不同平台service_name、username的获取

目录 keyring库的基本用法 设置及修改密码 获取密码 删除密码 检索密码 获取当前系统的所有service_name Windows 系统 macOS 系统 Linux 系统 跨平台封装 获取同一service_name下的所有username Windows 系统 macOS 系统 keyring 是一个Python库,它提供了一个简…

ProcessingP5js数据可视化

折线图绘制程序设计说明 可以读取表格数据&#xff0c;并转换成折线图&#xff0c;条形图和饼状图&#xff0c;并设计了衔接动画效果 1. 功能概述 本程序使用 Processing 读取 CSV 文件数据&#xff0c;并绘制带有坐标轴和数据点的折线图。横坐标&#xff08;X 轴&#xff09…

fps动作系统9:动画音频

文章目录 动画音频创建音频蓝图cue音量乘数 音效衰减衰减空间 绑定到动画动画序列轨道 动画音频 创建音频蓝图 cue 音量乘数 音量大小 音效衰减 空间音效 衰减 空间 绑定到动画 动画序列 轨道 横着的方向是有不同的轨道的&#xff0c;阴影的就是。

github - 使用

注册账户以及创建仓库 要想使用github第一步当然是注册github账号了, github官网地址:https://github.com/。 之后就可以创建仓库了(免费用户只能建公共仓库),Create a New Repository,填好名称后Create,之后会出现一些仓库的配置信息,这也是一个git的简单教程。 Git…

攻防世界33 catcat-new【文件包含/flask_session伪造】

题目&#xff1a; 点击一只猫猫&#xff1a; 看这个url像是文件包含漏洞&#xff0c;试试 dirsearch扫出来/admin&#xff0c;访问也没成功&#xff08;--delay 0.1 -t 5&#xff09; 会的那几招全用不了了哈哈&#xff0c;那就继续看答案 先总结几个知识点 1./etc/passwd&am…

antd-react日期组件disabledDate不可选择的日期 (置灰)属性

需求&#xff1a;原定结项时间表单里回显为2025-02-06&#xff0c;延期时间的选择范围要设置从2025-02-07开始选择包括2.7号的; 2.7号之前的置灰&#xff0c;不可选择 PC端部分代码&#xff1a; // react的函数组件写法 const disabledDate function (current) {console.log(c…