У меня есть вопрос использования webGL.WebGL - рендеринг с двумя проходами
В последнее время мне пришлось визуализировать в режиме реального времени пост-обработанное изображение из заданной геометрии.
Мой навязчивого был:
- геометрия проецируются на экране с помощью вершинного шейдера
- первого фрагмента шейдер используется для отображения этой геометрии внеэкранного
- второго фрагмент шейдера после процесса этот внеэкранное изображение и отображение результата на холсте.
Как я реализовал это:
Я написал первый набор из двух шейдеров для закадрового рендеринга. Это помогает мне нарисовать геометрию текстуры, используя фреймбуфер.
Для второй части я создал вторую программу glsl. Здесь вершинный шейдер используется для проецирования прямоугольника, который охватывает весь экран. Фрагмент-шейдер выбирает соответствующий пиксель из внеэкранной текстуры с помощью sample2D и выполняет все свои последующие операции.
Это звучит странно для меня, для двоих думает:
- Для того, чтобы быть «отображаемый», закадровый текстура должна быть создана с размером двойки, и, таким образом, может быть значительно больше, чем сам холст.
- Использование второго вершинного шейдера кажется излишним. Можно ли пропустить этот шаг и напрямую перейти ко второму шейдеру фрагмента, чтобы нарисовать внеэкранную текстуру на холсте?
Итак, большой вопрос: какой правильный способ достичь этого? Что я делаю правильно, и что я делаю неправильно?
Спасибо за совет :)
> создание и оказание NPOT (Бесконтактная мощность двух) текстур с линейными или БЛИЖАЙШИХ фильтрами абсолютно нормально Это странно ... Если удалить 'gl.texParameteri (gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, гл. ЛИНЕЙНАЯ); gl.texParameteri (gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR); 'или если я не использую текстуру POT, я получил эту ошибку: ' [.Offscreen-For-WebGL-000001EA50628900] RENDER ПРЕДУПРЕЖДЕНИЕ: текстура, связанная с блоком текстуры 0, не является рендерируемой.Это может быть не-power-of-2 и иметь несовместимую фильтрацию текстур Что случилось? – paulinodjm
Когда вы не устанавливаете фильтр мини-фильтрации, по умолчанию он имеет значение «NEAREST_MIPMAP_LINEAR», поэтому для него требуется сопоставление mip. Возможно, ваши режимы обертывания отключены, текстуры NPOT (в WebGL 1) не поддерживают упаковку «REPEAT» или «MIRROR», а только «CLAMP_TO_EDGE». –
Действительно, я вручную задал параметры 'TEXTURE_WRAP_ *' 'CLAMP_TO_EDGE', и теперь он работает с текстурами NPOT. Итак, для второй части я должен использовать вторую сетку для проецирования текстуры на экран. Разве это не слишком много? – paulinodjm