2015-07-12 68 views
1

所以我渲染一個場景到紋理,然後我需要在js中處理紋理,並修改其內容或從一個值數組中創建一個新紋理。

看來我需要獲得WebGL上下文和直接與WebGL接口來完成此任務。有沒有人知道這樣做的最佳方式?如何訪問WebGLRenderTarget紋理內容

+0

如果您添加了一些這將有助於你的代碼。 – Blubberguy22

+0

你是什麼意思處理紋理/修改內容/從數組中創建一個新的紋理?我想你需要的是rendertarget +片段着色器 – 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); 

(渲染目標是THREE.WebGLRenderTarget的一個實例)

+1

相反,你可以使用'WebGLRenderer.readRenderTargetPixels(renderTarget,x,y,width,height,buffer)'方法。 – WestLangley

+0

使用任何一種方法都會導致陣列強烈偏向於0或255。我期待着很多不同的花車。任何想法,爲什麼這些不是我期待的花車?我甚至爲我的渲染器添加了{premultipliedAlpha:false} – Jared

+0

像素被定義爲4個字節的集合。對於R,G,B和A值。如果你想要浮點數,你必須將這個數組中的每個條目映射到255個。最好這樣做可以與處理函數內聯,而不是一次映射數組。 –