2016-07-11 36 views
0

Ich versuche die Textur einer Sphäre, die bereits in der Szene erstellt wurde, mit einem Klickereignis zu ändern. In der Szene habe ich auch andere Elemente wie Text und Collada-Objekt.Ändern der Textur beim Klicken, weil andere Objekte sich verstecken

Der Code Ich habe die Textur der Kugel verändert, aber es ändert die Reihenfolge der Elemente in der Szene verursacht die anderen sichtbaren Objekte hinter der Kugel zu verstecken. Wenn ich die Opazität der Kugel ändere, kann ich deutlich die anderen Elemente dahinter sehen.

Wie kann ich die Reihenfolge der Elemente in der Szene beibehalten, wenn ich die Textur ändere?

$("#button").click(function(){ 
    var textureLoader = new THREE.TextureLoader(manager); 
    var materials = [ 
     new THREE.MeshBasicMaterial({map: textureLoader.load(options.cubic.file.left), transparent: true, opacity: 1}), // right 
     new THREE.MeshBasicMaterial({map: textureLoader.load(options.cubic.file.right), transparent: true, opacity: 1}), // left 
     new THREE.MeshBasicMaterial({map: textureLoader.load(options.cubic.file.top), transparent: true, opacity: 1}), // top 
     new THREE.MeshBasicMaterial({map: textureLoader.load(options.cubic.file.bottom), transparent: true, opacity: 1}), // bottom 
     new THREE.MeshBasicMaterial({map: textureLoader.load(options.cubic.file.back), transparent: true, opacity: 1}), // back 
     new THREE.MeshBasicMaterial({map: textureLoader.load(options.cubic.file.front), transparent: true, opacity: 1}) // front 
    ]; 

    mesh.material = new THREE.MultiMaterial(materials); 
}); 

Sphere:

var mesh; 
var geometry; 
var scene = new THREE.Scene(); 

function init() { 
    geometry = new THREE.SphereBufferGeometry(500, 60, 40); 
    geometry.scale(-1, 1, 1); 

    var textureLoader = new THREE.TextureLoader(manager); 
    var materials = [ 
     new THREE.MeshBasicMaterial({map: textureLoader.load(options.cubic.file.left)}), // right 
     new THREE.MeshBasicMaterial({map: textureLoader.load(options.cubic.file.right)}), // left 
     new THREE.MeshBasicMaterial({map: textureLoader.load(options.cubic.file.top)}), // top 
     new THREE.MeshBasicMaterial({map: textureLoader.load(options.cubic.file.bottom)}), // bottom 
     new THREE.MeshBasicMaterial({map: textureLoader.load(options.cubic.file.back)}), // back 
     new THREE.MeshBasicMaterial({map: textureLoader.load(options.cubic.file.front)}) // front 
    ]; 
    mesh = new THREE.Mesh(new THREE.BoxGeometry(1000, 1000, 1000, 7, 7, 7), new THREE.MultiMaterial(materials)); 
    mesh.scale.x = -1; 
    scene.add(mesh); 
} 

Antwort

0

nehme ich es wegen der Art und Weise sein könnte, wie der Renderer Objekte sortiert, die einen gewissen Grad an Transparenz aufweisen.

versuchen, die renderer.sortObjects = false // default is true ///

+0

Ja, es war, weil ich es wahr hatte! Auch musste ich die Transparenz für jedes Material auf falsch ändern – SNos