2016-04-02 85 views
1

我在webgl中使用球體貼圖紋理時遇到了一些問題。球形映射文物

我的質地:

enter image description here

現在我組織化的球體。如果球體位於攝像機前面,則一切正常: enter image description here

球體是單位球體(r = 1),用經度和緯度定義。

,但我得到了一些文物,如果我翻譯在X方向-2.5球體(不旋轉攝像頭): enter image description here

此圖片是沒有紋理映射。而下面的圖像是使用紋理映射:

enter image description here

頂點和法似乎是確定。

頂點着色器:

precision highp float; 

uniform mat4 mvMatrix; // Matrix zum Transformieren des Verex vom model-space in den view-space 
uniform mat4 mvpMatrix; // Matrix zum Transformieren des Vertex vom model-space in den clip-space 
uniform mat3 mvNMatrix; // Matrix zum Transformieren der Vertex-Normale vom model-space in den view-space 

attribute vec4 mV; // Vertex im model-space 
attribute vec3 mVN; // Vertex-Normale im model-space 

varying vec2 vN; 

void main(void) 
{ 
    vec3 e = normalize(vec3(mvMatrix * mV)); 
    vec3 n = normalize(mvNMatrix * mVN); 

    vec3 r = reflect(e, n);    
    //float d = dot(n, e); 
    //vec3 r = e - 2.0 * d * n; 

    float m = 2.0 * sqrt( 
     pow(r.x, 2.0) + 
     pow(r.y, 2.0) + 
     pow(r.z + 1.0, 2.0) 
    ); 
    vN.s = r.x/m + 0.5; 
    vN.t = r.y/m + 0.5; 

    gl_Position = mvpMatrix * mV; 
} 

和片段着色器:

precision highp float; 

uniform sampler2D uSampler; 
varying vec2 vN; 

void main(void) 
{ 
    vec3 base = texture2D(uSampler, vN).rgb; 
    gl_FragColor = vec4(base, 1.0); 
} 

有誰知道,爲什麼我得到這些文物?我正在使用Windows和Firefox。

+0

如果將對象略微移動到一邊會發生什麼?或者如果你順利地動畫並行運動? –

+0

x-translation沒有問題-1。但我得到-1.5的文物。 – m1au

回答

0

你的表面法線是向後的,或者你總是挑選錯誤的一面。你已經做了一些類似azimuthal projection的事情,但是你正在渲染球體的內部而不是外部,所以你會看到超過180度,包括前後分離的'橋'。另見:map projections,這表明方位映射到處都是保形的,但至少用真正的視線排除了真正的赤道。