我正在使用PNaCl ffmpeg打开,读取和解码RTSP流。我现在有原始视频帧,我需要将其转移到WebGl以在画布上呈现。如何使用WebGl在画布上呈现二进制数据?
如何在画布上渲染二进制数据?
我正在运行下面的代码:我认为我应该在运行此代码后得到一个灰色的画布,因为我将RGBA值(120,120,120,1)传递给合成数据。
var canvas = document.getElementById('canvas');
var gl = initWebGL(canvas); //function initializes webgl
initViewport(gl, canvas); //initializes view port
console.log('viewport initialized');
var data = [];
for (var i = 0 ; i < 256; i++){
data.push(120,120,120,1.0);
}
console.log(data);
var pixels = new Uint8Array(data); // 16x16 RGBA image
var texture = gl.createTexture();
gl.bindTexture(gl.TEXTURE_2D, texture);
gl.texImage2D(
gl.TEXTURE_2D, // target
0, // mip level
gl.RGBA, // internal format
16, 16, // width and height
0, // border
gl.RGBA, //format
gl.UNSIGNED_BYTE, // type
pixels // texture data
);
console.log('pixels');
console.log(pixels);
<canvas id="canvas"></canvas>
我应该得到一个灰色的16×16盒被代表在画布上,但我没有得到这一点。我需要采取哪些额外步骤才能在画布上正确呈现2D位图?
PS。我从this article获得帮助。
的可能是一些帮助:https://developer.mozilla.org/en-US/docs/Web/API/WebGL_API/Tutorial/Animating_textures_in_WebGL – Kaiido
谢谢你,但由于我使用的是RTSP流,它不能在视频标签中播放,我使用PNaCl ffmpeg获取流,因此从视频元素获取数据将不起作用。 –
你不应该做“gl.bufferData(gl.ARRAY_BUFFER,像素);”为纹理数据。纹理数据通过teximage2d传递。同时发布完整的代码和浏览器的控制台输出。 – prabindh