2015-07-12 2 views
1

Итак, я визуализирую сцену текстуры, а затем мне нужно обработать текстуру в js и либо изменить содержимое, либо создать новую текстуру из массива значений.

Похоже, мне нужно получить контекст WebGL и интерфейс напрямую с помощью WebGL для этого. Кто-нибудь знает лучший способ сделать это?Как получить содержимое текстуры WebGLRenderTarget

+0

Это поможет, если вы добавили некоторые из ваш код. – Blubberguy22

+0

Что вы подразумеваете под обработкой текстуры/изменения содержимого/создания новой текстуры из массива? Я предполагаю, что вам нужно rendertarget + фрагмент shader – Atrahasis

ответ

2

Я в конечном итоге просто получить контекст 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)

+1

Вместо этого вы можете использовать метод 'WebGLRenderer.readRenderTargetPixels (renderTarget, x, y, width, height, buffer)'. – WestLangley

+0

, используя любой метод, приводит к массиву с сильным смещением к 0 или 255. Не так много между ними. Я ожидаю много разных поплавков. Любая идея, почему это не поплавки, которые я ожидаю? Я даже добавил {premultipliedAlpha: false} к моему Renderer – Jared

+0

пикселей определены как наборы из 4 байтов. Для значений R, G, B и A. если вы хотите поплавки, вам нужно будет сопоставить каждую запись в этом массиве на 255. Вероятно, лучше всего сделать это с помощью функции обработки, а не сразу отображать массив. –

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