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

Three.js初试——基础概念(二)

前言

姊妹篇:Three.js初试——基础概念 介绍了 Three.js 的一些核心要素概念,这篇文章会讲一下它的关键要素概念。

之前我们了解到展示一个3D图像,必须要有场景、相机、渲染器这些核心要素,仅仅这些还不够,我们还需要在场景中放置物体(拍摄对象)、光源,才能展示3D图像。

物体(拍摄对象)

绘制3D模型,常用的做法是用三角形组成的网格来模拟。

几何体模型(Geometry)

Three.js 中预设了一些二维和三维几何体模型。

其中,二维几何体模型:

  • 平面几何体(PlaneGeometry)
  • 圆形几何体(CircleGeometry)
  • 圆环几何体(RingGeometry)

三维几何体模型:

  • 立方几何体(BoxGeometry)
  • 球几何体(SphereGeometry)
  • 圆柱几何体(CylinderGeometry)
  • 圆锥几何体(ConeGeometry)
  • 圆环几何体(TorusGeometry)

在使用时,实例化相应几何体对象。

举例:

// 创建一个圆环几何体(环面半径为10,管道半径为3,管道横截面分段数为16,管道分段数为100,圆环圆心角为Math.PI * 2)
const geometry = new THREE.TorusGeometry( 10, 3, 16, 100 );

说明:

// 构造器
TorusGeometry(radius: Float, tube: Float, radialSegments: Integer, tubularSegments: Integer, arc: Float)
  • radius - 环面的半径,从环面的中心到管道横截面的中心。默认值是1。
  • tube — 管道的半径,默认值为0.4。
  • radialSegments — 管道横截面的分段数,默认值为8。
  • tubularSegments — 管道的分段数,默认值为6。
  • arc — 圆环的圆心角(单位是弧度),默认值为Math.PI * 2。

在线示例:TorusGeometry演示

Three.js Geometry

材质(Material)

Three.js 中预设了几种材质对象。

  • 基础线条材质(LineBasicMaterial)
    • 一种用于绘制线框样式几何体的材质。
  • 基础网格材质(MeshBasicMaterial)
    • 一个以简单着色(平面或线框)方式来绘制几何体的材质。
    • 这种材质不受光照的影响。
  • Lambert网格材质(MeshLambertMaterial)
    • 一种非光泽表面的材质,没有镜面高光。
  • 法线网格材质(MeshNormalMaterial)
    • 一种把法向量映射到RGB颜色的材质。
  • 标准网格材质(MeshStandardMaterial)
    • 一种基于物理的标准材质,使用Metallic-Roughness工作流程。

详细请查阅 材质文档

举例:

const material = new THREE.MeshBasicMaterial( { color: 0xffff00 } );

在线示例:MeshBasicMaterial演示

Three.js Material

网格(Mesh)

表示基于以三角形为polygon mesh(多边形网格)的物体的类。

当有了几何体模型和材质之后,我们需要通过一个网格(Mesh)将两者结合起来,创建正在的拍摄对象。

两种不同的拍摄对象构造方法:

import * as THREE from 'three'
import { createMultiMaterialObject } from 'three/examples/jsm/utils/SceneUtils'// 第一个参数代表物体的形状,第二个参数代表物体的材质。
// 只能是一种材质
new THREE.Mesh(geometry, material)
// 可以使用多种材质(数组格式)
createMultiMaterialObject(geometry,[materials...])

举例:

// 创建基础网格材质
let materialBasic = new THREE.MeshBasicMaterial({color: 0xFF4500,wireframe: true   // 是否将几何体渲染为线框,默认值为false(即渲染为平面多边形)
});
// 创建法线网格材质
let materialNormal = new THREE.MeshNormalMaterial();
const cube = new THREE.Mesh(geometry, material);
// 创建多种网格(因为有多个材质)
const cube2 = createMultiMaterialObject(geometry, [materialBasic,materialNormal
]);

最后,把物体放在场景中,调用 add 方法。

scene.add(cube);

光源

Three.js 中预设了几种光源。

  • 环境光(AmbientLight)
    • 环境光会均匀的照亮场景中的所有物体。
    • 环境光不能用来投射阴影,因为它没有方向。
  • 平行光(DirectionalLight)
    • 平行光是沿着特定方向发射的光。这种光的表现像是无限远,从它发出的光线都是平行的。
    • 常常用平行光来模拟太阳光的效果。
    • 平行光可以投射阴影。
  • 点光源(PointLight)
    • 从一个点向各个方向发射的光源。一个常见的例子是模拟一个灯泡发出的光。
    • 该光源可以投射阴影。
  • 聚光灯(SpotLight)
    • 光线从一个点沿一个方向射出,随着光线照射的变远,光线圆锥体的尺寸也逐渐增大。
    • 该光源可以投射阴影。

详细请查阅 灯光文档

示例:

// White directional light at half intensity shining from the top.
const directionalLight = new THREE.DirectionalLight( 0xffffff, 0.5 );
scene.add(directionalLight);

说明:

// 构造器
DirectionalLight(color: Integer, intensity: Float)
  • color - (可选参数) 16进制表示光的颜色。 缺省值为 0xffffff (白色)。
  • intensity - (可选参数) 光照的强度。缺省值为1。

这篇文章的主要内容就介绍到这里,继续学习中。一起加油!

相关文章:

Three.js初试——基础概念(二)

前言 姊妹篇:Three.js初试——基础概念 介绍了 Three.js 的一些核心要素概念,这篇文章会讲一下它的关键要素概念。 之前我们了解到展示一个3D图像,必须要有场景、相机、渲染器这些核心要素,仅仅这些还不够,我们还需要…...

Qt音视频开发21-mpv内核万能属性机制

一、前言 搞过vlc内核后又顺带搞了搞mpv内核,mpv相比vlc,在文件数量、sdk开发便捷性方面绝对占优势的,单文件(可能是静态编译),不像vlc带了一堆插件,通过各种属性来set和get值,后面…...

C语言学生随机抽号演讲计分系统

6.学生随机抽号演讲计分系统(★★★★) 设计一款用于课程大作业检查或比赛计分的软件,基本功能: (1)设置本课程的学生总数 (2)根据本次参与的学生总数,随机抽取一个还未汇报演讲的学生的学号。 (3)每个学生汇报演讲完毕,输入该学生…...

Spring Boot 3.0系列【12】核心特性篇之任务调度

有道无术,术尚可求,有术无道,止于术。 本系列Spring Boot版本3.0.3 源码地址:https://gitee.com/pearl-organization/study-spring-boot3 文章目录 前言Spring Scheduler1. 单线程任务2. 自动配置3. 多线程异步任务Quartz1. 简介2. 核心组件2.1 Job(任务)2.2 Trigger(…...

Java操作XML

Java操作XML XML语法 一个XML文件分为文档声明、元素、属性、注释、CDATA区、特殊字符、处理指令。 转义字符 对于一些单个字符&#xff0c;若想显示其原始样式&#xff0c;也可以使用转义的形式予以处理。 & > &amp; < > < > > > " &g…...

女神节灯笼祝福【HTML+CSS】

✅作者简介&#xff1a;2022年博客新星 第八。热爱国学的Java后端开发者&#xff0c;修心和技术同步精进。 &#x1f34e;个人主页&#xff1a;Java Fans的博客 &#x1f34a;个人信条&#xff1a;不迁怒&#xff0c;不贰过。小知识&#xff0c;大智慧。 &#x1f49e;当前专栏…...

CUDA并行计算基础知识

1、相关缩写术语 显卡:GPU 显卡驱动:驱动软件 GPU架构: 硬件的设计方式,例如是否有L1 or L2缓存 CUDA: 一种编程语言像C++, Python等,只不过它是专门用来操控GPU的 cudnn: 一个专门为深度学习计算设计的软件库,里面提供了很多专门的计算函数 CUDAToolkit:所谓的装cuda首先…...

88. 合并两个有序数组

给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2&#xff0c;另有两个整数 m 和 n &#xff0c;分别表示 nums1 和 nums2 中的元素数目。请你 合并 nums2 到 nums1 中&#xff0c;使合并后的数组同样按 非递减顺序 排列。注意&#xff1a;最终&#xff0c;合并后数组不应…...

卢益贵(码客):软件开发团队的管理要素

卢益贵&#xff08;码客&#xff09;&#xff1a;软件开发团队的管理要素 最好的范例是领导 无论个人素养、技术水平和代码风格&#xff0c;管理者应该起到典范的作用。 最高的权力是威望 管理者的威望比手中权力更有信服力。在处处倚仗权力施压的团队中&#xff0c;高压必有…...

中小企业的TO B蓝海,如何「掘金」?

中国中小企业的数字化转型土壤&#xff0c;如今究竟成长到了哪一步&#xff1f;对一众数字服务厂商而言&#xff0c;在另一个付费群体出现的当下&#xff0c;产品形态是否应该进行微调&#xff1f; 作者|皮爷 出品|产业家 中国市场存在一个黄金定律&#xff1a;二八法则。 这…...

C++ 算法主题系列之集结0-1背包问题的所有求解方案

1. 前言 背包问题是类型问题&#xff0c;通过对这一类型问题的理解和掌握&#xff0c;从而可以归纳出求解此类问题的思路和模板。 背包问题的分类有&#xff1a; 0-1背包问题&#xff0c;也称为不可分割背包问题。无限背包问题。判定性背包问题.带附属关系的背包问题。双背包…...

【Vue】Vue常见的6种指令

Vue的6种指令-前言指令&#xff08;Directives&#xff09;是vue 为开发者提供的模板语法&#xff0c;用于辅助开发者渲染页面的基本结构。vue 中的指令按照不同的用途可以分为如下6 大类① 内容渲染指令 ② 属性绑定指令 ③ 事件绑定指令 ④ 双向绑定指令 ⑤ 条件渲染指令 ⑥ …...

计算机科学与技术(嵌入式)四年学习资料_文件目录树

说明&#xff1a; 资料内容主要包括&#xff1a;计嵌专业2019级大学四年主要科目的各种电子资料&#xff0c;有电子实验报告、课程设计报告、课程设计项目、整理复习笔记、电子书、ppt、练习题、期末试卷、部分课程软件资源、科创项目&#xff0c;职业生涯规划书&#xff0c;大…...

【java】Java 继承

文章目录继承的概念生活中的继承&#xff1a;类的继承格式为什么需要继承公共父类&#xff1a;继承类型继承的特性继承关键字extends关键字implements关键字super 与 this 关键字final 关键字构造器继承的概念 继承是java面向对象编程技术的一块基石&#xff0c;因为它允许创建…...

自媒体账号数据分析从何入手?

账号的数据可以直接反应这个账号的好坏&#xff0c;数据越高收益就会越好&#xff0c;数据越差收益自然高不了。 新手要从哪些方面入手见效更快呢&#xff1f;今天大周就来把自己的经验分享给粉丝们&#xff01; 1、账号定位 &#xff08;1&#xff09;账号所创作的领域 &a…...

Clickhouse新版本JSON字段数据写入方式

Clickhouse新版本JSON字段数据写入方式 在Clickhouse版本22.3.1版本以上&#xff0c;提供了针对JSON格式数据的新的数据类型&#xff1a;JSON&#xff0c;从而实现了存储此类数据由原先的结构化表结构&#xff0c;更新为现在的半结构化表存储。对于新增字段&#xff0c;某些同…...

HNU-电路与电子学-实验2

实验二 模型机组合部件的实现&#xff08;一&#xff09; 班级 计XXXXX 姓名 wolf 学号 2021080XXXXX 一、实验目的 1&#xff0e;了解简易模型机的内部结构和工作原理。 2&#xff0e;熟悉译码器、运算器的工作原理。 3&#xff0e;分析模型机的功…...

从0开始学python -49

Python MySQL - mysql-connector 驱动 -2 插入数据 插入数据使用 “INSERT INTO” 语句&#xff1a; demo_mysql_test.py: 向 sites 表插入一条记录。 import mysql.connectormydb mysql.connector.connect(host"localhost",user"root",passwd"…...

Spring MVC 详解(连接、获取参数、返回数据)

在之前我们先简单那谈谈Spring、SpringBoot以及Spring MVC框架之间有什么关系&#xff1f;首先Spring是一个框架&#xff0c;SpringBoot脚手架是为了快速开发Spring框架而创造的技术。可以理解为SpringBoot又在Spring上面包了一层壳子&#xff0c;是基于Spring的&#xff0c;是…...

IT女神节(致敬中国IT界永远的女神严蔚敏-数据结构)

我们都知道程序数据结构算法。相信很多人都学过严蔚敏的数据结构的课程。作为一个码农&#xff0c;在这不管是3.7女神节&#xff0c;还是3.8妇女节。我觉得都有必要向这些教育界的老前辈致敬。今天我就梳理梳理&#xff0c;最经典的数据结构教材。 严蔚敏介绍&#xff08;来自…...

Java 集合分页

一、前言 在Java开发中&#xff0c;若单次展示的数据量太大&#xff0c;会造成程序响应缓慢&#xff0c;就需要用到 分页 功能&#xff0c;每一页展示一定量的数据&#xff0c;分多次展示 ... 那么在List集合中&#xff0c;如何实现 分页 功能呢&#xff1f; 本文将以3种方式&a…...

代码随想录之哈希表(力扣题号)

242. 有效的字母异位词 直接用数组模拟哈希表 只有小写字母&#xff0c;开26的数组就可以了 class Solution {public boolean isAnagram(String s, String t) {//24-28int[] hash new int[26];Arrays.fill(hash,0);for(int i0;i<s.length();i){hash[s.charAt(i)-a];}for(i…...

如何在知行之桥EDI系统中定时自动更换交易伙伴AS2证书?

为了保证客户与交易伙伴之间数据传输的安全性&#xff0c;AS2传输协议中&#xff0c;通常会通过一对数字证书对传输数据进行签名和加密。但是证书是有有效期的&#xff0c;在证书到期之前&#xff0c;需要贸易双方及时更换新的证书。 在更新证书时&#xff0c;由于客户通常是和…...

辽宁千圣文化:抖音店铺怎么做二次优化?

抖音商品卡订单是指永华在抖音、抖音极速版&#xff0c;通过直播的方式出现短视频页面商品卡之后&#xff0c;直接成交商品详情页直接成交后的订单&#xff0c;那么跟着辽宁千圣文化小编来一起看看吧&#xff01;一.与政策有关1.什么是「商品卡订单」&#xff1f;用户通过抖音、…...

检测js代码中可能导致内存泄漏的工具

JavaScript 中闭包等问题可能导致内存泄漏&#xff0c;因为闭包中引用的变量不会被垃圾回收器自动释放。以下是一些可以用来检测 JavaScript 代码中可能导致内存泄漏的工具&#xff1a; 1、Chrome 开发者工具 Chrome 开发者工具中有一个 Heap Profiler 工具&#xff0c;可以帮…...

linux和centos读写日期到文件并对日期进行比较

#!/bin/bash adate -d "${a}" %s #必须用数字 %s是取时间戳秒数 ddate -d "${c}" %s echo m$(($a - $d)) #必须2个小括号 a1date %s echo $a1 sleep 2 b1date %s echo $(($a1 - $b1)) #必须2个小括号 if [ $a1 -eq $b1 ];then #必须有空格 echo "…...

Espressif-IDE v2.8.0 新增功能及开发方向

在乐鑫最近发布的 Espressif-IDE 2.8.0 版本中&#xff0c;我们推出了分区表编辑器和 NVS 分区编辑器功能&#xff0c;优化现有调试器的配置功能并修复多项 Bug &#xff0c;进一步为用户提升了插件质量以及稳定性。 用户可以点此获取最新版本。 • 若您的设备为 Windows 系统…...

C++学习笔记之基础

目录前言一.零碎知识点二.C核心2.1.内存分区2.2.引用2.3.函数2.4.类和对象2.4.1.对象的初始化和清理2.4.2.构造函数和析构函数2.4.3.构造函数的分类和调用2.4.4.拷贝构造函数的调用时机2.4.5.深拷贝与浅拷贝2.4.6.初始化列表2.4.7.类对象作为类的成员2.4.8.静态成员2.4.9.C对象…...

博弈论小课堂:零和博弈(找到双方的平衡点)

文章目录 引言I 零和博弈1.1 零和博弈的策略1.2 博弈类型1.3 找到平衡点(equilibrium)II 多人博弈的投篮问题2.1 比赛规则2.2 零和博弈的计算引言 从概率论延伸出来的课题——博弈论,博弈论中最典型的两大类博弈,是“零和博弈”与“非零和博弈”。博弈论所研究的最优化问题…...

Redisson 分布式锁(基于v1.3.1)

Redisson 分布式锁 v1.0.0版本问题 v1.0.0版本的实现在持有锁的JVM或者持有锁的线程挂掉没有释放锁时&#xff0c;该锁不会被释放并且会一直占用&#xff0c;这个时候就使用DEL命令手动删除。 问题解决 v1.3.1版本通过key的ttl解决了这个问题&#xff0c;关键加锁逻辑改为了…...

网页设计师培训班大连/seo专业论坛

这里还有第二种数据恢复方法&#xff0c;比第一种更好使&#xff0c;本人亲试 1、打开360安全卫士&#xff0c; 切换到“功能大全”选项卡&#xff0c;然后搜索文件恢复工具&#xff1b; 2、点击文件恢复工具&#xff0c;选择需要恢复的磁盘&#xff0c;比如D盘&#xff0c;…...

网站建设备案优化之看/重庆快速排名优化

安装 npm install mockjs 在src文件夹下新建文件util 新建mock.js文件引入mockjs模块 //src/mock.jsimport Mock from mockjs; Mock.mock(http://g.cn, {name: name,age|1-100: 100,color: color}); export default Mock main.js引入新建的mock.js 最后就可以在vue中使用了 thi…...

做外贸都做哪些网站好免费/web网页制作成品

二维码是用某种特定的几何图形按一定规律在平面&#xff08;二维方向上&#xff09;分布的黑白相间的图形记录数据符号信息。这篇文章收集了33款创意的二维码名片设计作品&#xff0c;一起欣赏。 KOODOZ Letterpress Business Cards with QR Code STRUMPETS CRUMPETS FORMGARTE…...

大公司网站开发/今日世界杯比分预测最新

题目大意&#xff1a; 给定一个三维空间&#xff0c;有些点能走有些点不能走&#xff0c;每次只能上下&#xff0c;左右&#xff0c;前后六个方向走&#xff0c;给定起始坐标和终点坐标&#xff0c;求从起点到终点最短的路径。 注意&#xff1a; 图是按z&#xff0c;y&#xff…...

江苏省建设工程网站/杭州seo公司服务

horseluke 2013/09/13 15:060x00 背景纵观账号互通发展史&#xff0c;可以发现OAuth比起其它协议&#xff08;如OpenID&#xff09;更流行的原因是&#xff0c;业务双方不仅要求账号本身的认证互通&#xff08;authentication&#xff1b;可理解为“我在双方的地盘姓甚名谁”&…...

连云港网站搜索优化/运营商大数据精准营销

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 2020年R1快开门式压力容器操作新版试题及R1快开门式压力容器操作找答案&#xff0c;包含R1快开门式压力容器操作新版试题答案和解析及R1快开门式压力容器操作找答案练习。由安全生产模拟考试一点通公众号结合国家R1快…...