我知道有很多相关资源,但是没有一个能够帮助我。
其中包括:webgl readpixels is always returning 0,0,0,0,
还有这个:https://dev59.com/PKPia4cB1Zd3GeqPsxTH\ 以及这个:Read pixels from a WebGL texture , 但都没有成功或有用。 目标:使用WebGL着色器渲染离屏画布,然后将其作为纹理在单独的WebGL着色器中使用。 备注:
这两种方法都会导致
如果有人对这个问题有经验,帮助将会非常感激。谢谢!
程序的直接链接是: https://www.khanacademy.org/cs/-/6289631977619456
其中包括:webgl readpixels is always returning 0,0,0,0,
还有这个:https://dev59.com/PKPia4cB1Zd3GeqPsxTH\ 以及这个:Read pixels from a WebGL texture , 但都没有成功或有用。 目标:使用WebGL着色器渲染离屏画布,然后将其作为纹理在单独的WebGL着色器中使用。 备注:
- 对于这些WebGL着色器,我正在使用通用顶点着色器用于像素着色器,具体来说就是光线追踪器/光线行走器。 这是:
attribute vec2 a_position; void main() { gl_Position = vec4(a_position.xy, 0.0, 1.0); }
。这个顶点着色器输入了覆盖整个屏幕的两个三角形,因此基本上片段着色器处理所有工作。
- 使用WebGL的
gl.readPixels
函数
var capturedImageData = new Float32Array(screenWidth * screenHeight * 4);
gl.readPixels(0, 0, screenWidth, screenHeight, gl.RGBA, gl.FLOAT, capturedImageData);
- 使用另一个canvas与
getContext('2d')
一起使用
var offscreenCanvas = document.createElement("canvas");
offscreenCanvas.width = screenWidth;
offscreenCanvas.height = screenHeight;
var ctx = offscreenCanvas.getContext('2d');
ctx.drawImage(glCanvas, 0, 0);
var capturedImageData = ctx.getImageData(0, 0, screenWidth, screenHeight);
这两种方法都会导致
capturedImageData
数组被填充为0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, . . .
,这明显是不正确的。如果有人对这个问题有经验,帮助将会非常感激。谢谢!
程序的直接链接是: https://www.khanacademy.org/cs/-/6289631977619456