1

webgl の球体マップ テクスチャリングに問題があります。

私のテクスチャ:

ここに画像の説明を入力

次に、球体をテクスチャリングします。球体がカメラの前にあれば、すべて問題ありません。 ここに画像の説明を入力

球は単位球 (r = 1) で、経度と緯度で定義されます。

しかし、球を x 方向 -2.5 に (カメラを回転させずに) 平行移動すると、いくつかのアーティファクトが得られます。 ここに画像の説明を入力

この画像はミップマッピングなしです。次の画像はミップマッピングを使用したものです。

ここに画像の説明を入力

頂点と法線は問題ないようです。

頂点シェーダー:

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で作業しています。

4

1 に答える 1