【发布时间】:2017-06-25 03:19:46
【问题描述】:
我在午餐时间一直在玩 Three.js,实现旧的 NEHE 演示(目前为止 #30)。看起来令人讨厌的一个方面是新的异步纹理加载器。我有一个着色器材质演示,材质是这样创建的:
var uniforms = {
tOne: { type: "t", value: THREE.ImageUtils.loadTexture( "images/cover.png" ) },
tSec: { type: "t", value: THREE.ImageUtils.loadTexture( "images/grass.png" ) }
};
var material_shh = new THREE.ShaderMaterial({
uniforms: uniforms,
vertexShader: vertShader,
fragmentShader: fragShader
});
var mesh = new THREE.Mesh( cubeGeom, material_shh );
gfxScene.add(mesh);
这很好用,但是 three.js 在控制台中抱怨我不推荐使用 loadTexture。 (为什么?)。无论如何,我可以编写它来使用这样的纹理加载器:
var textureLoader = new THREE.TextureLoader();
var cover, grass;
textureLoader.load( "images/cover.png", function( texture ) {
cover = texture;
});
textureLoader.load( "images/grass.png", function( texture ) {
grass = texture;
var uniforms = {
tOne: { type: "t", value: cover },
tSec: { type: "t", value: grass }
};
var material_shh = new THREE.ShaderMaterial({
uniforms: uniforms,
vertexShader: vertShader,
fragmentShader: fragShader
});
var mesh = new THREE.Mesh( cubeGeom, material_shh );
gfxScene.add(mesh);
});
这也有效,但看起来相当复杂。我知道异步对网络应用程序等有好处,但是......它假设我保证会在grass.png之前加载cover.png。这真的可以保证吗?我宁愿坚持使用同步 loadTexture 实用程序,但也许有充分的理由不使用 loadTexture(除了它已被弃用)。 TIA。
【问题讨论】:
-
你可以先加载所有你需要的资源,使用
THREE.LoadingManager(),完成后调用动画函数。
标签: asynchronous three.js textures