three.js点材质(PointsMaterial)常用属性设置

news2024/11/18 6:14:21

一、前景回顾

上一章节简单介绍了下怎么使用点材质和点对象创建物体点对象和点材质介绍

在这里插入图片描述

点材质和点对象基本运用示例代码:

import * as THREE from "three";
// 导入轨道控制器
import { OrbitControls } from "three/examples/jsm/controls/OrbitControls";
// 导入动画库
import gsap from "gsap";
// 导入dat.gui
import * as dat from "dat.gui";

// 目标:认识pointes

const gui = new dat.GUI();
// 1、创建场景
const scene = new THREE.Scene();

// 2、创建相机
const camera = new THREE.PerspectiveCamera(
  75,
  window.innerWidth / window.innerHeight,
  0.1,
  1000
);

// 设置相机位置
camera.position.set(0, 0, 10);
scene.add(camera);

// 创建球几何体
const sphereGeometry = new THREE.SphereBufferGeometry(3, 30, 30);

// 设置点材质
const pointsMaterial = new THREE.PointsMaterial();
pointsMaterial.size = 0.1; // 设置点的尺寸大小,默认为1
// 相机深度而衰减
pointsMaterial.sizeAttenuation = true;

const points = new THREE.Points(sphereGeometry, pointsMaterial); // 将几何体和材质传入点对象

scene.add(points);

// 初始化渲染器
const renderer = new THREE.WebGLRenderer();
// 设置渲染的尺寸大小
renderer.setSize(window.innerWidth, window.innerHeight);
// 开启场景中的阴影贴图
renderer.shadowMap.enabled = true;
renderer.physicallyCorrectLights = true;

// 将webgl渲染的canvas内容添加到body
document.body.appendChild(renderer.domElement);

// 创建轨道控制器
const controls = new OrbitControls(camera, renderer.domElement);
// 设置控制器阻尼,让控制器更有真实效果,必须在动画循环里调用.update()。
controls.enableDamping = true;

function render() {
  controls.update();
  renderer.render(scene, camera);
  //   渲染下一帧的时候就会调用render函数
  requestAnimationFrame(render);
}

render();

// 监听画面变化,更新渲染画面
window.addEventListener("resize", () => {
  //   console.log("画面变化了");
  // 更新摄像头
  camera.aspect = window.innerWidth / window.innerHeight;
  //   更新摄像机的投影矩阵
  camera.updateProjectionMatrix();

  //   更新渲染器
  renderer.setSize(window.innerWidth, window.innerHeight);
  //   设置渲染器的像素比
  renderer.setPixelRatio(window.devicePixelRatio);
});


这一章节介绍一下点材质PointsMaterial上的常用属性。

二、点材质常用属性设置

PointsMaterial常用属性有:

  • color: 点的颜色,默认为白色。
  • size: 点的大小,可以使用PointScaleAttenuation属性同时调整大小。
  • sizeAttenuation: 是否使用点大小衰减(根据相机远近自动调整点的大小),默认为true。
  • map: 对点纹理进行设置,可以使用贴图来代替单色点,如星空。

1. 设置颜色

// 创建点材质
const pointsMaterial = new THREE.PointsMaterial();
pointsMaterial.color.set(0x22a1ff); // 设置点的颜色 默认是白色

在这里插入图片描述

2. 设置点的大小

// 创建点材质
const pointsMaterial = new THREE.PointsMaterial();
pointsMaterial.size = 0.3; // 设置点的大小 默认是1
pointsMaterial.color.set(0x22a1ff); // 设置点的颜色 默认是白色

在这里插入图片描述

3. 设置点的大小是否因相机深度而衰减

// 创建点材质
const pointsMaterial = new THREE.PointsMaterial();
pointsMaterial.size = 0.1; // 设置点的大小 默认是1
pointsMaterial.color.set(0x22a1ff); // 设置点的颜色 默认是白色
pointsMaterial.sizeAttenuation = false; // 设置点的大小是否随着距离的增加而减小 相机深度而衰减 默认为true

在这里插入图片描述

4. 设置纹理贴图

咱需要先准备一个贴图,然后通过纹理加载器加载
在这里插入图片描述

// 创建点材质
const pointsMaterial = new THREE.PointsMaterial();
pointsMaterial.size = 0.1; // 设置点的大小 默认是1
pointsMaterial.color.set(0x22a1ff); // 设置点的颜色 默认是白色
pointsMaterial.sizeAttenuation = false; // 设置点的大小是否随着距离的增加而减小 相机深度而衰减 默认为true

const textureLoader = new THREE.TextureLoader(); // 创建纹理加载器
const texture = textureLoader.load("./textures/particles/4.png"); // 设置点材质的纹理
pointsMaterial.map = texture; // 设置点材质的纹理

在这里插入图片描述
好啦,以上就是点材质的常用属性介绍,
完整代码如下:

import * as THREE from "three";
// 导入轨道控制器
import { OrbitControls } from "three/examples/jsm/controls/OrbitControls";
// 导入动画库
import gsap from "gsap";
// 导入dat.gui
import * as dat from "dat.gui";

// 目标:认识pointes

const gui = new dat.GUI();
// 1、创建场景
const scene = new THREE.Scene();

// 2、创建相机
const camera = new THREE.PerspectiveCamera(
  75,
  window.innerWidth / window.innerHeight,
  0.1,
  1000
);

// 设置相机位置
camera.position.set(0, 0, 10);
scene.add(camera);

// 载入纹理
const textureLoader = new THREE.TextureLoader(); // 创建纹理加载器
const texture = textureLoader.load("./textures/particles/4.png"); // 设置点材质的纹理

// 创建球几何体
const sphereGeometry = new THREE.SphereBufferGeometry(3, 30, 30); // 1、半径 2、水平分段数 3、垂直分段数

// 创建点材质
const pointsMaterial = new THREE.PointsMaterial();
// 设置点材质
pointsMaterial.size = 0.2; // 设置点的大小
// pointsMaterial.color.set(0x22a1ff); // 设置点的颜色
pointsMaterial.sizeAttenuation = true; // 设置点的大小是否随着距离的增加而减小 相机深度而衰减
// 设置点材质纹理
pointsMaterial.map = texture; // 设置点材质的纹理

const points = new THREE.Points(sphereGeometry, pointsMaterial); // 将几何体和材质传入点对象
scene.add(points); // 将点对象添加到场景中

// 初始化渲染器
const renderer = new THREE.WebGLRenderer();
// 设置渲染的尺寸大小
renderer.setSize(window.innerWidth, window.innerHeight);
// 开启场景中的阴影贴图
renderer.shadowMap.enabled = true;
renderer.physicallyCorrectLights = true; // 开启物理渲染

// 将webgl渲染的canvas内容添加到body
document.body.appendChild(renderer.domElement);

// 创建轨道控制器
const controls = new OrbitControls(camera, renderer.domElement);
// 设置控制器阻尼,让控制器更有真实效果,必须在动画循环里调用.update()。
controls.enableDamping = true;


function render() { // 渲染函数
  controls.update(); // 更新控制器
  renderer.render(scene, camera); // 渲染器渲染场景和相机
  //   渲染下一帧的时候就会调用render函数
  requestAnimationFrame(render);
}

render();

// 监听画面变化,更新渲染画面
window.addEventListener("resize", () => {
  //   console.log("画面变化了");
  // 更新摄像头
  camera.aspect = window.innerWidth / window.innerHeight;
  //   更新摄像机的投影矩阵
  camera.updateProjectionMatrix();

  //   更新渲染器
  renderer.setSize(window.innerWidth, window.innerHeight);
  //   设置渲染器的像素比
  renderer.setPixelRatio(window.devicePixelRatio);
});

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

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

相关文章

A核与M核异构通信过程解析

现在越来越多的产品具有M core和A core的异构架构,既能达到M核的实时要求,又能满足A核的生态和算力。比如NXP的i.MX8系列、瑞萨的RZ/G2L系列以及TI的AM62x系列等等。虽然这些处理器的品牌及性能有所不同,但多核通信原理基本一致,都…

Linux操作系统配置代理服务器

PS:本文只是针对Linux操作系统对于代理服务器的配置操作,不涉及广告 1.代理的概念 代理服务器英文全称是Proxy Server,其功能就是代理网络用户去取得网络信息。形象的说:它是网络信息的中转站。在一般情况下,我们使用网络浏览器直…

华为智能高校出口安全解决方案(1)

华为智能高校出口安全解决方案(1) 视频链接方案背景需求分析高校园区网概述高校园区网全景高校出口场景介绍高校出口整体需求分析业务安全需求攻击防御需求运维审计需求 方案规划华为智能高校出口安全解决方案架构华为智能高校出口安全解决方案功能划分业…

(二)Qt QGraphicsScene模块实现圆点绘制在所有窗体的最前方,实现圆点的“彩色拖尾”效果以及“选中方框”效果

系列文章目录 通过Qt实现手势识别控制软件操作相关系列技术方案 (一)Qt 将某控件、图案绘制在最前面的方法,通过QGraphicsScene模块实现 (二)Qt QGraphicsScene模块实现圆点绘制在所有窗体的最前方,实现圆…

强化学习从基础到进阶-案例与实践[5.1]:Policy Gradient-Cart pole游戏展示

强化学习从基础到进阶-案例与实践[5.1]:Policy Gradient-Cart pole游戏展示 强化学习(Reinforcement learning,简称RL)是机器学习中的一个领域,区别与监督学习和无监督学习,强调如何基于环境而行动&#x…

关于u(x,t)=f(x)*g(t)形式证明的思考

突然想起来,二维高斯函数是可以拆分成两个一维高斯函数相乘的: 原来在学概率论的时候,证明过,这只能说高斯函数可以,这是一个思路。 一维波动函数应该也是这个套路。 那么还有没有其他函数可以如此,有如此…

javascript和css实现瀑布流排列

Grid 布局 实现瀑布流 html <div class"gridDiv"><divv-for"(item,index) in 20":style"{grid-row: auto / span ${heightArray[index]}}"><div class"gridItemConten"><div class"gridText">{{ite…

VS2022编译运行VS2015的项目

最近新装了VisualStudio2022&#xff0c;有一些VS2015老的项目需要运行&#xff0c;但不想再安装VS2015&#xff0c;就想能否直接在VS2022编译运行&#xff0c;研究一下发现可行&#xff0c;记录一下。 1. 直接升级VS2015项目到2022使用windows sdk 10.0 发现老代码里的一些语…

#10044 「一本通 2.2 例 2」Power Strings(KMP)(内附封面)

题目描述 原题来自&#xff1a;POJ 2406 给定若干个长度 \le 10^6 的字符串&#xff0c;询问每个字符串最多是由多少个相同的子字符串重复连接而成的。如&#xff1a;ababab 则最多有 3 个 ab 连接而成。 输入格式 输入若干行&#xff0c;每行有一个字符串。特别的&#xf…

第一章:R-CNN网络详解(丰富特征层次用于准确的目标检测和语义分割技术报告(v5))

(目标检测篇&#xff09;系列文章目录 第一章:R-CNN网络详解 第二章:Fast R-CNN网络详解 第三章:Faster R-CNN网络详解 第四章:YOLO v1网络详解 第五章:YOLO v2网络详解 第六章:YOLO v3网络详解 文章目录 系列文章目录技术干货集锦前言一、摘要二、正文分析 1.引入库2.读入…

迅为RK3568/RK3588开发板视频教程 | RKNPU2 从入门到实践一套搞定!

迅为电子嵌入式视频教程更新了&#xff01;——「AI深度学习推理加速器--RKNPU2 从入门到实践」&#xff08;基于RK3588和RK3568&#xff09; 课程内容分为三个阶段&#xff1a;认识RKNPU、RKNPU开发学习以及项目实战。 首先&#xff0c;我们将从认识RKNPU阶段开始&#xff0…

Redis实战——短信登录(一)

项目搭建 前期准备 导入SQL CREATE TABLE tb_user (id bigint unsigned NOT NULL AUTO_INCREMENT COMMENT 主键,phone varchar(11) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT 手机号码,password varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4…

【Redis】Redis主从复制哨兵模式集群

文章目录 一、Redis 持久化1. 主从复制2. 哨兵模式3. 集群 二、 Redis 主从复制1. 概述2. 主从复制的作用3. 主从复制流程4. 搭建 Redis 主从复制4.1 环境准备4.2 安装 Redis4.3 修改 Master 节点配置文件4.4 修改Slave节点配置文件&#xff08;Slave1和Slave2配置相同&#xf…

关于Docker中 docker build 时no such file or directory报错

ERROR: failed to solve: failed to read dockerfile: open /var/lib/docker/tmp/buildkit-mount545066663/Dockerfile: no such file or directory 主要原因是命令行没有在文件夹下执行docker build&#xff0c;cd到指定文件夹下执行即可

windows-x86使用qemu打开x86和arm虚拟机

1、下载qemu软件 下载固件&#xff08;UEFI固件镜像文件&#xff0c;BIOS的替代方案&#xff09;&#xff09; 2、配置qemu环境变量 使用cmd执行qemu命令&#xff0c;配置好环境变量比较方便 3、准备镜像 准备好一个x86的镜像或者arm的镜像&#xff0c;格式可以为qcow2 4、打…

STM32 时钟 寄存器 异常和中断

时钟: 51单片机中有时钟和时钟树的概念&#xff0c;外设只有GPIO、定时器、和一个串口&#xff0c;使用的都是11.0592MHZ的频率&#xff0c;除了定时器外&#xff0c;其他外设只要上电就可以使用。 stm32不同外设对应的时钟频率不同&#xff0c;故有时钟树的概念 PLL&#xf…

提升半导体制造效率,了解半导体CMS系统的关键作用

随着半导体制造业的不断发展&#xff0c;提高生产效率成为企业追求的核心目标。在这一背景下&#xff0c;CMS系统&#xff08;中央设备状态监控系统&#xff09;的关键作用愈发凸显。本文将深入探讨CMS系统在提升半导体制造效率方面的关键作用&#xff0c;帮助读者全面了解该系…

Android Studio Could not reserve enough space for 2097152KB object heap

Android Studio Could not reserve enough space for 2097152KB object heap android studio 编译的项目的时候&#xff0c;出现的内存不足问题&#xff0c;实际上android studio会有引导设置内存大小&#xff0c;可能都不太在意在哪个地方&#xff0c;设置完就完事了&#xff…

linux上搭建samba服务

Samba是在Linux和UNIX系统上实现SMB协议的一个免费软件&#xff0c;由服务器及客户端程序构成。SMB&#xff08;Server Messages Block&#xff0c;信息服务块&#xff09;是一种在局域网上共享文件和打印机的一种通信协议&#xff0c;它为局域网内的不同计算机之间提供文件及打…

【NOSQL数据库】Rdeis持久化

目录 一、Redis高可用1.2Redis高可用技术 二、Redis持久化2.1Redis提供的两种持久话方式 三、RDB持久化3.1触发条件3.1.1手动触发3.1.2自动触发3.1.3其他自动触发机制 3.2执行流程3.3启动时加载 四、AOF持久化4.1 开启AOF4.2执行流程4.2.1命令追加(append)4.2.2文件写入(write)…