【问题标题】:How can I load a local image in THREE.js?如何在 THREE.js 中加载本地图像?
【发布时间】:2020-02-22 01:02:31
【问题描述】:

我正在尝试将图像放在对象上,如下所示:

var texture = new THREE.TextureLoader().load( 'crate.gif' );
var geometry = new THREE.BoxBufferGeometry( 200, 200, 200 );
var material = new THREE.MeshBasicMaterial( { map: texture } );
mesh = new THREE.Mesh( geometry, material );
scene.add( mesh );

我的本​​地文件夹中有“crate.gif”,但它没有出现在盒子上。

我应该运行一个网络服务器,或者我可以使用一个数据 url,因为本地图像加载不起作用,正如开发人员重申的那样。

  • 运行网络服务器是一种不可接受的变通办法,将考虑。
  • 我可能愿意将每张图片都转换为 Base64,但我不知道如何集成该解决方案。

我意识到图像可能无法显示,因为它在被调用之前尚未加载。加载图片最简单的方法是什么?

【问题讨论】:

标签: javascript three.js base64


【解决方案1】:

就像使用数据 URI 代替图像文件名一样简单,如果操作正确

var geometry = new THREE.SphereGeometry(0.5, 32, 32);
var texture = new THREE.TextureLoader().load( "data:image/jpeg;base64,/9j/4AAQSkZJRgA--(truncated-for-example)--BAgEASABIAAD" );
var material = new THREE.MeshBasicMaterial( { map: texture } );
var mesh = new THREE.Mesh(geometry, material);
scene.add(mesh);

【讨论】:

    【解决方案2】:

    另一种将图像加载为纹理的方法是使用 require 并使用图像的相对路径:

    我正在使用 React 并为我工作。

    const textureImage = require('../assets/images/image.png');
    const texture = new THREE.TextureLoader().load(textureImage);
    const geometry = geometry = new THREE.BoxBufferGeometry( 200, 200, 200 );
    const material = new THREE.MeshBasicMaterial( { map: texture } );
    const mesh = new THREE.Mesh(geometry, material);
    scene.add(mesh);
    

    【讨论】:

    • 这取决于 node.js,因此不是一个有效的答案
    • 我明白,但我希望这个答案能帮助其他人解决 node.js 上的这个问题或做出反应。
    猜你喜欢
    • 1970-01-01
    • 2017-07-05
    • 2014-05-15
    • 2020-02-22
    • 2017-10-24
    • 1970-01-01
    • 1970-01-01
    • 2014-06-25
    相关资源
    最近更新 更多