Как да получите достъп до съдържанието на текстурата на WebGLRenderTarget

Така че визуализирам сцена към текстура и след това трябва да обработя текстурата в js и или да променя съдържанието, или да направя нова текстура от масив от стойности.

Изглежда, че трябва да получа контекста на WebGL и да се свържете директно с WebGL, за да постигнете това. Някой знае ли най-добрия начин да направите това?


person zumba man    schedule 12.07.2015    source източник
comment
Ще помогне, ако добавите част от вашия код.   -  person Blubberguy22    schedule 12.07.2015
comment
какво имаш предвид под обработка на текстурата/промяна на съдържанието/направяне на нова текстура от масив? Предполагам, че това, от което се нуждаете, е rendertarget + фрагментен шейдър   -  person Atrahasis    schedule 12.07.2015


Отговори (1)


В крайна сметка просто получих контекста на webGL от рендера и извиках gl.readPixels()

var gl = renderer.getContext();
var framebuffer = renderTarget.__webglFramebuffer;
gl.bindFramebuffer(gl.FRAMEBUFFER, framebuffer);
var data = new Uint8Array(renderTarget.width * renderTarget.height * 4);
gl.readPixels(0,0,renderTarget.width,renderTarget.heigh,gl.RGBA,gl.UNSIGNED_BYTE,data);

(renderTarget е екземпляр на THREE.WebGLRenderTarget)

person zumba man    schedule 12.07.2015
comment
Вместо това можете да използвате метода WebGLRenderer.readRenderTargetPixels( renderTarget, x, y, width, height, buffer ). - person WestLangley; 13.07.2015
comment
използването на двата метода води до масив със силно отклонение към 0 или 255. Няма много между тях. Очаквам много различни плувки. Някаква идея защо това не са плувките, които очаквам? Дори добавих { premultipliedAlpha : false } към моя Renderer - person Jared; 11.10.2015
comment
пикселите се дефинират като комплекти от 4 байта. За R, G, B и A стойности. ако искате плаващи числа, ще трябва да картографирате всеки запис в този масив с 255. Вероятно е най-добре да направите това в линия с функцията за обработка, вместо да картографирате масива наведнъж. - person Patrick Gunderson; 02.11.2016