代码之家  ›  专栏  ›  技术社区  ›  Megidd

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

  •  1
  • Megidd  · 技术社区  · 7 年前

    我用红色高亮显示3D对象上的每个像素,如果网格三角形的点积与向量法向 (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 */ );
        }
    
    }
    

    ES 2.0版 对于嵌入式设备。


    我的问题是:我需要从我的C++代码中获得高亮区域的顶点坐标(网格三角形)。一种选择可能是使用 SSBO 但他们是 not available 对于旧版本的OpenGL。有人能介绍一种方法或解决方法吗?

    0 回复  |  直到 7 年前