<div dir="ltr">
















<p class="gmail-MsoNormal" style="margin:0in 0in 0.0001pt"><font face="arial, helvetica, sans-serif">Hello, </font></p>

<p class="gmail-MsoNormal" style="margin:0in 0in 0.0001pt"><span><font face="arial, helvetica, sans-serif"> </font></span></p>

<p class="gmail-MsoNormal" style="margin:0in 0in 0.0001pt"><font face="arial, helvetica, sans-serif">I am attempting to create a series of volume rendered images
of my simulation at different time steps so that I can compile them into a
movie. I want to use the maximum intensity fragment shader, which I believe is
only available in the yt interactive volume rendering with OpenGL (I've looked into simply using a maximum intensity projection, but this is only available on-axis). I would like
to be able to take a screenshot of the OpenGL window created when I run the yt
interactive volume rendering, but I'm having difficulty adding this feature to the
volume rendering source code in my local yt directory. Below is the
modification I’ve made to the code as well as a screenshot of the
problem. I have no prior experience with OpenGL.  <span></span></font></p>

<p class="gmail-MsoNormal" style="margin:0in 0in 0.0001pt"><b><font face="arial, helvetica, sans-serif"> </font></b></p>

<p class="gmail-MsoNormal" style="margin:0in 0in 0.0001pt"><b><font face="arial, helvetica, sans-serif">/yt/visualization/volume_rendering/interactive_vr.py<span></span></font></b></p>

<p class="gmail-MsoNormal" style="margin:0in 0in 0.0001pt"><span><font face="arial, helvetica, sans-serif"> </font></span></p>

<p class="gmail-MsoNormal" style="margin:0in 0in 0.0001pt"><font face="arial, helvetica, sans-serif">846     def _retrieve_framebuffer(self): <span></span></font></p>

<p class="gmail-MsoNormal" style="margin:0in 0in 0.0001pt"><font face="arial, helvetica, sans-serif">847                   
ox, oy, width, height = GL. glGetIntegery(GL.GL_VIEWPORT)<span></span></font></p>

<p class="gmail-MsoNormal" style="margin:0in 0in 0.0001pt"><font face="arial, helvetica, sans-serif"><span style="color:black;background:lime">848   +</span><b><span style="color:red;background:lime">  </span></b><span style="color:red;background:lime"> </span><span style="background:lime">            my_buffer
= GL.glReadBuffer(GL.GL_FRONT)</span><span></span></font></p>

<p class="gmail-MsoNormal" style="margin:0in 0in 0.0001pt"><font face="arial, helvetica, sans-serif"><span style="background:red">849    -               debug_buffer = GL.glReadPixels(0,
0, width, height, GL.GL_RGB,    GL.GL_UNSIGNED_BYTE)</span><span></span></font></p>

<p class="gmail-MsoNormal" style="margin:0in 0in 0.0001pt"><font face="arial, helvetica, sans-serif"><span style="background:lime">849    +              debug_buffer = GL.glReadPixels(0, 0, width,
height, GL.GL_RGB,    GL.GL_UNSIGNED_BYTE, my_buffer)</span><span></span></font></p>

<p class="gmail-MsoNormal" style="margin:0in 0in 0.0001pt"><font face="arial, helvetica, sans-serif">850                    arr = np.fromstring(debug_buffer, “unit8”,
count, width*height*3)<span></span></font></p>

<p class="gmail-MsoNormal" style="margin:0in 0in 0.0001pt"><font face="arial, helvetica, sans-serif">851                    return arr.reshape((width, height, 3)) <span></span></font></p>

<p class="gmail-MsoNormal" style="margin:0in 0in 0.0001pt"><span><font face="arial, helvetica, sans-serif"> </font></span></p>

<p class="gmail-MsoNormal" style="margin:0in 0in 0.0001pt"><font face="arial, helvetica, sans-serif"> <span></span></font></p>

<p class="gmail-MsoNormal" style="margin:0in 0in 0.0001pt"><b><font face="arial, helvetica, sans-serif">/yt/visualization/volume_rendering/interactive_loop.py<span></span></font></b></p>

<p class="gmail-MsoNormal" style="margin:0in 0in 0.0001pt"><b><font face="arial, helvetica, sans-serif"> </font></b></p>

<p class="gmail-MsoNormal" style="margin:0in 0in 0.0001pt"><font face="arial, helvetica, sans-serif">187      def  __call__(self, scene, camera, callbacks): <span></span></font></p>

<p class="gmail-MsoNormal" style="margin:0in 0in 0.0001pt"><font face="arial, helvetica, sans-serif">188                  while
not glfw.WindowShouldClose(self.window) or self.should_quit: <span></span></font></p>

<p class="gmail-MsoNormal" style="margin:0in 0in 0.0001pt"><font face="arial, helvetica, sans-serif">189                              callbacks(self.window)<span></span></font></p>

<p class="gmail-MsoNormal" style="margin:0in 0in 0.0001pt"><font face="arial, helvetica, sans-serif">190                              if
callbacks.draw:<span></span></font></p>

<p class="gmail-MsoNormal" style="margin:0in 0in 0.0001pt"><font face="arial, helvetica, sans-serif">191                                          camera.compute_matrices()<span></span></font></p>

<p class="gmail-MsoNormal" style="margin:0in 0in 0.0001pt"><font face="arial, helvetica, sans-serif">192                                          scene.set_camera(cameara)<span></span></font></p>

<p class="gmail-MsoNormal" style="margin:0in 0in 0.0001pt"><font face="arial, helvetica, sans-serif">193                                          scene.render()<span></span></font></p>

<p class="gmail-MsoNormal" style="margin:0in 0in 0.0001pt"><font face="arial, helvetica, sans-serif">194                                          glfw.SwapBuffers(self.window)
<span></span></font></p>

<p class="gmail-MsoNormal" style="margin:0in 0in 0.0001pt"><font face="arial, helvetica, sans-serif">195                                          callbacks.draw
= False<span></span></font></p>

<p class="gmail-MsoNormal" style="margin:0in 0in 0.0001pt"><span style="background:lime"><font face="arial, helvetica, sans-serif">196   +                                     arr =
scene._retrieve_framebuffer()<span></span></font></span></p>

<p class="gmail-MsoNormal" style="margin:0in 0in 0.0001pt"><font face="arial, helvetica, sans-serif"><span style="background:lime">197   +                                    
write_bitmap(arr, “test.png”)</span><span></span></font></p>

<p class="gmail-MsoNormal" style="margin:0in 0in 0.0001pt"><font face="arial, helvetica, sans-serif">198                              glfw.PollEvents()<span></span></font></p>

<p class="gmail-MsoNormal" style="margin:0in 0in 0.0001pt"><font face="arial, helvetica, sans-serif">199                              yield
self<span></span></font></p>

<p class="gmail-MsoNormal" style="margin:0in 0in 0.0001pt"><font face="arial, helvetica, sans-serif">200                              glfw.Terminate()
<span></span></font></p>

<div><font face="arial, helvetica, sans-serif"><br></font></div><div><br></div><div>The simulation is a single rectangular box, but the screenshot I get with the above code is multiple boxes that look like they should be overlaid? Maybe there is a simpler method of accomplishing this? I'd appreciate any suggestions. </div><div><font face="arial, helvetica, sans-serif"><br></font></div><div><font face="arial, helvetica, sans-serif">Thanks, </font></div><div><font face="arial, helvetica, sans-serif">Nicole Melso </font></div><div><font face="arial, helvetica, sans-serif"><br></font></div><font face="arial, helvetica, sans-serif">-- <br></font><div class="gmail_signature"><div dir="ltr"><div><div dir="ltr"><div><div><font color="#000000" face="arial, helvetica, sans-serif">Nicole Melso</font></div><div dir="ltr"><font face="arial, helvetica, sans-serif">NSF Graduate Research Fellow </font><div><font face="arial, helvetica, sans-serif">Columbia Astronomy Department </font></div></div></div></div></div></div></div>
</div>