更新纹理的正确方法 (THREE.JS)
Proper way to update texture (THREE.JS)
我有一些复选框布尔值可以将不同的纹理加载到 three.js 中的球体。
我 运行 遇到这些图片加载速度不够快的问题,导致性能下降。我想我需要预加载它们但不确定最好的方法。我还包括我当前的代码,因为可能有更好的解决方案或我的一些不需要的代码。
function showPoliticalMap(){
var world = scene.getObjectByName("world").children[1],
cloud = scene.getObjectByName("cloud"),
uri = world.material.map.image.baseURI;
scene.remove(cloud);
spotlight.intensity = 0;
ambientLight.intensity = 1;
world.material.map.image.currentSrc = uri + "img/earthmapoutlineblue_optimized.jpg";
world.material.map.image.src = uri + "img/earthmapoutlineblue_optimized.jpg";
world.material.map.needsUpdate = true;
world.material.needsUpdate = true;
}
如果要在更改纹理后去除云层并更改光照强度,则需要先加载纹理。您可以为此使用 TextureLoader
,检查 documentation。在下面的示例中,您实际上不需要下载进度回调,但保留错误回调可能会很好。
function showPoliticalMap(){
var world = scene.getObjectByName("world").children[1],
cloud = scene.getObjectByName("cloud"),
uri = world.material.map.image.baseURI;
// instantiate a loader
var loader = new THREE.TextureLoader();
// load a resource
loader.load(
// resource URL
uri + "img/earthmapoutlineblue_optimized.jpg",
// Function when resource is loaded
function ( texture ) {
// do something with the texture
world.material.map = texture;
world.material.needsUpdate = true;
scene.remove(cloud);
spotlight.intensity = 0;
ambientLight.intensity = 1;
},
// Function called when download progresses
function ( xhr ) {
console.log( (xhr.loaded / xhr.total * 100) + '% loaded' );
},
// Function called when download errors
function ( xhr ) {
console.log( 'An error happened' );
}
);
}
我没有测试过,所以不确定它是否可以直接工作,但它展示了它的原理。
我有一些复选框布尔值可以将不同的纹理加载到 three.js 中的球体。
我 运行 遇到这些图片加载速度不够快的问题,导致性能下降。我想我需要预加载它们但不确定最好的方法。我还包括我当前的代码,因为可能有更好的解决方案或我的一些不需要的代码。
function showPoliticalMap(){
var world = scene.getObjectByName("world").children[1],
cloud = scene.getObjectByName("cloud"),
uri = world.material.map.image.baseURI;
scene.remove(cloud);
spotlight.intensity = 0;
ambientLight.intensity = 1;
world.material.map.image.currentSrc = uri + "img/earthmapoutlineblue_optimized.jpg";
world.material.map.image.src = uri + "img/earthmapoutlineblue_optimized.jpg";
world.material.map.needsUpdate = true;
world.material.needsUpdate = true;
}
如果要在更改纹理后去除云层并更改光照强度,则需要先加载纹理。您可以为此使用 TextureLoader
,检查 documentation。在下面的示例中,您实际上不需要下载进度回调,但保留错误回调可能会很好。
function showPoliticalMap(){
var world = scene.getObjectByName("world").children[1],
cloud = scene.getObjectByName("cloud"),
uri = world.material.map.image.baseURI;
// instantiate a loader
var loader = new THREE.TextureLoader();
// load a resource
loader.load(
// resource URL
uri + "img/earthmapoutlineblue_optimized.jpg",
// Function when resource is loaded
function ( texture ) {
// do something with the texture
world.material.map = texture;
world.material.needsUpdate = true;
scene.remove(cloud);
spotlight.intensity = 0;
ambientLight.intensity = 1;
},
// Function called when download progresses
function ( xhr ) {
console.log( (xhr.loaded / xhr.total * 100) + '% loaded' );
},
// Function called when download errors
function ( xhr ) {
console.log( 'An error happened' );
}
);
}
我没有测试过,所以不确定它是否可以直接工作,但它展示了它的原理。