01-初识threejs

news2025/1/13 17:29:06

基本概念

  • 场景(Scene):场景是 three.js 中所有 3D 对象的容器。它包含了所有的相机、灯光、几何体、材质、纹理等对象。
  • 相机(Camera):相机定义了场景中的视角。它控制了场景中哪些部分会被渲染出来,以及它们在屏幕上的位置和大小。
  • 渲染器(Renderer):渲染器将场景中的 3D 对象渲染成 2D 图像。它使用 WebGL 技术来进行渲染,并将 2D 图像呈现在 HTML5 Canvas 元素中。
  • 几何体(Geometry):几何体是 three.js 中的基本 3D 对象。它们定义了对象的形状和大小,包括顶点、面和线等。
  • 材质(Material):材质定义了对象的外观。它们控制了对象的颜色、纹理、光照等特性。
  • 纹理(Texture):纹理是用于覆盖在几何体表面的图片。它们可以用来创建表面的颜色、反射、透明度等效果。
  • 光源(Light):光源定义了场景中的光照。它们可以是点光源、聚光灯、平行光等不同类型。
  • 动画(Animation):动画是使对象在场景中运动的方法。它们可以使用 Tween.js 等库来创建平滑的动画效果。
  • 控制器(Controller):控制器是用于交互式控制场景中对象的工具,例如旋转、平移、缩放等。three.js 提供了一些内置的控制器,例如 OrbitControls、TrackballControls、FlyControls 等。
  • 粒子系统(Particle System):粒子系统是用于创建大量小粒子效果的工具。它们可以用于模拟火花、雨滴、雪花等效果。
  • 天空盒(Skybox):天空盒是一种用于创建环境纹理的技术,用于模拟场景的背景。它们可以使场景看起来更加真实。
  • 阴影(Shadow):阴影是在场景中创建对象的投影效果。three.js 提供了几种不同的阴影技术,包括基于光线跟踪的阴影技术和基于贴图的阴影技术。
  • 后期处理(Post-Processing):后期处理是一种用于对渲染图像进行额外处理的技术。它们可以用于创建特殊效果,例如景深、反射、色彩校正等。
  • 物理引擎(Physics Engine):物理引擎是用于模拟物理效果的工具。它们可以用于创建具有物理效果的对象,例如球体、盒子、车辆等。
  • 加载器(Loader):加载器是用于将 3D 模型、纹理、音频等资源加载到场景中的工具。three.js 提供了多个加载器,例如 OBJLoader、MTLLoader、TextureLoader 等。

绘制一个基础场景,并为场景添加光源及一个几何体。

1.创建渲染器

const createRenderer = () => new THREE.WebGLRenderer({ canvas: container.value, antialias: true });

2.创建相机

const createCamera = (options = {}) => {
  const { fov, aspect, near, far, positions, eyesP } = {
    fov: 100,
    aspect: 2,
    near: 0.1,
    far: 1000,
    positions: [0, 50, 0],
    eyesP: [0, 0, 0],
    ...options
  }
  const camera = new THREE.PerspectiveCamera(fov, aspect, near, far);
  camera.position.set(...positions);
  camera.lookAt(...eyesP)
  return camera
}

3.创建场景

const scene = new THREE.Scene();

4.创建灯光

const light = new THREE.PointLight(0xffffff, 3)
light.position.set(0, 0, 30)
scene.add(light)

5.创建几何体

const sphereGeometry = new THREE.SphereGeometry(10, 100, 100)
const material = new THREE.MeshPhongMaterial({
    color: 0x0044ff,
    emissive: 0xff00ff
})
const mesh = new THREE.Mesh(sphereGeometry, material);
scene.add(mesh)

6.加载渲染器

renderer.render(scene, camera);

完整代码

<template>
  <div>
    <canvas ref="container"
            height="700"
            width="1400"></canvas>
  </div>
</template>

<script setup>
import THREE from "@/global/three";
import { onMounted, ref } from "vue";

const container = ref(null);
// 创建渲染器
const createRenderer = () => new THREE.WebGLRenderer({ canvas: container.value, antialias: true });
// 创建相机
const createCamera = (options = {}) => {
  const { fov, aspect, near, far, positions, eyesP } = {
    fov: 100,
    aspect: 2,
    near: 0.1,
    far: 1000,
    positions: [0, 50, 0],
    eyesP: [0, 0, 0],
    ...options
  }
  const camera = new THREE.PerspectiveCamera(fov, aspect, near, far);
  camera.position.set(...positions);
  camera.lookAt(...eyesP)
  return camera
}

onMounted(() => {
  const renderer = createRenderer();
  const camera = createCamera();
  const scene = new THREE.Scene();
  const light = new THREE.PointLight(0xffffff, 3)
  light.position.set(0, 0, 30)
  scene.add(light)
  const sphereGeometry = new THREE.SphereGeometry(10, 100, 100)
  const material = new THREE.MeshPhongMaterial({
    color: 0x0044ff,
    emissive: 0xff00ff
  })
  const mesh = new THREE.Mesh(sphereGeometry, material);
  mesh.position.x = 0;
  scene.add(mesh)
  renderer.render(scene, camera);
});
</script>

效果图

在这里插入图片描述

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

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

相关文章

逍遥自在学C语言 | 指针和数组的关联

前言 指针和数组之间存在着紧密的关系。在本文中&#xff0c;我们将探讨指针和数组的关系、指针算术和数组遍历、多维数组与指针以及指针数组和数组指针。 一、人物简介 第一位闪亮登场&#xff0c;有请今后会一直教我们C语言的老师 —— 自在。 第二位上场的是和我们一起学…

车友俱乐部APP小程序系统开发功能有哪些?

车友俱乐部APP小程序系统开发功能有哪些&#xff1f; 1、用户注册&#xff1a;用户首次使用需要使用个人信息进行注册&#xff0c;创建自己的账户并登录才能使用汽车俱乐部APP小程序系统所提供的各项服务。 2、品牌分类&#xff1a;车友俱乐部根据汽车品牌的不同…

6.16 map和set接口

目录 1 Map接口1.2 特点1.3 继承结构1.4 常用方法1.5 练习&#xff1a;Map常用方法测试2 HashMap2.3 练习&#xff1a;获取HashMap的数据2.4 练习&#xff1a;字符串中字符统计3、 set接口3.1 概述3.2 Set集合的特点3.3 常用方法3.4 HashSet3.5 练习: Set相关测试3.6 练习: Set…

项目管理中,优秀的项目经理必须要善于制定目标

在项目管理中&#xff0c;就像船在大海上航行需要灯塔的指引一样&#xff0c;团队也需要明确的目标来指引前进方向。目标不仅仅是为了指引方向&#xff0c;更是凝聚人心的力量。因此&#xff0c;一个优秀的项目经理必须要善于制定目标&#xff0c;让员工为目标干活&#xff0c;…

云原生安全联防联抗策略玩转微隔离

前言 随着信息技术的发展、互联网的快速普及&#xff0c;越来越多的信息被存储在云端&#xff0c;企业面临的安全问题也日益突出。在《网络安全法》、《数据安全法》等多部法律法规要求下&#xff0c;各行业用户纷纷设立安全部门。不管安全部门里是“一人当关”还是“三三两两…

尖峰平谷电表

尖峰平谷电表是一种新型的电能表&#xff0c;可以分别测量电力资源的尖峰、峰、平、谷和深谷等不同时段的用电量和用电负荷。这种电表的出现是为了帮助电力公司实现节能减排和精细管理的目标&#xff0c;同时也能够帮助用户合理使用电力资源&#xff0c;降低用电浪费和碳排放。…

基于SSM的在线考试系统

✌全网粉丝20W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取项目下载方式&#x1f345; 一、项目背景介绍&#xff1a; 在线考试借助于网络来…

7个银行的软件测试项目实战,别再说简历项目不知道怎么写了

目录 前言 项目描述1&#xff1a;上海华瑞银行直连票据项目 项目描述2&#xff1a;平安金服风控中台系统 项目描述3&#xff1a;众安创展APP项目 项 目4&#xff1a; 招商银行VTM自助渠道服务系统 项 目5&#xff1a;招商银行票据支付 项 目6&#xff1a; 平安银行风控系…

6.9关键字static,final的使用

关键字&#xff1a;static 概念 是java中的一个关键字 用于修饰成员&#xff08;成员变量和成员方法&#xff09; 类属性、类方法的设计思想 概念&#xff1a; 当我们编写一个类时&#xff0c;其实就是在描述其对象的属性和行为&#xff0c;而并没有产生实 质上的对象&#x…

带启动参数的启动idea

-Dspring.profiles.activedev -Dserver.addr192.168.1.153:8848

立即修复!华硕曝路由器的关键漏洞

近日&#xff0c;华硕针对多种路由器型号的漏洞&#xff0c;发布了安全固件更新&#xff0c;并敦促客户立即更新设备或限制WAN访问&#xff0c;以保证其设备安全。 华硕方面表示&#xff0c;新发布的固件中包含九个安全漏洞的修复程序&#xff0c;包括高漏洞和关键漏洞。其中最…

ZYNQ——锁相环(PLL)实验

文章目录 一、介绍二、添加时钟 IP三、设计源代码四、仿真测试五、添加 ILA IP六、分配引脚七、板上验证八、示波器输出九、问题汇总 一、介绍 ZYNQ开发板上只有一个50MHz的时钟输入&#xff0c;如果要用到其他频率的时钟&#xff0c;就需要通过FPGA芯片内部集成的PLL(Phase L…

认识磁盘及磁盘的读写原理

认识磁盘 磁盘是计算机主要的存储介质&#xff0c;可以存储大量的二进制数据&#xff0c;并且断电后也能保持数据不丢失。早期计算机使用的磁盘是软磁盘&#xff08;Floppy Disk&#xff0c;简称软盘&#xff09;&#xff0c;如今常用的磁盘是硬磁盘&#xff08;Hard disk&…

linux centos Python + Selenium+Chrome自动化测试环境搭建?

在 CentOS 系统上搭建 Python Selenium Chrome 自动化测试环境&#xff0c;需要执行以下步骤&#xff1a; 1、安装 Python CentOS 7 自带的 Python 版本较老&#xff0c;建议使用 EPEL 库或源码安装 Python 3。例如&#xff0c;使用 EPEL 库安装 Python 3&#xff1a; sud…

【C语言初阶】循环语句的具体用法,有这篇博客就够了

君兮_的个人主页 勤时当勉励 岁月不待人 C/C 游戏开发 Hello米娜桑&#xff0c;这里是君兮_&#xff0c;今天又抽空为大家更新我们的主线0基础C语言啦&#xff01;今天要将的内容是循环语句的具体用法。同时如果你是0基础小白的话&#xff0c;建议先看看下面两篇博客哦&#…

普通人接了人生第一单

大家好&#xff0c;我是 “秋意零” &#xff0c;全网同名&#xff08;某平台多了一个数字0 “如&#xff1a;秋意零0”&#xff09;。 你&#xff0c;相信天上掉馅饼吗&#xff1f; 40 分钟赚 150 你敢信&#xff1f; 现在我突然有点信了&#xff0c;为什么呢&#xff1f;请…

ESP-C3入门19. RSA算法加密、解密的实现

ESP-C3入门19. RSA算法加密、解密的实现 一、概述二、重要函数1. mbedtls_pk_parse_public_key和mbedtls_pk_parse_key函数原型&#xff1a;函数参数&#xff1a; 2. mbedtls_pk_encrypt函数原型&#xff1a;函数参数&#xff1a;函数功能&#xff1a; 三、实现过程1. CMakeLis…

@Param注解的用法

1、使用Param注解的原因 在 Mapper接口中&#xff0c;当方法的参数为多个字面量类型&#xff0c;此时mybatis会将这些参数存储在一个Map集合中&#xff0c;以两种方式进行存储 1、以arg0.arg1…为键&#xff0c;以参数为值2、以param1&#xff0c;param2…为键&#xff0c;以…

解读Linux常用命令使用方法

文章目录 1.前言1.1 定义1.2 特点 2.常用命令介绍2.1 ls2.2 pwd2.3 cd2.4 touch2.5 cat2.6 mkdir2.7 rm2.8 cp2.9 mv2.10 man&#xff08;联机手册&#xff09;2.11 vim2.12 grep2.13 ps2.14 netstat 1.前言 1.1 定义 Linux是一套免费使用和自由传播的类Unix操作系统&#xf…

【百套源码】HTML5期末大作业 - 各类网页作业源码合集

文章目录 持续更新文章记录1️⃣ 个人介绍类相关源码1.1 html实现个人简历1.2 科技风个人简历1.3 网站风个人简历1.4 多种风格个人主页模板1.5 html好看的个人简历明星版1.6 专属个人主页-系列11.7 专属个人主页-系列21.8 专属个人主页-系列31.9 专属个人主页-系列41.10 专属个…