Я использую программу, доступную на GitHub (здесь), для преобразования равнопрямоугольного изображения (360 -степенные изображения) в вид в перспективе (окно просмотра) с использованием OpenGL. Для этого используется подход трассировки лучей, чтобы найти пересечение точек фрагментов на единичной сфере, а позже эта информация будет использоваться для выборки необходимых пикселей из равнопрямоугольных изображений и проецирования их на вид в перспективе. Все работает нормально, но теперь вместе с результатом проекции мне нужно, чтобы программа вернула мне также изображение маски (типа байт без знака и того же размера, что и равнопрямоугольное изображение), которое представляет пиксели, выбранные из равнопрямоугольных изображений.
Как я могу изменить фрагментный шейдер, чтобы он возвращал мне эту беззнаковую байтовую маску (0 представляет собой не-выборки, а 255 представляет выборочные пиксели) в то же время, когда он отображает представление в буфере кадра?
Чтобы быть более конкретным, мой текущий фрагментный шейдер выглядит следующим образом:
const float pi = 3.141592653589793;
varying vec3 planePoints;
uniform sampler2D tex;
void main()
{
vec2 equirectangularTexturePos;
vec3 spherepos = normalize(planePoints);
equirectangularTexturePos.x = (atan(spherepos.y, -spherepos.x)+pi)/(2.0*pi);
equirectangularTexturePos.y = acos(spherepos.z)/(pi);
gl_FragColor = texture2D(tex, equirectangularTexturePos);
}
и я хочу, чтобы к моему фрагментному шейдеру было добавлено что-то похожее на следующее:
texture2D(mask, equirectangularTexturePos) = 255;
gl_FragColor = texture2D(...
. Вы имеете в виду, что вам нужны пиксели, которые не генерируются в FS? т. е. пиксели в цвете фона, которые остаются неизменными? - person Ripi2   schedule 01.11.2018