WebGL Framebuffer ClearColor влияет только на (0,0) пиксель

Я пытаюсь использовать WebGL для рендеринга сцены в фреймбуфер и посмотреть на значение цвета указанного пикселя (тот, который нажат). Проблема в том, что когда я пытаюсь получить данные пикселей, используя gl.readPixels, все пиксели, но (0,0) возвращают нулевые значения (0,0,0,0). (0,0) пиксель (верхний левый угол) возвращает ожидаемое, что является четким цветом, используемым для фреймбуфера. Вот основная часть кода, который я использую:

gl.bindFramebuffer( gl.FRAMEBUFFER, fbo );
gl.viewport( 0, 0, canvas.width, canvas.height );

gl.clearColor( 1.0, 1.0, 1.0, 1.0 );
gl.clearDepth( 1.0 );
gl.clear( gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT );

// render code goes here

var pixelData = new **********( 4 );
gl.readPixels( screenPositionX, screenPositionY, 1, 1, gl.RGBA, gl.UNSIGNED_BYTE, pixelData );

gl.bindFramebuffer( gl.FRAMEBUFFER, null );

Если я использую gl.readPixels на визуализированной сцене, я получаю правильные результаты, но не тогда, когда я использую его в framebuffer. Я полагаю, это означает, что я мог бы сделать фреймбуфер, а затем использовать gl.readPixels, но я бы предпочел не делать этого, поскольку фреймбуфер не предназначен для просмотра и вместо этого используется для сбора данных. Любая информация или предложения?

EDIT: Я нашел решение и разместил его ниже.

1 ответ

Я нашел решение, и это одна из тех проклятых ошибок. Пока я добавлял текстуру для прикрепления цвета, текстура, которую я прикреплял, была всего лишь 1x1 пикселей. Это объясняет, почему координата (0,0) была единственной, которая получала точные данные. Все остальные пиксели считались вне диапазона текстуры. Как только я исправил размер текстуры до размера холста, все сработало. Спасибо gman за то, что он указал мне в правильном направлении взглянуть на вложения.

licensed under cc by-sa 3.0 with attribution.