2017-02-03 23 views
0

我在我着色器中使用索引嘗試訪問的DataTexture紋理像素中具有值。索引[0, 1, 2, 3, 4, 5, 6... 62, 63]是連續的,而數據紋理具有的高度和寬度8.(uTextureDimension)一些研究我寫這個函數採取特定索引值之後,並引用相應的紋素:使用着色器中的索引引用數據紋理中的紋理像素

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

我還嘗試使用該版本從中心點引用texel。還沒有骰子:

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); 

編輯 - 你也應該指數走0-63 0-64不

+0

作爲後續,應DataTextures這種方法工作高度和寬度不同。我假設你會有兩個紋理尺寸和兩個相應的紋理尺寸。 – gromiczek

相關問題