threejs 使用base64编码的图片作为贴图

news/2024/11/15 16:54:56/文章来源:https://www.cnblogs.com/hyj111/p/18428876

 使用base64作为贴图可以从接口直接传输(如果特别大需要压缩),可以省去很多操作

 

代码如下

// 纹理加载器
const texLoader = new THREE.TextureLoader();
const base64Str = "data:image/png;base64,...";
texLoader.load(base64Str, (texture) => {const aspectRatio = texture.image.width / texture.image.height;// 创建平面几何体const geometry = new THREE.PlaneGeometry(100 * aspectRatio , 100 ); // 根据比例放大// 创建材质const material = new THREE.MeshLambertMaterial({map: texture,});
// 创建网格对象const plane = new THREE.Mesh(geometry, material);scene.add(plane);})

渲染时需要在贴图加载完成后进行渲染,贴图需要光照才能显示
完整代码

 1  <script src="https://cdnjs.cloudflare.com/ajax/libs/three.js/r128/three.min.js"></script>
 2     <script>
 3         // 创建场景
 4         const scene = new THREE.Scene();
 5 
 6         // 创建相机
 7         const camera = new THREE.PerspectiveCamera(75, window.innerWidth / window.innerHeight, 0.1, 1000);
 8         camera.position.z = 300;
 9 
10         // 创建渲染器
11         const renderer = new THREE.WebGLRenderer();
12         renderer.setSize(window.innerWidth, window.innerHeight);
13         document.body.appendChild(renderer.domElement);
14 
15         // 添加光源
16         const light = new THREE.DirectionalLight(0xffffff, 1);
17         light.position.set(0, 1, 1).normalize();
18         scene.add(light);
19 
20 
21 
22         // 纹理加载器
23         const texLoader = new THREE.TextureLoader();
24         const base64Str = "data:image/png;base64,..."
25         texLoader.load(base64Str, (texture) => {
26 
27         const aspectRatio = texture.image.width / texture.image.height;
28         // 创建平面几何体
29         const geometry = new THREE.PlaneGeometry(100 * aspectRatio , 100 ); // 根据比例放大
30 
31         // 创建材质
32         const material = new THREE.MeshLambertMaterial({
33             map: texture,
34         });
35 
36         // 创建网格对象
37         const plane = new THREE.Mesh(geometry, material);
38         scene.add(plane);
39         })
40 
41         // 渲染
42         function animate() {
43             requestAnimationFrame(animate);
44             renderer.render(scene, camera);
45         }
46         animate();
47 </script>
View Code

 

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

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

相关文章

WPS在堆积柱状图上显示加总数据

我们常常会用到堆积柱状图,每个色块都可以显示数值,那如何在图上显示加总数据呢?今天分享一个小方法。以2024年前三周手机销量为例:首先将数据整理如下,最后一列求和。2. 选择所有数据(含合计)绘制堆积柱状图,并选中“合计”的柱状图,右键添加数据标签。3. 选择“合计”…

Vue3 注册及使用全局方法

一、背景 自己的一个考公网站,需求是 用户登录系统,但是用户去查看功能时要判断当前用户是否有是会员,如果不是会员,那么查看其他功能时需要弹窗说不是vip,如果是会员则可以直接查看。 二、实现 首先上截图。 1.Vue3 全局注册方法 1.新建popToast.jsimport Cookies from &q…

Figma UI Design add background color to text All In One

Figma UI Design add background color to text All In One 如何使用 Figma 给文字添加背景色Figma UI Design add background color to text All In One如何使用 Figma 给文字添加背景色https://www.figma.com/design/ solutionshttps://www.youtube.com/watch?v=j1UT8ezXAXI…

app手机元素定位方式

方式一:采用uiautomatorviewer元素定位 ①这个定位方式有缺陷也就是它只能识别Android8以下的系统,8及以上的系统就无法定位了 ②位置:这个工具是位于安装的SDK下的tools文件下,我的安装路径如下③双击打开这个工具就行,再运行的页面点击 方式二:安装Appium-Inspector ①下…

从0到0.1学习实践盒子模型

从0到0.1学习实践盒子模型 盒子模型概念 预备知识margin:外边距【两个元素之间的距离】 border:边框 padding:内边距【内容区域和边框距离】 height:文本高度 width:文本宽度content-box (形象图片)content-box--只计算内容区域的宽度和高度,边框和内边距不算在内。 .b…

Leetcode 445. 两数相加 II

1.题目基本信息 1.1.题目描述 给你两个 非空 链表来代表两个非负整数。数字最高位位于链表开始位置。它们的每个节点只存储一位数字。将这两数相加会返回一个新的链表。 你可以假设除了数字 0 之外,这两个数字都不会以零开头。 1.2.题目地址 https://leetcode.cn/problems/add…

Windows命令:时间延迟命令

延迟一段时间再执行下一条命令”。 一、利用ping实现延迟命令 这种延时手段是不精确的,因为每一次ping通的延迟不一样。 1、示例chcp 65001 @echo off echo 延时前:%time% ping /n 3 127.0.0.1 >nul echo 延时后:%time% pause 参数/n表示ping通的次数。127.0.0.1是本机ip…

电力施工作业绝缘手套识别系统

电力施工作业绝缘手套识别系统对电力作业人员在电力设备上进行施工作业时是否佩戴绝缘手套进行识别分析,当电力施工作业绝缘手套识别系统检测到作业人员未佩戴绝缘手套时立即抓拍存档同步回传给后台监控人员,提醒相关人员及时制止,及时规避更危险的触电事故发生。电力施工作…

sicp每日一题[2.24-2.27]

2.24-2.26没什么代码量,所以跟 2.27 一起发吧。Exercise 2.24Suppose we evaluate the expression (list 1 (list 2 (list 3 4))). Give the result printed by the interpreter, the corresponding box-and-pointer structure, and the interpretation of this as a tree (as…

ansible-cmdb简单使用

1、安装 官方:https://ansible-cmdb.readthedocs.io/en/latest/ wget https://github.com/fboender/ansible-cmdb/releases/download/1.27/ansible-cmdb-1.27-2.noarch.rpm yum -y install ./ansible-cmdb-1.27-2.noarch.rpm2、使用 首先,为你的主机生成 Asible 输出: mkdir…

第三周作业(海报➕二维码)

二维码可以在那个网站上面学习数学知识

MySQL线上问题排查

线上问题排查 一、线上故障排查的思路与方向 在程序开发与运行过程中,出现Bug问题的几率无可避免,数据库出现问题一般会发生在下述几方面:①撰写的SQL语句执行出错,俗称为业务代码Bug。 ②开发环境执行一切正常,线上偶发SQL执行缓慢的情况。 ③线上部署MySQL的机器故障,如…