14

WebGLTexture オブジェクトがあります。そのテクスチャのピクセルを取得するにはどうすればよいですか (WebGL の readPixels に似ていますが、テクスチャの場合)。

私が持っている 1 つのアイデアは、キャンバスと WebGL コンテキストを preserveDrawingBuffer=true で作成し、このキャンバスにテクスチャをレンダリングして 2D フラットを表示し、readPixels を使用することです。このアプローチは合理的ですか?誰かがこれのためのサンプルコードを持っていますか?

4

1 に答える 1

20

テクスチャをフレーム バッファにアタッチしてから、フレーム バッファで readPixels を呼び出すことができます。

初期時

// make a framebuffer
fb = gl.createFramebuffer();

// make this the current frame buffer
gl.bindFramebuffer(gl.FRAMEBUFFER, fb);

// attach the texture to the framebuffer.
gl.framebufferTexture2D(
    gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0,
    gl.TEXTURE_2D, texture, 0);

// check if you can read from this type of texture.
bool canRead = (gl.checkFramebufferStatus(gl.FRAMEBUFFER) == gl.FRAMEBUFFER_COMPLETE);

// Unbind the framebuffer
gl.bindFramebuffer(gl.FRAMEBUFFER, null);

読み取り時に

if (canRead) {
   // bind the framebuffer
   gl.bindFramebuffer(gl.FRAMEBUFFER, fb);

   // read the pixels
   gl.readPixels(......);

   // Unbind the framebuffer
   gl.bindFramebuffer(gl.FRAMEBUFFER, null);
}

format = gl.RGBA のテクスチャの場合、type = gl.UNSIGNED_BYTE canRead は常に true にする必要があります。他の形式と型の場合、canRead は false になる可能性があります。

于 2012-11-30T06:46:32.797 に答える