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

2023-10-29

一、前景回顾

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

在这里插入图片描述

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

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);
});

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

three.js点材质(PointsMaterial)常用属性设置 的相关文章

随机推荐

  • GCTA 报错信息: XtWX is not invertible。

    报错信息 XtWX is not invertible 1 在输入以下命令时 报错 gcta64 mbfile geno chrs txt grm sparse sp grm joint covar fastGWA mlm binary p
  • OpenDDS自学

    前言 最近做毕设要做一个DDS系统和TISA系统的网关 完全没有基础 只好对着OpenDDS的Developers Guide和 分布式系统实时发布 订阅数据分发技术 这本书一点一点学 顺便吐槽这本书就是guide的翻译版 很多语句不通 遇
  • Springboot整合Shiro

    目录 1 springboot整合shiro 认证 登录 1 1 创建springboot项目 1 2 引依赖 1 3 修改application配置文件 1 4 创建实体类 1 5 创建dao层 1 6 创建service层 1 7 编写
  • MMDetection 系列之(自定义数据管道处理增强管道)

    数据管道设计 遵循典型约定 我们使用Dataset和DataLoader对多个worker进行数据加载 数据集返回与模型的forward方法的参数相对应的数据项字典 由于目标检测中的数据可能不相同大小 图像大小 gt box大小等 我们在M
  • Linux下 Redis集群搭建详解(主从+哨兵)

    文章目录 前言 文章重点 一 Redis 入门简介 二 Redis 安装部署 1 下载安装包 2 安装 3 部署 4 启动redis服务 5 关闭redis服务 三 Redis 集群整体架构 四 Redis 主从配置及数据同步 1 主机配置
  • Windows消息机制

    一 简介 Windows程序设计是一种事件驱动的程序设计模式 主要是基于消息的 一个消息从产生到被一个窗口响应 其中有5个步骤 系统中发生了某个事件 Windows把这个事件翻译为消息 然后把它放到消息队列中 应用程序从消息队列中接收到这个
  • T-Kernel 内核介绍

    本文译至 http www t engine org ja what is t kernel t kernel T 内核是一个实时操作系统 它是T Engine的心脏 T Kernel 通过和称为T Kerneel扩展的中间件的组合 能够配
  • python输出结果换行_python输出时如何换行

    在我们常用的print 方法进行输出时 通常输出结果是整行显示出来的 这时候我们需要考虑一下 我们输出的结果需不需要换行 不需要换行的方法也是so esay的 这里就不多赘述了 来说说如何做到输出换行 常用的转义符方式 n coding u
  • Flink java wordcount

    Flnk java wordcount 前言 项目的目录结构 pom文件 WindowWordCount java helloword txt文件 运行结果 注意 前言 各位好 欢迎浏览我的博客 后面将持续更新小编在flink上学习的心得体
  • 21年广东计算机考研分数线,21年考研国家线公布_中国研究生招生信息网官方

    21年考研国家线公布 中国研究生招生信息网官方由广东研究生考试网考试快讯栏目由提供 更多关于考研成绩查询时间 考研国家线 广东研究生考试快讯的内容 请关注广东研究生考试频道 广东人事考试网 2020年下半年全国大学英语四 六级考试成绩 和2
  • ROS1代码向ROS2移植

    ROS1代码向ROS2移植 前言 安装ros2 foxy 配置vscode ros2基本操作 创建工作空间 添加工作空间环境变量 创建ros2功能包 安装第三方功能包 节点相关指令 功能包内相关文件注解 cmakelist txt文件注解
  • 不需要第三方SDK就能实现Android图片的分享

    效果展示 原理分析 隐示意图 代码展示 MainActivity java package com wust shareappdemo import androidx appcompat app AppCompatActivity impo
  • 【C++】VS封装调用dll链接库

    在工程项目中 为了不暴露源代码和避免严重耦合 所以将代码封装成 dll二进制文件 以供项目调用 这几天 也是在看这些封装dll 并使用Java中的JNA调用c 的dll链接库中的函数 做个笔记 1 创建dll 新建项目 gt Win32项目
  • Spark SQL中的条件筛选以及case when表达

    baby 你就是我的唯一 Filter过滤 filter和where都可以进行过滤 可以根据指定的一个或多个条件或者SQL表达式来过滤掉DatFrame的行 在学习过滤之前 先来讲一个问题 在生产数据当中 可能会有很多的空数据 也就是Nul
  • 小波变换

    原文地址 1 小波变换 小波变换是一种信号的时间 尺度 时间 频率 分析方法 它具有多分辨分析的特点 而且在时频两域都具有表征信号局部特征的能力 是一种窗口大小固定不变但其形状可改变 时间窗和频率窗都可以改变的时频局部化分析方法 即在低频部
  • 题目十一:数据分类

    对一个数据a进行分类 分类方法是 此数据a 4个字节大小 的4个字节相加对一个给定值b取模 如果得到的结果小于一个给定的值c则数据a为有效类型 其类型为取模的值 如果得到的结果大于或者等于c则数据a为无效类型 比如一个数据a 0x01010
  • ansible安装k8s步骤及注意事项(在线安装)

    以下步骤都经本人实测 可以完美运行 官方参考网址 https github com gjmzj kubeasz Ansible了解 ansible是个什么东西呢 官方的title是 Ansibleis Simple IT Automatio
  • SpringBoot Maven多环境配置启动报错 APPLICATION FAILED TO START

    目录 Maven多环境配置 报错内容 分析问题 解决方法 filtering作用 修改结果 Maven多环境配置 profiles标签和properties同级
  • RabbitMQ重复消费

    造成重复消费的原因 MQ向消费者推送message 消费者向MQ返回ack 告知所推送的消息消费成功 但是由于网络波动等原因 可能造成消费者向MQ返回的ack丢失 MQ长时间 一分钟 收不到ack 于是会向消费者再次推送该条message
  • three.js点材质(PointsMaterial)常用属性设置

    一 前景回顾 上一章节简单介绍了下怎么使用点材质和点对象创建物体点对象和点材质介绍 点材质和点对象基本运用示例代码 import as THREE from three 导入轨道控制器 import OrbitControls from t