我只想将输入点写入顶点着色器中的指定坐标以进行某些gpgpu操作 .

细节:我有5个点,顶点着色器中有一些算法 . 然后我想将points_result [0]写入纹理(渲染到纹理),坐标是(1,0),这样我就可以使用结果纹理中的glReadPixels,(或类似于(0.5,0.5)的第一个point_result ,(1.5,0.5)为第二个point_result . 等) .

Namely, How to mapping gl_position to the coordinate of the rendered texture result?

  • 似乎出了点问题 . 我在这里画4点:(1,3,1)(3,1,2)(2,8,3)(4,3,5)
#version 330
    layout (location = 0) in vec3 inPosition;
    flat out vec4 tofrag; 
    void main()
    {
        vec2 cord = vec2(-1+ (gl_VertexID)*2.0/6, 0);
        gl_Position = vec4(cord, 0, 1.0);
        tofrag = vec4(inPosition.xyz, -1); 

    }

片段着色器,我只输出tofrag .

#version 330
    out vec4 outputColor;
    flat in vec4 tofrag;

    void main()
    {
        outputColor = tofrag;
    }

当我读取窗口大小(6 * 1)像素时,显示结果 .

0: (1.00,1.00,1.00,-1.00)
1: (3.00,2.00,2.00,-1.00)
2: (2.00,3.00,3.00,-1.00)
3: (4.00,5.00,5.00,-1.00)
4: (0.00,0.00,0.00,1.00)
5: (0.00,0.00,0.00,1.00)

看来,这个着色器只能得到(x,z,z)坐标,也许它是插值的原因,但是如何避免呢?