opengl - Problems using glReadPixels with GLSL -


i`m trying render particles , save scene bmp file, here code

// vertex shader  const char *vertexshader = stringify( uniform float pointradius;  // point size in world space uniform float pointscale;   // scale calculate size in pixels void main() { // calculate window-space point size vec3 poseye = vec3(gl_modelviewmatrix * vec4(gl_vertex.xyz, 1.0)); float dist = length(poseye); gl_pointsize = pointradius * (pointscale / dist);  gl_texcoord[0] = gl_multitexcoord0; gl_position = gl_modelviewprojectionmatrix * vec4(gl_vertex.xyz, 1.0);  gl_frontcolor = gl_color; } );  // pixel shader rendering points shaded spheres const char *spherepixelshader = stringify( void main() { const vec3 lightdir = vec3(0.577, 0.577, 0.577);  // calculate normal texture coordinates vec3 n ; n.xy = gl_texcoord[0].xy*vec2(2.0, -2.0) + vec2(-1.0, 1.0); float mag = dot(n.xy, n.xy);  if (mag > 1.0) discard;   // kill pixels outside circle  n.z = sqrt(1.0 - mag);  // calculate lighting float diffuse = max(0.0, dot(lightdir, n));  gl_fragcolor = gl_color *diffuse; 

}

here rendering code

position of particles stored in vbo target_point_buffer corresponding color data

void display() { //pointsprite glenable(gl_point_sprite); gltexenvi(gl_point_sprite, gl_coord_replace, gl_true); glenable(gl_vertex_program_point_size_nv); gldepthmask(gl_true); glenable(gl_depth_test); //attach shader gluseprogram(program); gluniform1f(glgetuniformlocation(program, "pointscale"), winheight / tanf(fov*0.5f*(float)m_pi / 180.0f)); gluniform1f(glgetuniformlocation(program, "pointradius"),radius[0]*scale); glclear(gl_color_buffer_bit | gl_depth_buffer_bit);  //use vbo glbindbuffer(gl_array_buffer, vbo); glvertexpointer(3, gl_double, 0, 0); glenableclientstate(gl_vertex_array);  //color buffer glbindbuffer(gl_array_buffer, color_vbo); glcolorpointer(3, gl_float, 0, 0); glenableclientstate(gl_color_array); drawsomething();  } //save scene bmp file void save_as_bmp(char *filename) { glbyte pbits[imagesize]; glint iviewport[4]; gluint lastbuffer; glgetintegerv(gl_viewport,iviewport); glgetintegerv(gl_read_buffer,&lastbuffer); glreadpixels(iviewport[0], iviewport[1], iviewport[2], iviewport[3], gl_bgr, gl_unsigned_byte, pbits); writebmp(filename,pbits);  } 

i`ve got expected scene this:

expect

however,when tried save scene bmp file,the result not expected:

result

i suppose might wrong gl_texcoord in shader, can`t figure out. can help?

set gl_pack_alignment 1 before glreadpixels() call if you're going use three-component format gl_bgr gl_unsigned_byte.


Comments

Popular posts from this blog

Command prompt result in label. Python 2.7 -

javascript - How do I use URL parameters to change link href on page? -

amazon web services - AWS Route53 Trying To Get Site To Resolve To www -