2013-08-02 3 views
0

Я следил за this post, надеясь добавить свой собственный поворот на вещи. Я заметил, что пример here использует очень старую версию Three.JS (49). Когда я изменил исходный файл на более современную версию, текстура больше не появляется. См. DemoТекстура не отображается при обновлении версии Three.js

Я проводил много времени, пытаясь выяснить, какие изъяны произошли, и я сузил свой поиск по этим линиям.

// material 

uniforms = { 
       sunDirection: { type: "v3", value: new THREE.Vector3(0,1,0) }, 
      dayTexture: { type: "t", value: 0, texture: THREE.ImageUtils.loadTexture("/images/world2.png") }, 
       nightTexture: { type: "t", value: 1, texture: THREE.ImageUtils.loadTexture("/images/world5.png") } 
      }; 

      uniforms.dayTexture.texture.wrapS = uniforms.dayTexture.texture.wrapT = THREE.Repeat; 
      uniforms.nightTexture.texture.wrapS = uniforms.nightTexture.texture.wrapT = THREE.Repeat; 

    material = new THREE.ShaderMaterial({ 

       uniforms: uniforms, 
       vertexShader: document.getElementById('vertexShader').textContent, 
       fragmentShader: document.getElementById('fragmentShader').textContent 

       }); 

Более различа материал, который, вероятно, что-то делать с моей проблемой

<script id="fragmentShader" type="x-shader/x-fragment"> 

     uniform sampler2D dayTexture; 
     uniform sampler2D nightTexture; 

     uniform vec3 sunDirection; 

     varying vec2 vUv; 
     varying vec3 vNormal; 

     void main(void) { 
      vec3 dayColor = texture2D(dayTexture, vUv).rgb; 
      vec3 nightColor = texture2D(nightTexture, vUv).rgb; 

      // compute cosine sun to normal so -1 is away from sun and +1 is toward sun. 
      float cosineAngleSunToNormal = dot(normalize(vNormal), sunDirection); 

      // sharpen the edge beween the transition 
      cosineAngleSunToNormal = clamp(cosineAngleSunToNormal * 10.0, -1.0, 1.0); 

      // convert to 0 to 1 for mixing 
      float mixAmount = cosineAngleSunToNormal * 0.5 + 0.5; 

      // Select day or night texture based on mix. 
      vec3 color = mix(nightColor, dayColor, mixAmount); 

      gl_FragColor = vec4(color, 1.0); 
      //gl_FragColor = vec4(mixAmount, mixAmount, mixAmount, 1.0); 
     } 
    </script> 

    <script id="vertexShader" type="x-shader/x-vertex"> 

     varying vec2 vUv; 
     varying vec3 vNormal; 

     void main() 
     { 
      vUv = uv; 
      vec4 mvPosition = modelViewMatrix * vec4(position, 1.0); 
      vNormal = normalMatrix * normal; 
      gl_Position = projectionMatrix * mvPosition; 
     } 

    </script> 

Я проверил миграции DOCX here Существует не так много на «униформу» или «шейдер» для этого факт.

ответ

0

В Migration Wiki вы ссылки, он определяет новый шаблон для назначения текстуры униформы от R.51:

{ type: "t", value: 0, texture: map } => { type: "t", value: map } 

Так в вас случае, было бы

dayTexture: { type: "t", value: THREE.ImageUtils.loadTexture("/images/world2.png") }, 
nightTexture: { type: "t", value: THREE.ImageUtils.loadTexture("/images/world5.png") } 

три. js r.59

+0

Я сделал это изменение раньше (забыл упомянуть в оригинальной записи), и весь код не работает. –

+0

Я внес изменения в свой код, и текстуры выглядели отлично. Это ответ на ваш оригинальный вопрос. У вас могут быть другие проблемы. – WestLangley

+0

У вас есть скрипка кода? –

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