Ich habe während meiner Mittagspause mit Three.js herumgespielt und die alten NEHE-Demos implementiert (bis zu 30). Ein Aspekt, der nervig zu sein scheint, sind die neuen asynchronen Texturlader. Ich habe einen Shader-Material Demo, wo das Material wie folgt erstellt wird:synch vs. asynch texture Laden in three.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);
Dies funktioniert gut, aber Three.js winselt mich in der Konsole, die Loadtexture ist veraltet. (Warum?). Wie auch immer, ich kann es schreiben einen textureLoader wie folgt zu verwenden:
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);
});
Dies funktioniert auch, aber scheint ziemlich verworren. Ich verstehe, dass asynch gut für Web-Apps ist, aber ... und es geht davon aus, dass ich sicher bin, dass die cover.png vor grass.png geladen wird. Ist das garantiert? Ich würde lieber bei dem synchronen Dienstprogramm loadTexture bleiben, aber vielleicht gibt es einen guten Grund, loadTexture nicht zu verwenden (außer es ist veraltet). TIA.
Sie können alle Ressourcen laden, müssen Sie zuerst mit 'THREE.LoadingManager()', und, wenn alles getan ist, dann rufen Sie die Funktion der Animation. – prisoner849