2017-02-03 7 views
0

シェーダのインデックスを使用してアクセスしようとしているDataTextureのテクセルに値があります。私はまた、シェーダのインデックスを使用してデータテクスチャ内のテクセルを参照する

vec2 customUV = vec2(mod(aIndex, uTextureDimension)/uTextureDimension, floor(aIndex/uTextureDimension)/uTextureDimension); 
vec4 texelValues = texture2D(tDataTexture, customUV).xyzw; 

:インデックス[0, 1, 2, 3, 4, 5, 6... 62, 63]はデータテクスチャ私は特定のインデックス値を取るためにこの関数を書いたいくつかの研究後8の高さと幅(uTextureDimension)を有しながら、連続しており、対応するテクセルを参照しますこのバージョンでは、その中心点からテクセルを参照しようとしました。また、何のサイコロ:

vec2 perMotifUV = vec2(mod(aIndex, uTextureDimension) * ((1.0/uTextureDimension)/2.0), floor(aIndex/uTextureDimension) * ((1.0/uTextureDimension)/2.0)); 
vec4 texelValues = texture2D(tDataTexture, customUV).xyzw; 

、昨日の午後から、この作業をあちこちでそれを編集し、他のソリューションを探しまわって後、私はまだ期待される結果を得ていないではありませんよ。 Three.jsを使うとき、シェーダは高精度の浮動小数点に設定されていると言わなければなりません - この問題の一部ですか?誰でも私をここで軌道に乗ることができますか?ありがとう!

答えて

0

すべてがフロートであれば最初のものが正しいようです。 NEARESTフィルタモードを使用していますか?技術的にはあなたもハーフテクセルサイズを追加する必要がありすぎオフセット:

vec2 texelSize = 1.0/uTextureDimension; 
vec2 customUV = vec2(mod(aIndex, uTextureDimension)*texelSize, floor(aIndex/uTextureDimension)*texelSize); 
customUV += vec2(0.5*texelSize); 

EDITを - また、あなたのインデックスがフォローアップとして0-63ない0-64

+0

に行く必要があり、必要があるDataTexturesため、このアプローチの作品を高さと幅が異なっています。 2つのテクスチャディメンションと2つの対応するテクセルサイズがあると仮定します。 – gromiczek

関連する問題