Three.js——十三、自定义大小画布、UI交互按钮以及3D场景交互、渲染画布为文件(图片)

画布全屏以及自定义大小画布

<!-- canvas元素默认是行内块元素 -->
<divclass="model"style="background-color: #ff0000;"width="300"height="180"
></div>

画布随窗口变化

// 画布跟随窗口变化
window.onresize = function () {const width = window.innerWidth - "多余的宽度"; //model画布高度const height = window.innerHeight - "多余的高度"; //model画布宽度renderer.setSize(width, height);camera.aspect = width / height;camera.updateProjectionMatrix();
};

UI 交互按钮与 3D 场景交互

通过按钮点击事件设置模型颜色,我这里使用 element-plus 的按钮

<el-button class="yellow-btn" type="warning" plain @click="yellowBtn">黄色</el-button
>
const yellowBtn = () => {console.log(mesh);mesh.material.color.set(0xe5a144);
};

效果:
请添加图片描述

背景透明度

.setClearAlpha()方法

renderer.setClearAlpha(0.0); // 完全透明

设置背景透明alpha: true

// 在构造函数参数中设置alpha属性的值
var renderer = new THREE.WebGLRenderer({alpha: true,
});

.setClearColor()方法

.setClearColor()方法的参数 2,可以用来设置背景颜色透明度。

renderer.setClearColor(0xb9d3ff, 0.4); //设置背景颜色和透明度

这里我给创建画布的 div 添加一个背景颜色

.container {width: 100%;height: 100vh;position: relative;z-index: 1;background: #ff5810;
}

模型背景需要删掉

// scene.background = new THREE.Color(0xaaaaaa);

这时模型的背景会变成透明,适应 div 的背景
请添加图片描述

渲染结果保存为图片

<el-button class="save-btn" @click="saveFile">下载</el-button>
const saveFile = () => {const link = document.createElement("a");// 通过超链接herf属性,设置要保存到文件中的数据link.href = window.URL.createObjectURL(new Blob([JSON.stringify(scene), JSON.stringify(mesh)]));link.download = "模型数据.txt"; //下载文件名link.click(); //js代码触发超链接元素a的鼠标点击事件,开始下载文件到本地
};

下载完成后会生成一个 txt 文档,内容里是放一些场景的属性以及模型的信息

1. 配置 webgl 渲染器preserveDrawingBuffer:true

// WebGL渲染器设置
const renderer = new THREE.WebGLRenderer({//想把div画布上内容下载到本地,需要设置为truepreserveDrawingBuffer: true,
});

2.绑定按钮的点击事件

<el-button class="save-btn" @click="saveFile">下载</el-button>
const saveFile = () => {const saveFile = () => {const link = document.createElement("a");// 通过超链接herf属性,设置要保存到文件中的数据var canvas = renderer.domElement; //获取canvas对象link.href = canvas.toDataURL("image/png");link.download = "threejs.png"; //下载文件名link.click(); //js代码触发超链接元素a的鼠标点击事件,开始下载文件到本地};
};

效果:

请添加图片描述

3.Cavnas 方法.toDataURL()

const link = document.createElement('a');
// 通过超链接herf属性,设置要保存到文件中的数据
const canvas = renderer.domElement; //获取canvas对象
link.href = canvas.toDataURL("image/png");
// link.href = canvas.toDataURL("image/jpeg");
// link.href = canvas.toDataURL("image/bmp");

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

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

相关文章

Qt 项目架构之----MVC架构

MVC 模式代表 Model-View-Controller&#xff08;模型-视图-控制器&#xff09; 模式。这种模式用于应用程序的分层开发。 Model&#xff08;模型&#xff09;-是应用程序中用于处理应用程序数据逻辑的部分。通常模型对象负责在数据库中存取数据。View&#xff08;视图&#x…

2023 Testing Expo倒计时-聚焦风丘9003展位

请点击此处&#xff0c;即可进行在线登记报名并了解更多信息&#xff01;

25个高级SQL查询-列出结果集的前5行

本专栏中的许多示例将基于以下员工表(employee)。只有少数例子将以其他表格为基础;在这些情况下,表格将与示例一起进行说明。 一、WITH WITH AS 短语,也叫做子查询部分,定义一个SQL片断后,该SQL片断可以被整个SQL语句所用到。有的时候,with as 是为了提高SQL语句的可读…

2023 Testing Expo倒计时-聚焦Softing 9003展位

请点击此处&#xff0c;即可进行在线登记报名并了解更多信息&#xff01;

计算机二级c语言考试复习大纲(一战到底)

1.C语言关键字 1.数据类型关键字&#xff08;12个&#xff09; char(字符型) short&#xff08;短整型&#xff09; int&#xff08;整型&#xff09; long&#xff08;长整型&#xff09; float&#xff08;单精度浮点型&#xff09; double&#xff08;双精度浮点…

设计模式——单例模式

单例模式 定义 确保某一个类只有一个实例&#xff0c;而且自行实例化并向整个系统提供这个实例。 即保证一个类只有一个实例&#xff0c;并且提供一个全局访问点 优缺点、应用场景 优点 单例对象在内存中只有一个实例&#xff0c;减少了内存的开支。尤其对于一个频繁创建…

UE学习记录02----UMG创建控件模板+事件分发器

官网4.27&#xff1a; 创建控件模板 | 虚幻引擎文档 (unrealengine.com) 使用UMG创建的每个 控件蓝图 都被视为 用户控件&#xff0c;其可在其他控件蓝图中重复使用和放置。 其视觉效果和脚本功能都将延续到该蓝图中。 利用某些蓝图脚本&#xff0c;可创建UI控件的运行方式或…

TCP/IP详解

目录 一、OSI参考模型 1.图示 2.OSI七层模型各自作用 3.七层通信过程 二、IP协议 1.IPv4首部 2.IPv6首部 三、TCP协议 1.tcp首部格式 2.握手挥手图示 3.握手流程 4.为什么要三次握手&#xff1f; 5.四次挥手流程 6.为什么要四次分手&#xff1f; 7.为什么要等待…

使用 Pytest 运行 yaml 文件来驱动 Appium 自动化测试

目录 前言&#xff1a; 获取 yaml 文件 YamlTest 测试类 Appium 初始化 Pytest 测试类 自定义 runtest demo&#xff1a; 自定义错误输出 Yaml 使用方式规则 前言&#xff1a; 使用Pytest来运行yaml文件来驱动Appium自动化测试是一种方便且灵活的方法。通过将测试数据…

uniapp:针对与富文本解析的几种方法

第一章、富文本的解析方法 1.1 uniapp自带组件&#xff1a;rich-text <rich-text :nodes"nodes"></rich-text> 1.2 v-html <view v-html"item.content"></view> 1.3 uview组件&#xff1a;u-parse <u-parse :content&quo…

Linux·从 URL 输入到页面展现到底发生什么?

打开浏览器从输入网址到网页呈现在大家面前&#xff0c;背后到底发生了什么&#xff1f;经历怎么样的一个过程&#xff1f;先给大家来张总体流程图&#xff0c;具体步骤请看下文分解&#xff01; 总体来说分为以下几个过程: DNS 解析:将域名解析成 IP 地址TCP 连接&#xff1a…

Zoho Projects:Jira的理想替代品,让项目管理更高效

在软件开发生命周期中&#xff0c;项目管理一直是一个非常重要的环节。为了更好地协作、追踪项目的进程和管理任务&#xff0c;许多公司选择了Jira这款著名的项目管理工具&#xff0c;它是个非常强大的工具&#xff0c;但同时也有非常明显的缺点。今天&#xff0c;我们将向大家…