将数据从OpenGL着色器发送到CPU内存

时间:2019-01-21 12:00:27

标签: c++ opengl-es glsl opengl-es-2.0

如果我的网格三角形法线与向量(0, 0, -1)的点积大于0.73,则我用红色突出显示3D对象上的每个像素。这意味着,如果我的网格三角形的斜率大于某个值:

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版本则使用not available。有人可以介绍一种方法或解决方法吗?

0 个答案:

没有答案