Отправка данных из шейдера OpenGL в память процессора - PullRequest
0 голосов
/ 21 января 2019

Я выделяю каждый пиксель на моих трехмерных объектах красным цветом, если скалярное произведение моей нормали треугольника сетки с вектором (0, 0, -1) больше 0.73. Это означает, что если у моего треугольника сетки наклон больше определенного значения:

Teapot highlighted

Я использую фрагмент / пиксельный шейдер так:

#define FP highp

varying FP vec3 worldNormal; // comes from vertex shader

void main()
{
    vec3 n = normalize(worldNormal);
    vec3 z = vec3(0.0, 0.0, -1.0); // Normalized already
    float zDotN = dot(z, n); // Dot-product of "n" and "z"

    if ( zDotN > 0.73 ) {
        vec3 oc = vec3(1.0, 1.0-zDotN, 1.0-zDotN); // Color: shades of red!
        gl_FragColor = vec4(oc, 1.0);
    } else {
        gl_FragColor = vec4( /* Compute color according to Phong material */ );
    }

}

Мне нужно быть совместимым со старыми версиями OpenGL и OpenGL ES 2.0 для встроенных устройств.


Моя проблема: мне нужно иметь доступ к координатам вершин (треугольников сетки) выделенных областей из моего кода C ++. Одним из вариантов может быть использование SSBO , но они недоступны для более старых версий OpenGL. Кто-нибудь может представить подход или обходной путь?

...