Je joue avec Three.js pendant mon heure de lunch, implémentant les anciennes démos de NEHE (jusqu'à # 30 jusqu'à maintenant). Un aspect qui semble ennuyeux est le nouveau chargeur de texture asynchrone. J'ai un matériau shaders démo où le matériau est créé comme ceci:synchronisation contre chargement de la texture asynchrone dans trois.js
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);
Cela fonctionne très bien, mais Three.js couine à moi dans la console qui LoadTexture est dépréciée. (Pourquoi?). Quoi qu'il en soit, je peux écrire à utiliser un TextureLoader comme ceci:
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);
});
Cela fonctionne aussi, mais semble plutôt alambiquée. Je comprends que asynch est bon pour les applications web, etc. mais ... Et cela suppose que je suis certain que cover.png sera chargé avant grass.png. Est-ce que c'est garanti? Je préférerais simplement m'en tenir à l'utilitaire loadTexture synchrone, mais il existe peut-être une bonne raison de ne pas utiliser loadTexture (à part qu'il est obsolète). TIA.
Vous pouvez d'abord charger toutes les ressources dont vous avez besoin, en utilisant 'THREE.LoadingManager()', et, quand tout est fait, appeler la fonction d'animation. – prisoner849