我遇到了困难,需要从glb或gltf文件中生成缩略图以在Web浏览器中显示。因此,唯一活动的图像将是原始gltf文件,其他图像将只是图库中的缩略图。我尝试在每个论坛上搜索它,但是我没有得到任何想法或解决方案。
var imagedata = renderer.domElement.toDataURL();
这种方法可以从画布中获取一个Base64编码,就像截屏一样,你可以将其制作成图像。在我的项目中,我将Base64编码添加为下载链接。
document.getElementById('downloadthumbnail').setAttribute('href',imagedata);
下载缩略图
<a class="downloadthumbnail" id="downloadthumbnail" download="thumbnail.png">Download Thumbnail</a>
setTimeout( function() {
var imagedata = renderer.domElement.toDataURL();
document.getElementById('downloadthumbnail').setAttribute('href',imagedata);
}, 1000 );
我仍在寻找一种解决方案或途径,可以使用javascript直接将生成的图像保存到服务器上,但我认为这是不可能的。
var mybase64Image = renderer.domElement.toDataURL();
查看这个仓库,使用前端的threejs将glb模型转换为图像
https://github.com/ketanvariya/modelToImage
它也可以在后端使用,只需将图像文件发送到后端并保存即可。
我发现 Shopify 开发了一个 CLI 工具,可以将屏幕截图转换为 glb 文件并创建缩略图。我猜你可以在服务器环境中安装它,并从后端运行类似以下的命令:
const { exec } = require("child_process");
exec(`screenshot-glb -i ${<PATH_TO_MODEL>} -o ${<PATH_TO_OUTPUT_IMAGE>}`, (error, stdout, stderr) => {
if (error) {
// handle error
}
if (stderr) {
// handle error
}
// Screenshot taken successfully
});
我刚发现,在后端使用node.js确实可以制作屏幕截图“缩略图”。
显然,threejs.org通过node.js和e2e以及puppeteer.js捕捉逻辑从它们的样例中制作屏幕截图。因此,使用node.js制作屏幕截图的方法是存在的。