Threejs之精灵模型Sprite

参考资料

  • 精灵模型Sprite
  • Sprite模拟下雨、下雪

知识点

注:基于Three.jsv0.155.0

  • 精灵模型Sprite
  • 精灵模型标注场景(贴图)
  • Sprite模拟下雨、下雪

精灵模型Sprite

Three.js的精灵模型Sprite和Threejs的网格模型Mesh一样都是模型对象,父类都是Object3D,关于精灵模型对象Sprite的方法和属性除了可以查看文档Sprite,也可以查看父类Object3D

Sprite与矩形平面Mesh的区别在于,当你旋转三维场景的时候,如果通过相机控件OrbitControls旋转测试,你可以发现Sprite矩形平面会始终平行于Canvas画布或者说屏幕,而矩形平面Mesh的姿态角度会跟着旋转,不一定平行于canvas画布。

代码实现

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Three.js</title>
</head><body></body><!-- 具体路径配置,你根据自己文件目录设置,我的是课件中源码形式 --><script type="importmap">{"imports": {"three": "./js/three.module.js","three/addons/": "../three.js/examples/jsm/"}}</script><script type="module">import * as THREE from 'three';import { OrbitControls } from 'three/addons/controls/OrbitControls.js';const width = 800const height = 500// 场景const scene = new THREE.Scene();const texture = new THREE.TextureLoader().load("./img/6.JPG");// 创建精灵材质对象SpriteMaterialconst spriteMaterial = new THREE.SpriteMaterial({// color:0x00ffff,//设置颜色rotation:Math.PI/4,//旋转精灵对象45度,弧度值map: texture, //设置精灵纹理贴图transparent:true,//SpriteMaterial默认是true});const geometry = new THREE.BoxGeometry(25, 100, 50);geometry.translate(0, 50, 0);// 材质const material = new THREE.MeshBasicMaterial({color: 0x00ff00,transparent: true,opacity: 0.5});// mesh顶部中心添加标注,顶部中心坐标是(0,100,0)const mesh = new THREE.Mesh(geometry, material);scene.add(mesh);// 创建精灵模型对象,不需要几何体geometry参数const sprite = new THREE.Sprite(spriteMaterial);// sprite.scale.set(100, 100, 1); //只需要设置x、y两个分量就可以sprite.scale.set(10, 10, 1);// sprite.position.set(0,50,0);sprite.position.set(0, 100 + 10/2, 0);//设置位置,要考虑sprite尺寸影响scene.add(sprite);console.log(sprite);// 环境光const ambientLight = new THREE.AmbientLight( 0xffffff, 0.2);scene.add( ambientLight );// 坐标系const axes = new THREE.AxesHelper(200);scene.add(axes);const group = new THREE.Group();for (let i = 0; i < 16000; i++) {// 精灵模型共享材质const sprite = new THREE.Sprite(spriteMaterial);group.add(sprite);sprite.scale.set(1, 1, 1);// 设置精灵模型位置,在长方体空间上上随机分布const x = 1000 * (Math.random() - 0.5);const y = 600 * Math.random();const z = 1000 * (Math.random() - 0.5);sprite.position.set(x, y, z)}scene.add(group);const camera = new THREE.PerspectiveCamera(75, width/height, 0.1, 1000);camera.position.set(200, 200, 200);camera.lookAt(scene.position);// 渲染器const renderer = new THREE.WebGLRenderer();renderer.setSize(width, height);renderer.render(scene, camera);document.body.appendChild(renderer.domElement);const clock = new THREE.Clock();function loop() {// loop()两次执行时间间隔const t = clock.getDelta();group.children.forEach(sprite => {// 雨滴的y坐标每次减t*60sprite.position.y -= t*60;if (sprite.position.y < 0) {sprite.position.y = 600;}});requestAnimationFrame(loop);renderer.render(scene, camera);}loop();// 控制器const controls = new OrbitControls(camera, renderer.domElement);controls.addEventListener('change', () => {// 因为动画渲染了,所以这里可以省略// renderer.render(scene, camera);});</script>
</html>

在这里插入图片描述

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

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

相关文章

【设计者模式】单例模式

文章目录 1、模式定义2、代码实现&#xff08;1&#xff09;双重判空加锁方式两次判空的作用&#xff1f;volatile 关键字的作用&#xff1f;构造函数私有&#xff1f; &#xff08;2&#xff09;静态内部类【推荐】&#xff08;3&#xff09;Kotlin中的单例模式lateinit 和 by…

Matlab 最小二乘插值(曲线拟合)

文章目录 一、简介二、实现代码三、实现效果参考资料一、简介 在多项式插值时,当数据点个数较多时,插值会导致多项式曲线阶数过高,带来不稳定因素。因此我们可以通过固定幂基函数的最高次数 m(m < n),来对我们要拟合的曲线进行降阶。之前的函数形式就可以变为: 二、实现…

spring Boot 报错RedisConnectionFailureException

错误描述&#xff1a; 错误重点&#xff1a;&#xff08;图片中蓝色区域&#xff09; Unable to connect to Redis; 无法连接到Redis Unable to connect to 127.0.0.1 无法连接到本地服务器 所以&#xff0c;错误是本地服务器没有连接上Redis所引起的 错误解析…

vue3中的父传子,子传父

在Vue 3中&#xff0c;父组件向子组件传递数据和子组件向父组件通信的方式与Vue 2非常相似&#xff0c;但Vue 3提供了Composition API和更多的响应式API&#xff0c;为组件间的通信提供了更多的可能性。下面是父传子和子传父的基本方法&#xff1a; ### 父组件传递数据给子组件…

【InternLM 实战营笔记】使用SDK接口上传模型到OpenXLab

概述 浦源内容平台-模型中心的Python SDK旨在为开发人员提供编程方式来管理和操作模型中心平台的功能&#xff0c;以便他们可以轻松地与模型中心进行交互和模型管理。通过Python SDK提供的推理接口&#xff0c;开发人员能够高效地调用不同的模型&#xff0c;实现模型应用的开发…

递归实现排列型枚举(c++题解)

题目描述 把 1~n 这 n(n<10) 个整数排成一行后随机打乱顺序&#xff0c;输出所有可能的次序。 输入格式 一个整数n。 输出格式 按照从小到大的顺序输出所有方案&#xff0c;每行1个。 首先&#xff0c;同一行相邻两个数用一个空格隔开。其次&#xff0c;对于两个不同的…

Linux——进程控制(二)进程等待

目录 前言 一、进程等待 二、如何进行进程等待 1.wait 2.waitpid 2.1第二个参数 2.2第三个参数 3. 等待多个进程 三、为什么不用全局变量获取子进程的退出信息 前言 前面我们花了大量的时间去学习进程的退出&#xff0c;退出并不难&#xff0c;但更深入的学习能为本…

048 异常

什么是异常 异常体系结构 异常的继承关系 Error Exception 异常处理机制 try&#xff1a;用{}将可能产生异常的代码包裹catch&#xff1a;与try搭配使用&#xff0c;捕获try包裹代码中抛出的异常并进行后续动作finally&#xff1a;跟在try后&#xff0c;在try和catch之后执行…

web3时事粥报

比特币正成为更具有吸引力的通胀对冲工具 在通胀的宏观经济浪潮中&#xff0c;比特币正逐渐崭露头角&#xff0c;成为那些渴望多元化投资组合的投资者眼中的璀璨明星。Kooner 预测&#xff0c;2024年&#xff0c;各种宏观经济挑战可能进一步提升比特币、黄金和白银等资产的避险…

3月3日做题总结(C/C++真题)

第一题 参加位运算的数据其类型不能是&#xff08;&#xff09;。 A---int B---char C---float D---long int 正确答案&#xff1a;C 解析&#xff1a;无论是float&#xff0c;还是double&#xff0c;在内存中的存储分为三部分&#xff1a;符号位、指数位、尾数位&#…

Google Dremel和parquet的复杂嵌套数据结构表征方法解析

转载请注明出处。作者&#xff1a;archimekai 核心参考文献&#xff1a; Dremel: Interactive Analysis of Web-Scale Datasets 文章目录 引言复杂嵌套数据结构的无损表征问题Dremel论文中提出的表征方法parquet备注 引言 Dremel是Google的交互式分析系统。Google大量采用prot…

全量知识系统问题及SmartChat给出的答复 之17 知识系统中的两个特权类(超类和欠类) :脚本和场景

Q.45 知识系统中的两个特权类 &#xff1a;脚本和场景 知识系统中的两个特权类&#xff08;也是集合论中两个特权集合&#xff09;&#xff1a;脚本script和场景scene 。 一个$Demonstrate类型的脚本script&#xff1a; 表示“值val”&#xff08; 形式上是应用程序的实用工…

如何学习openfoam

学习OpenFOAM的详细步骤、流程、学习网站、练习案例以及B站学习资源推荐如下&#xff1a; 一、详细步骤和流程 安装OpenFOAM&#xff1a;首先&#xff0c;你需要在你的计算机上安装OpenFOAM。你可以从OpenFOAM的官方网站下载适合你的操作系统的安装包&#xff0c;然后按照官方提…

搭建服务器及跨域处理

使用内置的模块搭建服务器 自己电脑: 域名:localhost ip:127.0.0.1 http模块搭建服务器 const http = require(http)// 创建一个http对应的服务器,每次改完服务器的代码后都需要重新启动下服务器 /*方式一: const server = http.createServer((request,response)=>{…

对简单工厂模式、工厂方法模式的思考

目录 1 背景1.1 题目描述1.2 输入描述1.3 输出描述1.4 输入示例1.5 输出示例 2 简单工厂模式3 工厂方法模式4 思考4.1 改进工厂方法模式 1 背景 题目源自&#xff1a;【设计模式专题之工厂方法模式】2.积木工厂 1.1 题目描述 小明家有两个工厂&#xff0c;一个用于生产圆形积木…

铁路关基保护新规发布!铁路软件供应链安全洞察与治理思路

近日&#xff0c;国家铁路局发布《铁路关键信息基础设施安全保护管理办法》&#xff0c;《办法》第十四条提到&#xff1a;“运营者应当加强铁路关键信息基础设施供应链安全保护&#xff0c;优先采购安全可信的网络产品和服务。运营者采购网络产品和服务&#xff0c;应当预判该…

Intel FPGA IP之LVDS SerDes IP学习

FPGA 视频数据输入输出直通工程&#xff1a; 屏&#xff1a;13.2吋8bit色深&#xff0c;屏幕分辨率为1440*192060&#xff0c;具有两个Port&#xff0c;每个Port有4个差分数据对与1个差分时钟对&#xff0c;差分对均支持LVDS协议芯片&#xff1a;Cyclone V系列FPGA目的&#x…

标签转格式问题之——xml_2_txt.py

import xml.etree.ElementTree as ET#xml 是python自带的package import osclasses[walnut]#写自己的分类名 pre_dirF:/2023walnut/labels#xml文件所在文件夹 target_dirF:/2023walnut/yolo#想要存储txt文件的文件夹 pathos.listdir(pre_dir)for path1 in path: # path1rC:\Use…

[变压器故障诊断分类及预测】基于Elman神经网络

课题名称&#xff1a;基于Elman神经网络的变压器故障诊断分类及预测 版本日期&#xff1a;2024-02-10 运行方式&#xff1a;直接运行Elman0507.m文件 代码获取方式&#xff1a;私信博主或QQ&#xff1a;491052175 模型描述&#xff1a; 对变压器油中溶解气体进行分析是变压…

Noise Conditional Score Networks(NCSN)学习

参考&#xff1a; [1] https://zhuanlan.zhihu.com/p/597490389 [2] https://www.zhangzhenhu.com/aigc/Score-Based_Generative_Models.html TOC 1 基于分数的生成模型1.1 简介和动机1.2 Score Matching及其改进1.2.1 Score Matching1.2.2 Sliced score matching&#xff08;不…