当前位置: 首页 > article >正文

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

文章目录

  • 环境
  • 创建一个项目
  • 安装依赖
  • 基础 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.kler.cn/a/541821.html

相关文章:

  • 2.11寒假作业
  • Django学习笔记(第一天:Django基本知识简介与启动)
  • VUE项目中实现权限控制,菜单权限,按钮权限,接口权限,路由权限,操作权限,数据权限实现
  • AI与大数据融合:技术路径与行业赋能
  • 强化学习 DPO 算法:基于人类偏好,颠覆 PPO 传统策略
  • Vue(4)
  • Qt - 地图相关 —— 2、Qt调用百度在线地图功能示例全集,包含线路规划、地铁线路查询等(附源码)
  • 喂饭式教程 - 腾讯云轻量服务器部署DeepSeek
  • C++ | Goal 解析器实现
  • 4.Excel:李东阳-电器企业-本年度的生产与营销计划❗(18)
  • Linux 快速对比两个文件的差异值
  • ORM框架(Object-Relational Mapping,对象关系映射框架)
  • 使用Hexo部署NexT主体网站
  • 现代前端工程化实践:高效构建的秘密
  • 以简单的方式过一生
  • k8s部署logstash
  • HTML 左右联动高亮示例
  • ‌Linux系统中无法使用netstat命令的原因及解决方法
  • Django 简单安装(pycharm)
  • 重生之我要当云原生大师(十五)归档和传输文件
  • 迷宫问题 XDOJ
  • Golang学习历程【第七篇 闭包type defer panic recover了解time包】
  • 【AI落地应用实战】DeepSeek大模型应用探讨与RAG技术全景——从实验室榜单看向真实业务场景
  • 易语言Easy Programming Language
  • ArrayList、LinkedList、HashMap、HashTable、HashSet、TreeSet
  • 【时序预测】-深度学习系列