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

一、前景回顾

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

在这里插入图片描述

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

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";// 目标:认识pointesconst 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; // 设置点的大小是否随着距离的增加而减小 相机深度而衰减 默认为trueconst 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";// 目标:认识pointesconst 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.hqwc.cn/news/4905.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

沉浸式三维虚拟展厅交互体验科技感十足

随着科技的不断发展进步,展厅的表现形式也变得多样化,紧跟时代发展步伐,迭代创新。 3D虚拟展厅具有四大优势 一、降低成本,提高效率 3D“VR线上展厅”将艺术优势资源转到线上搭建的艺术线上展平台,相对传统艺术展来说有…

基于redis的bitmap实现签到功能(后端)

项目环境 MacOS springboot: 2.7.12 JDK 11 maven 3.8.6 redis 7.0.11 StringRedisTemplate 的key和value默认都是String类型 可以避免不用写配置类,定义key和value的序列化。 实现逻辑: 获取用户登录信息 根据日期获取当天是多少号 构建…

Cetos7.x连接不上网络解决办法

Cetos7.x连接不上网络解决办法 Cetos7.x连接不上网络解决办法 在VM中设置网络连接为桥接,修改后仍无法连接网络 ##配置centos7中ens33,将默认的no修改为yes 启动CentOS系统,并打开一个连接终端会话,使用root登录;进…

Vue 时间格式转换

文章目录 将秒转换成简单时间格式方式一 表格渲染方式二 js转换 将时间转换为字符串方式一 年、月、日、时、分、秒、星期等信息方式二 返回多久之前的时间 将秒转换成简单时间格式 方式一 表格渲染 element-ui 表格为例&#xff0c;duration 单位为秒 <el-table-column …

Css设置border从中间向两边的颜色渐进效果

Css设置border从中间向两边的颜色渐进效果 .list-item {border-bottom: 1rpx solid;border-image: linear-gradient(to right, rgba(0,0,0,.1) 0%, rgba(81, 110, 197, 0.76) 50%, rgba(0,0,0,.1) 100%) 1;}效果如图&#xff1a;

5.MySQL索引事务

文章目录 &#x1f43e;1. 索引&#x1f43e;&#x1f490;1.1 概念&#x1f490;&#x1f338;1.2 作用与缺点&#x1f338;&#x1f337;1.2.1作用&#x1f337;&#x1f340;1.2.2缺点&#x1f340; &#x1f339;1.3 使用场景&#x1f339;&#x1f33b;1.4 使用&#x1f3…

新项目即将启动!小灰做个市场调研

熟悉小灰的小伙伴们都知道&#xff0c;在2019年初&#xff0c;做了整整10年程序员的小灰离开职场&#xff0c;成为了一名自由职业者。 2021年末&#xff0c;小灰注册了自己的公司&#xff0c;名为北京小灰大黄科技有限公司。 公司虽然注册了&#xff0c;但是整个公司只有小灰一…

Java注解

一、什么是注解 注解是放在Java源码的类、字段、方法、参数前的一种特殊的“注释”&#xff0c;和普通注释的区别是&#xff0c;普通注释被编译器直接忽略&#xff0c;注解则可以被编译器打包进入Class文件。如下图所示就是lombok中的一些注解。 注解的作用&#xff1a; 从JVM角…

ResizeKit.NET 自动更改所有控件和字体大小 -Crack Version

ResizeKit2.NET ---Added support for Microsoft .NET 7.0. 使您的应用程序大小和分辨率独立。 ResizeKit.NET 自动更改所有控件和字体的大小&#xff0c;以便它们可以显示在任何大小的表单上。提供完全控制来自定义调整大小过程。即使用户在运行应用程序时切换表单的大小&…

计算物理专题:傅里叶变换与快速傅里叶变换

计算物理专题&#xff1a;傅里叶变换与快速傅里叶变换 傅里叶变换提供一个全新的角度去观察和描述问题&#xff0c;如在量子力学中&#xff0c;动量与坐标表象之间的变换就是傅里叶变换。傅里叶变换同意可以用在数据处理等领域。1965年&#xff0c;Cooley 和 Tukey 提出了快速傅…

WPF中的Behavior及Behavior在MVVM模式下的应用

WPF中的Behavior及Behavior在MVVM模式下的应用 在WPF中&#xff0c;Behaviors&#xff08;行为&#xff09;是一种可重用的组件&#xff0c;可以附加到任何UI元素上&#xff0c;以添加特定的交互行为或功能。Behaviors可以通过附加属性或附加行为的方式来实现。 Behavior并不…

大厂月入3w+,失业焦虑折磨着我

大家好&#xff0c;这里是程序员晚枫&#xff0c;小红书也叫这个名字。 周末和一位老朋友聚会&#xff0c;聊了聊一个很现实的收入问题&#xff0c;巧合的是&#xff1a;他的焦虑&#xff0c;竟然和月薪5k的我一模一样。 今天给大家分享一下。 1、外人看来&#xff0c;让人羡…