解决 Uncaught TypeError: SpriteCanvasMaterial is not a constructor.

news/2024/6/3 8:21:22/文章来源:https://blog.csdn.net/qq_52697994/article/details/130754676

文章目录

  • 前言
  • 一、替代语法
  • 总结


前言

上周买了本《Three.js开发指南》, 第三版, 里面的语法不太跟趟, 有点旧, 倒也不能全怪作者, three迭代的确很快.


一、替代语法

这几天没事做, 加上前面本来就接触过Three, 很快进展到了第六章.
在推进 利用Canvas贴图给精灵(Sprite)增加样式 这一节的时候提前查了下文档, 就已经发现SpriteCanvasMaterial这个语法不存在于文档中, 但Three的一部分语法…哪怕是现役的, 你在文档里都查不到所以我也不确定它是不是真的淘汰掉了.

但是连源码里都没有就说不过去了, 我直接开始找这个方法的替代品了.

基于书中的描述和源码, 可以看出这个语法基于DOM生成材质:

var getTexture = function (ctx) {// 此处绘制canvas, 无返回值;
};createSprites();
render();function createSprites() {var material = new THREE.SpriteCanvasMaterial({program: getTexture,color: 0xffffff});material.rotation = Math.PI;var range = 500;for (let i = 0; i < 1500; i++) {const sprite = new THREE.Sprite(material);sprite.position.set(Math.random() * range - range / 2, Math.random() * range - range / 2, Math.random() * range - range / 2);sprite.scale.set(0.1, 0.1, 0.1);scene.add(sprite);}
}

然后该材质会被用于生成精灵(Sprite), 既然都用到Canvas了, 那这个材质上也应该有Canvas的花纹, 不清楚是不是基于贴图去实现的花纹.

new THREE.Sprite(material);这个语法倒是没有被淘汰.

那就只需要一个能把DOM元素转换成带贴图的材质的流程了, 想起来之前有学习过Three的CanvasTexture(), 这个语法可以利用DOM元素生成Texture:

function createImageTexture() { // Canvas贴图直接用图片做const img = document.createElement('img');img.src = '../assets/textures/construction.jpg';const texture = new THREE.CanvasTexture(img);return texture;
}

现在基于DOM元素生成的贴图有了, 还需要一个材质去承载贴图, 这边直接选给精灵用的材质, 一看名字就是给精灵用的:

const material = new THREE.SpriteMaterial({ map: texture, color: 0xffffff });

实操上如果要给精灵加材质, 其他材质加在精灵身上精灵是不会出现的.
顺带把贴图贴上去.

这样得到的材质就和旧版SpriteCanvasMaterial语法生成的材质一样了, 此时把这份材质拿去生成精灵:

const range = 500;
for (let i = 0; i < 1500; i++) {const sprite = new THREE.Sprite(material);sprite.position.set(Math.random() * range - range / 2, Math.random() * range - range / 2, Math.random() * range - range / 2);sprite.scale.set(0.8, 0.8, 0.8);scene.add(sprite);
}

在这里插入图片描述

我没有用Canvas作为CanavsTexture的参数而是一个img, 实际上THREE.CanvasTexture()也可以基于HTMLImageElement元素创建纹理贴图, 在创建CanvasTexture对象时, 如果传入的参数是一个HTMLImageElement元素,
CanvasTexture对象会在内部创建一个新的Canvas元素, 并将HTMLImageElement元素的内容绘制到该元素上, 然后将该元素作为纹理贴图返回.


总结

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

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

相关文章

mysq的约束学习

第13章_约束 1. 约束(constraint)概述 1.1 为什么需要约束 数据完整性&#xff08;Data Integrity&#xff09;是指数据的精确性&#xff08;Accuracy&#xff09;和可靠性&#xff08;Reliability&#xff09;。它是防止数据库中存在不符合语义规定的数据和防止因错误信息的…

软件测试太卷了,三个练手的软件测试实战项目偷偷提升自己(附全套视频跟源码)

项目一&#xff1a;12306抢票项目 项目测试目的 学会Selenium定位web元素的方法 熟练浏览器调试工具使用 项目主体步骤 1&#xff09; 人工走一遍流程&#xff0c;对自动化的流程心中有数 2&#xff09; 按步骤拆分&#xff0c;然后对每一个小步骤编写自动化脚本 3&#xf…

单片机--USART

目录 【2】USART 【3】串口通信协议 【4】相关寄存器 串口控制寄存器 波特率寄存器 中断和状态寄存器 ​编辑 数据发送寄存器 数据接收寄存器 【5】 USART功能框图 【6】串口发送实验 实验要求 1.观察实物 2.分析原理图 3.STM32CubeMX配置 7、不定长接收 8、重定向 【1】…

【详解LinkedList与链表】

&#x1f320;作者&#xff1a;TheMythWS. &#x1f386;专栏&#xff1a;《集合与数据结构》 &#x1f387;座右铭&#xff1a;不走心的努力都是在敷衍自己&#xff0c;让自己所做的选择&#xff0c;熠熠发光。 目录 链表 概念 图解链表 链表的实现 1.创建链表 2.遍历链…

【Unity100个实用小技巧】保证原图片的情况下,动态扩展图片尺寸

☀️博客主页&#xff1a;CSDN博客主页&#x1f4a8;本文由 萌萌的小木屋 原创&#xff0c;首发于 CSDN&#x1f4a2;&#x1f525;学习专栏推荐&#xff1a;面试汇总❗️游戏框架专栏推荐&#xff1a;游戏实用框架专栏⛅️点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd;&#…

网络安全--红队资源大合集

红队攻击的生命周期&#xff0c;整个生命周期包括&#xff1a; 信息收集、攻击尝试获得权限、持久性控制、权限提升、网络信息收集、横向移动、数据分析&#xff08;在这个基础上再做持久化控制&#xff09;、在所有攻击结束之后清理并退出战场。 重点提醒&#xff1a;本项目…

牛客小白月赛65

题目链接 牛客小白月赛65 A-牛牛去购物&#xff08;枚举&#xff09;B-牛牛写情书&#xff08;字符串&#xff09;C-牛牛排队伍&#xff08;模拟&#xff09;D-牛牛取石子&#xff08;博弈&#xff09;E-牛牛的构造&#xff08;构造&#xff0c;思维&#xff09; A-牛牛去购物…

资产处置求变,京东拍卖如何做好“价值枢纽”?

近年来&#xff0c;随着资产处置市场规模快速成长以及互联网行业飞速发展&#xff0c;金融资产、司法拍卖、罚没物资等处置方式从最初单纯线下拍卖逐渐落地互联网&#xff0c;服务专业化程度也在不断提高。为更好适应市场变化&#xff0c;满足不断增长的市场需求&#xff0c;5月…

腾讯云轻量应用服务器卡死怎么连接?

腾讯云轻量云服务器卡死怎么解决&#xff1f;使用腾讯云自带的VNC登录连接轻量服务器&#xff0c;或使用腾讯云OrcaTerm一键免密登录轻量实例。如果是确定数据没问题&#xff0c;也可以使用控制台自带的重启实例。 腾讯云轻量应用服务器参考&#xff1a;https://curl.qcloud.co…

四块ACM区域赛金牌,我队友

是的&#xff0c;毕业12年以后&#xff0c;他来找我。     痛失网名了属于是&#xff0c;但是这不重要&#xff0c;​怎么说呢&#xff1f;有点激动&#xff0c;我得把这件事情记录下来&#xff0c;这是一位重量级的人物&#xff0c;也是大家眼中别人家的孩子。     他…

swp协议-1

Swp接口是UICC和CLF&#xff08;非接前端&#xff09;之间的面向比特流&#xff0c;点到点通信的协议。CLF是主设备&#xff08;master&#xff09;&#xff0c;UICC是从设备&#xff08;slave&#xff09;。图SWP数据传输虽然是单线协议&#xff0c;但是是全双工数字传输。 1 …

MPLS隧道——隧道迭代与MPLS高可靠性

目录 MPLS隧道迭代 什么情况下需要隧道迭代 解决方法 MPLS高可靠性 VPN FRR VPN GR MPLS隧道迭代 什么情况下需要隧道迭代 解决方法 两种解决方法 将IBGP邻居更改为Vpnv4的IBGP邻居&#xff08;为目标网段产生私网标签&#xff0c;然后此带标签的BGP路由直接进入标签隧道…

桥接模式与NAT模式的区别以及设置静态IP

概述 日常我们都会使用到虚拟机&#xff0c;本文章以VMware虚拟机为例&#xff0c;主要介绍下虚拟机设置桥接模式与NAT模式的区别&#xff0c;并通过示意图进行讲解。并且会介绍如何去设置静态IP。 模式介绍 NAT模式NAT模式下 &#xff0c;创建出来的虚拟机只能访问当前主机…

【利用AI刷面试题】AI:十道JavaScript面试题巩固一下知识

文章目录 1. 请说明 JS 中的闭包是什么&#xff0c;它有哪些应用场景&#xff1f;2. 请描述一下数组的遍历方式&#xff0c;如何向数组中添加元素&#xff1f;3. 如何利用JS实现一个进度条&#xff1f;4. 请阐述浮点数在 JavaScript 中的存储机制&#xff1f;5. 请简述ES6 模块…

【数据结构】散列表(哈希表)

文章目录 前言一、什么是散列表二、什么是哈希函数三、下面简单介绍几种哈希函数四、冲突处理散列冲突的方法开放定址法再散列函数法公共溢出区法链地址法 五、代码实现1.哈希函数2.链表和哈希表的创建3.哈希表初始化3.从哈希表中根据key查找元素4.哈希表插入元素5.元素删除6.哈…

Learning C++ No.22【二叉树OJ题实战】

文章目录 引言&#xff1a;第一题&#xff1a;根据二叉树创建字符串第二题&#xff1a;二叉树的层序遍历第三题&#xff1a;自底向上实现层序遍历第四题&#xff1a;二叉树的最近公共祖先第五题&#xff1a;将搜索二叉树转换成双向链表第六题&#xff1a;从前序和中序遍历序列构…

数据结构_排序

目录 1. 排序的基本概念 2. 插入排序 2.1 直接插入排序 2.2 折半插入排序 2.3 希尔排序 2.4 相关练习 3. 交换排序 3.1 冒泡排序 3.2 快速排序 3.3 相关练习 4. 选择排序 4.1 简单选择序列 4.2 堆排序 4.3 相关练习 5. 归并排序和基数排序 5.1 归并排序 5.2 基…

鸿蒙Hi3861学习十六-Huawei LiteOS-M(Socket服务端)

一、简介 具体概念可以参考上一章内容&#xff1a;鸿蒙Hi3861学习十五-Huawei LiteOS-M&#xff08;Socket客户端&#xff09;_t_guest的博客-CSDN博客 WIFI学习一&#xff08;socket介绍&#xff09;_wifi socket_t_guest的博客-CSDN博客 二、API介绍 bind 函数功能&#xff1…

由浅入深Netty基础知识IO相关

目录 1 stream vs channel2 IO 模型3 零拷贝3.1 传统 IO 问题3.2 NIO 优化 4 AIO4.1 文件 AIO4.2 守护线程4.3 网络 AIO 1 stream vs channel stream 不会自动缓冲数据&#xff0c;channel 会利用系统提供的发送缓冲区、接收缓冲区&#xff08;更为底层&#xff09;stream 仅支…

补充点【机器学习部分】

0518机器学习 身高和体重为特征&#xff0c;和标签训练阔以得到一个式子。 1.有监督学习&#xff1a; 2.训练集和测试集 3.模型学习 4.模型评估 5.基本术语 数据集&#xff1a;记录数据的集合 样本&#xff1a;每条记录关于一个事件或者对象的描述 特征&#xff1a;反映对…