2015-06-02 3 views
0

У меня есть материал шейдера, который работает так, как ожидалось. Этот шейдер имеет прикрепленную текстуру.THREEJS Shader Материал перезаписан

Я хочу создать 2 ячейки, используя этот материал шейдера, с другой текстурой для каждой сетки.

Проблема в том, что если я попытаюсь отобразить мои 2 ячейки в сцене, материал первого объекта каким-то образом переписан и использует тот же материал, что и второй объект.

var dataShader = VJS.shaders.data; 
    var uniforms = dataShader.parameters.uniforms; 
    // texture size (2048 for now) 
    uniforms.uTextureSize.value = stack._textureSize; 
    // array of 16 textures 
    uniforms.uTextureContainer.value = textures; 
    // texture dimensions 
    uniforms.uDataDimensions.value = new THREE.Vector3(stack._columns, stack._rows, stack._nbFrames); 
    // world to model 
    uniforms.uWorldToData.value = stack._lps2IJK; //new THREE.Matrix4(); 

    var sliceMaterial = new THREE.ShaderMaterial({ 
     // 'wireframe': true, 
     'side': THREE.DoubleSide, 
     'transparency': true, 
     'uniforms': uniforms, 
     'vertexShader': dataShader.parameters.vertexShader, 
     'fragmentShader': dataShader.parameters.fragmentShader, 
    }); 

    var slice = new THREE.Mesh(sliceGeometry, sliceMaterial); 
    // this is an Object3D that is added to the scene 
    this.add(slice); 

Имеет ли смысл? Это ожидаемое поведение? Если да, есть ли хороший способ обойти эту проблему?

Благодаря

enter image description here

ответ

1

Вам нужно создать два экземпляра материала, используя тот же шейдер, и назначить соответствующие текстуры/формы для каждого.

редактировать

Копирование формы немного сложнее. Вы теряете ссылку, которую я думаю, когда вы клонируете материал, чтобы вы могли быть осторожны, как вы их управляете.

+0

Спасибо, да, у меня была ошибка в моем коде в клонировании материала. – Nicolas

Смежные вопросы