PDA

View Full Version : Limiting the draw area of each widget to a specific area



_Apollo_
04-17-2013, 07:07 AM
Hi,

I have a problem and I don't know how I can fix it.

Ok, what I 'm trying to do is to draw a widget (like a rectangle).
The widget has in its structure an X,Y coordinate pair that defines a reference point for the rectangle, a width and a height.
These are the items I use to draw the rectangle.

Now, in this structure there is a second width and height that defines the area that the rectangle may use.
If the rectangle width/height is larger than the area width/height, then the the drawn rectangle is limited to the area width/height.
The draw of the widget has to be clipped on the area boundaries.

For now I solved it by using glScissor to limit the area where the widget can be drawn.

An other option of the widget is that I can rotate the rectangle.
Now when I rotate the rectangle, the drawn rectangle is rotated but I cannot rotate the scissor box.

This results in the rectangle is drawn completely out of the scissor area and nothing is drawn.
I can not reposition the scissor box because it is always an X, Y oriented box and not on a given angle.

Does somebody knows how this can be done.

I have to use OpenGL 1.0 and I can not use all the functions available.

Actually I use OpenGL 1.0 SC.

Thanks,

A

Dan Bartlett
04-17-2013, 09:35 AM
If the clipping region needs to rotate with the rectangle, you could use the stencil buffer. A quick description + example can be found here: http://en.wikibooks.org/wiki/OpenGL_Programming/Stencil_buffer

If you still want to use scissor test, you could either create a much larger clipping rect centered on the rotation point, or grow/shrink the clipping rect using an approach like this: http://stackoverflow.com/questions/622140/calculate-bounding-box-coordinates-from-a-rotated-rectangle-picture-inside

_Apollo_
04-23-2013, 12:35 AM
Thanks that did the trick.