Thread: [PyOpenGL-Users] Buffers.....?
Brought to you by:
mcfletch
From: Prashant S. <ani...@ya...> - 2008-04-19 07:18:51
|
In a 2D application using pyOpenGL where I am not using Depth, there are couple of weired things happenings: When using some off-screen co-ordinates with glRasterPos2f, say my view port is 640x480 where top left is (0,0) and if I am passing (-10,-10) to glRasterPos2f then text goes off even though text is long enough to still appear on screen. When using feedbackBuffer and draw something that is off-screen then I am not getting the results. For example If I am drawing some glPoint where coordinates are inside the viewport area then feedBackBuffer is giving me results other wise I am not able to get the proper results. How can I solve this? Why I need this is because the application is basically a flow chart network where user can connect node's paramaters using curves to show the connections between them. It may possible when using panning, some nodes goes off-screen but still there connection are with some nodes on screen and I am not able to get the positional data of nodes that are off screen. Best regards. ____________________________________________________________________________________ Be a better friend, newshound, and know-it-all with Yahoo! Mobile. Try it now. http://mobile.yahoo.com/;_ylt=Ahu06i62sR8HDtDypao8Wcj9tAcJ |
From: Black <py...@bl...> - 2008-04-19 20:58:20
|
On Apr 19, 2008, at 3:18 AM, Prashant Saxena wrote: > In a 2D application using pyOpenGL where I am not using Depth, > there are couple of weired things happenings: > > When using some off-screen co-ordinates with glRasterPos2f, say my > view port is 640x480 where top left is (0,0) and if I am passing > (-10,-10) to > glRasterPos2f then text goes off even though text is long enough to > still appear on screen. That would be how raster operations in OpenGL work. If the point you pass to glRasterPos is outside of the viewport, nothing is displayed. The problem is, unlike the other OpenGL primitives, which can be viewed and worked with as if they were vector graphics until the moment they are rendered, raster operations are working with actual pixels being written to the viewport. If you ask for a place of screen, there is no buffer to write into. OpenGL could potentially extend the buffer, but that could be incredibly costly. It could also try to place each pixel and do a test to see if it falls within the viewport or not, but instead, it takes the easy way out and just dumps it. There are a couple of ways to deal with this: 1. do the calculations yourself to figure out where in the word you are actually onscreen and only render from that point on 2. use texture mapped fonts 3. make your viewport as big as your drawing and use a scroll pane to reduce the viewing area The first option is probably the standard approach. Depending on which GUI toolkit you use, you might be able to get this for free. Several of the non-GLUT alternatives have some kind of text rendering operation that is a little higher level than playing with glRasterPos. I have successfully used the third approach, though it does give you a speed hit since you don't get any benefit from clipping. It also won't work with every GUI toolkit. When I did it I was using QT. I personally like the second approach best. It takes a little more work to get started, but it is much faster than bitmap or pixmap fonts and it doesn't have this boundary problem. > When using feedbackBuffer and draw something that is off-screen > then I am not getting the results. For example If I am drawing some > glPoint where coordinates are inside the viewport area then > feedBackBuffer is giving me results other wise I am not able to get > the proper results. How can I solve this? Why I need this is > because the application is basically a flow chart network where > user can connect node's paramaters using curves to show the > connections between them. It may possible when using panning, some > nodes goes off-screen but still there connection are with some > nodes on screen and I am not able to get the positional data of > nodes that are off screen. I've not played extensively with the feedback buffer, so someone can correct me if I'm wrong, but I believe you have the same problem. The feedback buffer has to be a fixed size - if you try to render outside of that region, you won't see anything. Again, the solution is probably to render so that everything would fit inside of the viewport. of course, if you are just interested in the positions of nodes in a network, you could probably just store those outside of OpenGL... |
From: Greg E. <gre...@ca...> - 2008-04-22 00:46:46
|
Prashant Saxena wrote: > When using feedbackBuffer and draw something that is off-screen > then I am not getting the results. You're trying to use OpenGL for something it wasn't designed for. It's meant for drawing things on the screen, so it feels free to ignore anything that would be off-screen. You'll have to do your own calculations for this kind of thing in the program, and not rely on OpenGL. -- Greg |