2013-11-02 1 views
0

В OpenGL 1.x вы можете просто прикрепить текстуру к квадрату вершины, чтобы отобразить изображение, используя параметр линейной лупы, который вы можете растянуть или свести к минимуму текстуру размер sidderent в пикселях без «просмотра», получая «пикселированный».Android: реализация линейной лупы в opengl es2.0

В OpenGL es 2.0 существует другой подход для рендеринга: использование вершинного и фрагментарного шейдера. так просто делают текстуру (изображение) на экране один должен написать, что он собственный фрагмент шейдеров для него - что-то вроде:

uniform sampler2D texture; 
varying vec2 point; // coming from the vertex 

void main() { 
    gl_fragColor(texture2D(texture, point)); 
} 

проблема здесь заключается в том, что тип лупой, что происходит это БЛИЖАЙШЕЕ вид , он принимает значение ближайшего пикселя, в котором указывается переменная «точка».

Мне нужна линейная лупа.

Мой вопрос: вот как я могу реализовать такую ​​вещь с точки зрения кода? или я делаю что-то неправильно с самого начала?

нет предустановок фрагментарных шейдеров, которые можно использовать для этого типа вещей вообще.

ответ

0

Для этого нет пресетов в шейдере фрагмента, поскольку он использует то же состояние, что и конвейер фиксированной функции. Форма sampler2D является интерфейсом к текстурному блоку в программируемом конвейере, когда вы производите текстуру, привязанную к текстурному блоку в ES 2.0, состояние переноса, режим фильтра и т. Д. Все взяты из объекта текстуры, который в настоящее время связан. Вы устанавливаете эти состояния так же, как и в ES 1.0. Вы правы, что вы не можете изменить их в фрагменте или вершинном шейдере, но вам не нужно просто связывать объект текстуры с соответствующими состояниями.

Desktop GL (3.3/4.0 +) определяет что-то, называемое объектом сэмплера, которое отделяет режим обёртывания и фильтрует его от фактического объекта текстуры. Это, честно говоря, способ, которым он должен был работать все время, имея объект текстуры, определяющий как хранилище данных, так и состояние сэмплера, является расточительным. К сожалению, этого не существует в OpenGL ES 2.0, поэтому просто помните, что упомянутое вами состояние фильтра привязано к объектам текстуры и не может программироваться в шейдере.

Смежные вопросы