解决 Uncaught TypeError: SpriteCanvasMaterial is not a constructor.

news2025/1/9 14:50:37

文章目录

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


前言

上周买了本《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.coloradmin.cn/o/541930.html

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

相关文章

研发工程师玩转Kubernetes——启用microk8s的监控面板(dashboard)

安装插件 microk8s enable dashboard 查看dashboard 地址 由于dashboard是在kube-system的namespace中&#xff0c;我们可以使用下面指令查看它服务的地址。 microk8s kubectl get service -n kube-system kubernetes-dashboard 可以得到地址是https://10.152.183.167。 登…

Android Jetpack-Databinding基本使用

文章目录 让你的项目支持Databinding基本使用布局和绑定表达式常用运算符判空null获取对象属性避免空指针异常其他控件引用资源引用 事件处理import,variables,and includesimportVariablesIncludes 数据更新->UI更新监听字段变化更新监听对象变化更新 UI更新->数据更新绑…

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

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

作为程序员的你,常用的工具软件有哪些?

不会还有程序员没用过Chatgpt吧&#xff1f; 我现在的工作日常&#xff1a;把需求提给Chatgpt&#xff0c;代码出来后再自行润色一下代码&#xff0c;然后到工业环境里跑一下&#xff0c;没问题就可以提交了。一来一回效率提高了好几倍&#xff0c;摸鱼的时间都变多了…… 除了…

自学黑客(网络安全)必学内容

随着时代的发展&#xff0c;经济、社会、生产、生活越来越依赖网络。而随着万物互联的物联网技术的兴起&#xff0c;线上线下已经打通&#xff0c;虚拟世界和现实世界的边界正变得模糊。这使得来自网络空间的攻击能够穿透虚拟世界的边界&#xff0c;直接影响现实世界的安全。 …

环环相扣,循环不止:深入解析循环队列

本盘博客会讲解力扣“622. 设计循环队列”的解题思路&#xff0c;这是题目链接。 先来审下题&#xff1a; 以下是示例&#xff1a; 以下是提示&#xff1a; 如何设计一个循环队列呢&#xff1f;这里我用数组来实现。结构的定义如下&#xff1a; typedef struct {int* a; …

又一神器开源!无需服务器支持!打通手机,浏览器的Web LLM!

大家好&#xff0c;我是千与千寻&#xff0c;大家可以叫我“千寻哥”&#xff0c;之前和大家分享了两篇关于ChatGPT的技术文章&#xff1a; 1.chatgpt 2.chatgpt ChatGPT毫无疑问是现在最大的风口&#xff0c;各个行业都在集成ChatGPT的API接口以及各类的应用插件&#xff0…

本地部署 GPT Academic

本地部署 GPT Academic GPT Academic 项目概述Github 地址部署 GPT Academic配置 GPT Academic 参数启动 GPT Academic访问 GPT AcademicNew Bing Cookie 的获取方法 GPT Academic 项目概述 GPT 学术优化 (GPT Academic)&#xff0c;为GPT/GLM提供图形交互界面&#xff0c;特别…

SSM整合(单元测试、结果封装、异常处理)

文章目录 1&#xff0c;SSM整合1.1 流程分析1.2 整合配置步骤1&#xff1a;创建Maven的web项目步骤2:添加依赖步骤3:创建项目包结构步骤4:创建SpringConfig配置类步骤5:创建JdbcConfig配置类步骤6:创建MybatisConfig配置类步骤7:创建jdbc.properties步骤8:创建SpringMVC配置类步…

【Leetcode刷题】算法:最长公共前缀

文章目录 一、题目描述二、解题思路2.1 解法12.2 解法22.3 解法32.4 解法4 三、结果提交 一、题目描述 二、解题思路 2.1 解法1 class Solution:def longestCommonPrefix(self, strs: List[str]) -> str:if not strs: # 如果字符串数组为空&#xff0c;则返回空字符串ret…

MIL-STD-1553B总线系统搭建指导

MIL-STD-1553B总线系统搭建指导 1.1553B总线协议 1.11553B总线介绍 MIL-STD-1553B&#xff08;GJB 289A&#xff09;是一种应用于机载电子设备间通信的共享式总线通信协议&#xff0c;以总线式拓扑结构连接最多31个终端设备互联&#xff0c;传输速率为1Mbps&#xff0c;在航…

任务跟踪器重要性探析:提升项目效率,实现管理优化

使用任务跟踪器完成项目的最显著好处之一是它们大大减少了开始新项目的初始阻力&#xff0c;尤其是当它们是大型、长期和复杂的项目时。任务跟踪器可用于将这些艰巨的项目分解为更小的、相互依赖的任务&#xff0c;这些任务有助于激发动力和行动以实现最终目标。使用项目任务跟…

Python: 让单元测试输出像GoogleTest一样

文章目录 1. 目的2. 原版 unittest 的输出3. 仿 GoogleTest 的输出效果4. 实现原理浅析传入 testRunner 参数testRunner 参数应该满足的条件颜色高亮&#xff1a; ASCII 转义字符的使用测试用例输出文本内容的格式调整&#xff1a;仿googletest 5. 完整实现代码6. 完整调用代码…

$‘\r‘: command not found syntax error near unexpected token `$‘do\r‘‘ 解决方案

问题描述 今天在执行代码时出现了这样的错误&#xff1a; bash xxx.sh xxx.sh: line 2: $\r: command not found xxx.sh: line 7: $\r: command not found xxx.sh: line 8: syntax error near unexpected token $do\r 经查阅&#xff0c;发现是.sh文件在windows下编辑&#xf…

Nevron Open Vision for .NET Crack

Nevron Open Vision for .NET Crack 增加了对Microsoft.NET 7.0的支持-NOV现在完全支持.NET Core 7.0&#xff0c;此外还支持Microsoft.NET Framework 4.7.2、.NET Core 5.0和.NET Core 6.0的内部版本。 用于.NET改进的NOV图表 添加了WPF和WinForms版本中提供的新3D渲染引擎。新…

展会回顾 | 2023元宇宙生态博览会圆满落幕,3DCAT荣获“元宇宙交互技术奖”

2023年5月10日-5月12日&#xff0c;一场涵盖了元宇宙终端头显、数字文娱、数字艺术、数字运动、数字多媒体展陈设计、数字展厅展馆、科技文旅、夜游演艺、沉浸式KTV/酒吧等多个领域的元宇宙商业盛会——2023第2届世界元宇宙生态博览会在广州广交会展馆A区3.2馆、4.2馆掀开帷幕。…

Python求balance_list【三】

本文为博主原创&#xff0c;未经授权&#xff0c;严禁转载及使用。 本文链接&#xff1a;https://blog.csdn.net/zyooooxie/article/details/130159648 很早之前&#xff0c;我写了2篇 如何求balance_list 的博客&#xff1a; https://blog.csdn.net/zyooooxie/article/detail…

DeepFM - 工业界经典baseline(哈工大 华为)

文章目录 1、模型结构如下:2、关键理解点:3、代码实现细节:DeepFM: A Factorization-Machine based Neural Network for CTR Prediction。dfm由哈工大和华为合作发表在IJCAI-2017;模型结构很简单,wide&deep结构。1、模型结构如下: 相比wide&deep [下文简称wd] 有…

就业内推 | 应届生校招、实习,上市公司有岗,最高18k*15薪

01 UCloud &#x1f537;招聘岗位&#xff1a;网络工程师 &#x1f537;职责描述&#xff1a; 1、负责UCloud全球骨干网或数据中心网络工作&#xff0c;包括设备技术选型、架构运营方案设计、日常运维支持 2、持续提升网络稳定性与性能。 &#x1f537;任职要求&#xff1a; …

Flowable-modeler可视化教程

Flowable-Modeler功能 提供可视化编辑器&#xff0c;编辑BPMN流程&#xff0c;编辑CASE模型&#xff0c;编辑Form表单&#xff0c;编辑App应用&#xff0c;编辑决策表提供可视化参数配置&#xff1a;每个流程可以配置详细的参数设置&#xff0c;按照流程对应的规范来设计。提供…