Clipping despite translation

Hi all,

I’ve got some rectangles that appear just in front of a bigger rectangle, so their Z values are very slightly more negative.
When I positioning each rectangle that is in front of the bigger rectangle, I use a translation. I may also do a rotation in future.
What I’m trying to figure out how to do is how can I clip in 3-D the smaller rectangles so that no part of than ever appears outside of the bigger rectangle that is behind them?

This is how things are now:
[ATTACH=CONFIG]1093[/ATTACH]

This is how I want to clip:
[ATTACH=CONFIG]1094[/ATTACH]

I’ve tried using glClipPlane but so far, no luck. What I’m doing:

  • Draw larger rectangle.
  • Set 4 clipping planes based on corners of larger rectangle for top/bottom/left/right.
  • Draw each smaller rectangle using
    • glPushMatrix
      • glTranslate
      • glRotate optionally
      • glBegin quads
      • glBindTexture
      • glTexCoord2d & glVertex3d
      • glEnd
    • glPopMatrix
  • Clear the 4 clipping planes.

Thanks.

Depending upon what you want to do, scissoring (glScissor) may be preferable to geometric clipping. Or stencilling.

Regarding geometric clipping:

  • The clip planes are specified in object coordinates but transformed using the current model-view matrix (current at the time of the glClipPlane() call) and stored in eye coordinates.

  • As well as specifying the plane coefficients, each plane must be enabled with glEnable(GL_CLIP_PLANE0) etc.

Points inside the clipping region are those for which


p1*x + p2*y + p3*z + p4*w >= 0

Thus, the planes should probably be:


GLdouble planes[4][4] = {
    { 1,  0, 0, -x_left},
    {-1,  0, 0,  x_right},
    { 0,  1, 0, -y_bottom},
    { 0, -1, 0,  y_top}
};

where x_left, x_right, y_bottom and y_top are the actual values used for the rectangle’s vertices, and the model-view matrix is unchanged between the drawing of the rectangle and the glClipPlane() calls.

[QUOTE=GClements;1266887]…
where x_left, x_right, y_bottom and y_top are the actual values used for the rectangle’s vertices, and the model-view matrix is unchanged between the drawing of the rectangle and the glClipPlane() calls.[/QUOTE]

Thanks, that works now for x and y directions.

However there is a glitch. When I rotate the containing (clipping) rectangle, the clipping planes don’t also rotate.
This is not a big deal since I don’t plan to rotate them but I wonder how that could be accomplished…

Assuming that you’re rotating the rectangle via the model-view matrix (e.g. glRotate), you should just need to call glClipPlane() while that transformation is still in effect (e.g. before calling glPopMatrix).