2015-04-20 38 views
10

Bir düzlem üzerinde bir yer değiştirme haritası var 512px * 512px (100x100 segmentleri), deplasman haritasının kaydırılması için görüntü kayıyor, yüksekliklerin düzgün bir şekilde uyuşmadığı pozisyona yapışıyordu. mix() işlevinde ve normalleri normalde zamana göre konumlandırmak için pürüzsüz adım(), ancak bunu uygulamakta zorlanıyorum. vertex ve piksel ileGLSL uv ofset gelen webgl lerp normals

Three.js 71 Kullanma
uniform sampler2D heightText; //texture greyscale 512x512 
    uniform float displace;   
    uniform float time; 
    uniform float speed; 

    varying vec2 vUV; 
    varying float scaleDisplace; 

    void main() { 
     vUV = uv; 
     vec2 uvOffset = vUV + vec2(0.1, 0.1)* time; // animates offset 
     vec2 uvCo = vUV + vec2(0.0, 0.0); 
     vec2 texSize = vec2(-0.8, 0.8);  // scales image larger 

     vec4 data = texture2D(heightText, uvOffset + fract(uvCo)*texSize.x); 
     scaleDisplace = data.r; 

     //vec3 possy = normal * displace * scaleDisplace; 

     vec3 morphPossy = mix(position, normal *displace , scaleDisplace)* time ; 

     gl_Position = projectionMatrix * modelViewMatrix * vec4(morphPossy, 1.0); 


    } 

:

İllüstrasyon amacı:

uv offset takdir Herhangi bir yardım ... senin bir yükseklik haritası olarak bir doku kullanılarak yana

+0

Hala bu kadar şanssızlık arıyorum, şu anda diğer tam yöntemleri kullanarak arıyorum ama ideal olarak bu yaklaşım ile kalmak istiyorum. – Careen

+1

Lütfen sorunuza reword/detay verin, "deplasman haritasının kaydırmaları, köşelerin yükseklik pozisyonuna yapışmasını bıraktı" ile ne kastettiğiniz hakkında hiçbir fikrim yok. –

+0

@Brendan görsel bir bakış açısı için resim ile güncellendi .. – Careen

cevap

1

, emin olmalısınız:

heightText.magFilter = THREE.LinearFilter; // This is the default value. 

, aldığınız değerler, texel'e texel'i düzleştirir.