2016-01-26 49 views
1

我使用的ShaderMaterial是默認的Phong着色器(我使用shaderChunk)的完整副本。自定義phong着色器envMap翻轉

我的問題是,envMap被翻轉X ...

這裏是我所得到的:

what I get

而我想:

what I want

我試圖訪問cubeCamera.renderTarget.texture以使用repeat.x = -1wrapS = THREERepeatWrapping.RepeatWrapping但它絕對沒有...

var cubeCamera = new THREE.CubeCamera(0.01, 500, 256); 
scene.add(cubeCamera); 

var sphereMaterial = new THREE.ShaderMaterial({ 
    uniforms: THREE.UniformsUtils.merge([ 
     THREE.UniformsLib.common, 
     THREE.UniformsLib.aomap, 
     THREE.UniformsLib.lightmap, 
     THREE.UniformsLib.emissivemap, 
     THREE.UniformsLib.bumpmap, 
     THREE.UniformsLib.normalmap, 
     THREE.UniformsLib.displacementmap, 
     THREE.UniformsLib.fog, 
     THREE.UniformsLib.lights, 
     THREE.UniformsLib.shadowmap, 
     { 
      emissive: { 
       type: "c", 
       value: new THREE.Color(0x000000) 
      }, 
      specular: { 
       type: "c", 
       value: new THREE.Color(0x111111) 
      }, 
      shininess: { 
       type: "f", 
       value: 30 
      }, 
      envMap: { 
       type: "t", 
       value: cubeCamera.renderTarget 
      } 
     } 
    ]), 
    vertexShader: require("../../shaders/phong.vert.glsl"), 
    fragmentShader: require("../../shaders/phong.frag.glsl"), 
    blending: THREE.AdditiveBlending, 
    depthWrite: false, 
    transparent: true, 
    opacity: 1, 
    lights: true 
}); 

sphereMaterial.envMap = true; 

編輯:

JSFIDDLE example

+0

難道這與[MeshPhongMaterial](https://github.com/mrdoob/three.js/blob/master/src/materials/MeshPhongMaterial.js)在設置很多參數時有什麼關係實例化?也許'this.reflectivity = 1;'。只是我的第一個想法。 – 2pha

+0

不,envMap仍然翻轉horizo​​ntaly ... – Jordan

+0

我添加了一個JSFiddle – Jordan

回答

2

爲了得到反映你後,設置

sphereShaderMaterial.uniforms.flipEnvMap.value = 1; 

我不知道當這實際上被設置在MeshPhongMaterial上時,我懷疑它在WebGLRenderer中的某處進行一些檢查並設置它。 WebGLRenderer對不同類型的材料做了很多事情,這使得它們難以輕鬆擴展。

+0

這是工作!非常感謝您的幫助! 這是工作版本的jsfiddle:https://jsfiddle.net/hndth2jy/4/ – Jordan