Получите альфа-плавание от vec4 на OpenGL ES Shading Language - PullRequest
0 голосов
/ 23 декабря 2010

Это может звучать глупо, но я не совсем уверен, как получить сам компонент "W" из введенного vec4. Я читал в спецификации, что вы не можете получить отдельные компоненты, поэтому, возможно, неправильно даже спрашивать.

Спасибо!

Ответы [ 2 ]

4 голосов
/ 23 декабря 2010

Я думаю, что вы, возможно, неправильно прочитали спецификацию - вполне допустимо читать отдельные компоненты.GLSL даже допускает неявные перестановки и комбинации исходных компонентов, например

lowp vec4 someVector;

// someVector.xy is a lowp vec2 containing the first two scalars from someVector
// someVector.zwx is a lowp vec3 containing the third, fourth and first scalars in that order
// someVector.w is a lowp float containing the fourth scalar

Например, я использовал фрагментный шейдер:

void main()
{
    lowp vec4 srcPixel = texture2D(tex2D, texCoordVarying);
    lowp vec4 yuvPixel = rgbToYuv * srcPixel;

    yuvPixel.r *= 3.0;

    gl_FragColor = yuvToRgb * yuvPixel;
}

С подходящими матрицами и вариациями для усиленияЯркость текстуры в три раза.

1 голос
/ 23 декабря 2010

Я предполагаю, что вы можете рассчитать скалярное произведение. Так что просто умножьте на другой vec4, содержащий (0,0,0,1).

РЕДАКТИРОВАТЬ: однако, вы уверены, что не можете просто использовать .w? Все документы и примеры, которые я нашел, говорят, что вы можете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...