On 12/13/2016 01:32 PM, xinming wrote:
yeah, thank you for your detailed explaination, I always thought flip the display and buffer in one frame. It is only correct in single buffer, there is double buffering and even triple , quad buffering. And I really should use drawing black background instead of gl operations.
Oh, the gl operation is perfectly fine if you want to clear the background to a solid color. But for your effect you might want to try drawing a *semi-transparent* black rectangle, so the old images of fireworks fade to black over time.
Many thanks! Simon At 2016-12-13 18:13:50, "Petr Viktorin" <encu...@gmail.com> wrote:Hi, Pyglet typically uses double buffering [0]: one picture (buffer) is being drawn, while another is being displayed in the window. Then, they are flipped, so what was drawn is now displayed, and drawing is done on the hidden buffer. This prevents partially-drawn buffers from being displayed. So, if you clear every 2 frames, you're only ever clearing one of the two buffers; the other one continues to accumulate whatever was drawn on it. You can tell Pyglet to turn double buffering on or off using context configuration [1]. (I guess the proper solution would be to draw to a dedicated buffer, and blit that to the screen. But I've never done that with Pyglet.) For your effect, you might also consider drawing a semi-transparent black rectangle over the screen, rather than clearing every few frames. But be sure to clear the buffer at the beginning. Some systems don't start you off with a black window. [0] https://en.wikipedia.org/wiki/Multiple_buffering#Double_buffering_in_computer_graphics [1] http://pyglet.readthedocs.io/en/pyglet-1.2-maintenance/programming_guide/windowing.html On 12/13/2016 07:33 AM, xinming wrote:Sorry, I did not describe my problem clearly. It would work without raising errors, however, if I set in odd it would works fine, the screenshot here: if set even number, it seemed that glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT) did not work, so I said failed, here is the screenshot if I change 5 to 6. At 2016-12-13 14:24:01, "..." <offonoffoffon...@gmail.com> wrote: What do you mean "it failed"? Can you post a traceback or describe how the result differs from your expectation? On Dec 12, 2016 10:34 PM, "Simon" <xinmingm...@163.com <mailto:xinmingm...@163.com>> wrote: Hi guys, I met a strange problem. I use pyglet building an app to simulate fireworks. And I want to add special effects of persistence of vision. I do not know how to do it, I just do it in my own way. Maybe you can tell me how to do it. My problem is that I update the background (glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT)) every 3, 5, 7 frames, it works. If I update the background every 2,4,6,8 frames, it failed. why? my code is like this def on_draw(self): glViewport(0, 0, window.width, window.height) glMatrixMode(gl.GL_PROJECTION) glLoadIdentity() gluPerspective(90,window.width/window.height,0.05,1000) glMatrixMode(gl.GL_MODELVIEW) glLoadIdentity() gluLookAt(0.0,0.0,4.0, 0.0,0.0,0.0, 0.0,1.0,0.0) if self.frame % 5 == 1: # if change 5 to even number 4,6,8, it failed glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT) full code can be found here <https://github.com/xinmingzhang/fireworks/blob/master/fireworks.py> And I am new to OpenGL, I also lost in setting these gl environment, like gl.GL_PROJECTION, gl.GL_MODELVIEW etc. Sometimes I set the projection, and I see nothing on screen. Is there any good suggestions?
-- You received this message because you are subscribed to the Google Groups "pyglet-users" group. To unsubscribe from this group and stop receiving emails from it, send an email to pyglet-users+unsubscr...@googlegroups.com. To post to this group, send email to pyglet-users@googlegroups.com. Visit this group at https://groups.google.com/group/pyglet-users. For more options, visit https://groups.google.com/d/optout.