Така че визуализирам сцена към текстура и след това трябва да обработя текстурата в js и или да променя съдържанието, или да направя нова текстура от масив от стойности.
Изглежда, че трябва да получа контекста на WebGL и да се свържете директно с WebGL, за да постигнете това. Някой знае ли най-добрия начин да направите това?
Как да получите достъп до съдържанието на текстурата на WebGLRenderTarget
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
Вместо това можете да използвате метода
WebGLRenderer.readRenderTargetPixels( renderTarget, x, y, width, height, buffer )
.
- person WestLangley; 13.07.2015
използването на двата метода води до масив със силно отклонение към 0 или 255. Няма много между тях. Очаквам много различни плувки. Някаква идея защо това не са плувките, които очаквам? Дори добавих { premultipliedAlpha : false } към моя Renderer
- person Jared; 11.10.2015
пикселите се дефинират като комплекти от 4 байта. За R, G, B и A стойности. ако искате плаващи числа, ще трябва да картографирате всеки запис в този масив с 255. Вероятно е най-добре да направите това в линия с функцията за обработка, вместо да картографирате масива наведнъж.
- person Patrick Gunderson; 02.11.2016