2017-01-26 2 views
0

Я рендеринг следующей текстуры на WebGLRenderTarget в ThreeJS с помощью Ashima's GLSL noise:Три JS: Перемещение вершин через текстуры, ограниченные 256 значениями?

enter image description here

Я тогда чтение RGB каналов текстуры, чтобы смещать вершины несколько сеток в XYZ осей со следующим кодом GLSL :

vec4 fluctuation = texture2D(fluxTexture, uv); 
curPos.y += (fluctuation.r - 0.5) * 40.0; 
curPos.x += (fluctuation.g - 0.5) * 20.0; 
curPos.z += (fluctuation.b - 0.5) * 20.0; 

Однако, поскольку движение является очень тонким, я заметил, что вершины перепрыгнуть несколько пикселей для каждого шага при изменении значения RGB. Я приписываю этот артефакт каждому ограничению цвета до 256 значений за штуку. Есть ли способ изменить глубину бит текстуры до 16 или 32 бит, чтобы я мог получить больше точности из каналов RGB?

+0

Возможно, вы внесете свой код в отношении создания цели webgl. Вы также можете кодировать другую точность в 8-битной текстуре или нескольких 8-битных текстурах. У трех есть метод pack/unpack в шейдерах. – pailhead

ответ

2

Вы заинтересованы в типе собственности цели визуализации:

https://threejs.org/docs/?q=webgl#Reference/Constants/Textures

Вы можете попробовать THREE.FloatType.

// Test for iOS devices, because they don't support THREE.FloatType 
var dataType = (/(iPad|iPhone|iPod)/g.test(navigator.userAgent)) ? THREE.HalfFloatType : THREE.FloatType; 

this.renderTarget = new THREE.WebGLRenderTarget(50, 50, { 
    format: THREE.RGBAFormat, 
    type: dataType, 
}); 
+0

Спасибо! Я в конечном итоге наткнулся на этот ответ, но не полностью согласился на это, потому что THREE.FloatType по какой-то причине не работает на iOS, и в документе говорится, что разрешены только 'UnsignedByteType',' UnsignedShort4444Type' или 'THREE.UnsignedShort5551Type' , Вы знаете, почему это так? Это проблема с документацией? – Marquizzo

+0

Странно, я не уверен, что мог бы поклясться, что у меня это работало на iOS. Вы можете попробовать что-то вроде этого, чтобы закодировать его на 8 бит: https://github.com/mrdoob/three.js/blob/acdda10d5896aa10abdf33e971951dbf7bd8f074/src/renderers/shaders/ShaderChunk/packing.glsl#L17 – pailhead

Смежные вопросы