2017-08-26 1 views
0

いくつかの条件によっては、画像をそのまま通過するか、タイルテクスチャを表示するシェーダを作成しようとしています。それは多かれ少なかれ作品が、私はタイル張りの質感はかなり右に見えるていないことに気づいたので、それが唯一のタイル画像を表示しますので、私はテストのためのシェーダを単純化:シェーダでの画質の低下(ぼやけ)

precision highp float; 

uniform sampler2D uSampler; 
varying vec2 vTextureCoord; 
varying vec4 vColor; 
varying vec2 vFilterCoord; 
uniform vec2 dimensions; 
uniform vec4 filterArea; 

uniform sampler2D selector; 
uniform vec2 selectorSize; 

uniform sampler2D alternate; 
uniform vec2 alternateSize; 

vec2 mapCoord(vec2 coord) 
{ 
    coord *= filterArea.xy; 
    coord += filterArea.zw; 

    return coord; 
} 

vec2 unmapCoord(vec2 coord) 
{ 
    coord -= filterArea.zw; 
    coord /= filterArea.xy; 

    return coord; 
} 

void main() 
{ 
    vec2 coord = vTextureCoord; 
     coord = mapCoord(coord); 

    // sample the alternate: 
    vec2 av = mod(coord, alternateSize)/(alternateSize - 1.0); 
    vec4 alt = texture2D(alternate, av); 

    gl_FragColor = alt ; 
} 

私は何が起こっているのか、非常にわかりませんに。元の画像は100x100で、繰り返し領域は100x100です。パターンは同じように見えますが、シェーダでは少しぼやけています(下のスクリーンショットを参照)。これは網膜と関係がありますか? (私は網膜をセットアップするために何か特別なことをしていない)ミップマップ?他に何か?

UPDATE: @danieltranによって示唆されるように、私は(PIXIでは、これはテクスチャコンストラクタにPixi.SCALE_MODES.NEARESTを通過させることによって行われる)GL_NEARESTにテクスチャを設定しようとしました。それで、違いはありませんでしたので、私はちょうどテクスチャからスプライトを作成して表示しようとしましたが、同じ問題があるので、これは網膜に関連するものかpixi特有のものだと思います。

オリジナルテクスチャは、この画像から取得されます:それは解決します

enter image description here

+1

ピクセル境界で描画していますか?ピクセルを1/2に描画すると、ピクセル間でサンプリングされます。 – gman

+0

提案していただきありがとうございます。私はxとyの座標を0.5ピクセルずらして骨を付けずに試してみました:( –

答えて

2

変更GL_NEARESTにテクスチャフィルタ:

enter image description here

はここで、シェーダの出力は次のようになります。問題。

具体的には、GPUが1つのテクセルから色を取り出すのではなく、近くのテクセルを使って色を計算するのではなく、画像がぼやけて見える場合があります。

+1

あなたの提案に感謝しましたあなたの提案に感謝します –

+1

問題が網膜ディスプレイに関連する場合は、https:// www .khronos.org/webgl/wiki/HandlingHighDPI –

+1

これは単純な網膜の問題であることが判明しました。私が使用していたコードの奇妙さのためにリンクした指示を二重にする必要がありました。 –

関連する問題