[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Gzz-commits] gzz/Documentation/Manuscripts/Irregu irregu.tex
From: |
Tuomas J. Lukka |
Subject: |
[Gzz-commits] gzz/Documentation/Manuscripts/Irregu irregu.tex |
Date: |
Sat, 30 Nov 2002 13:26:16 -0500 |
CVSROOT: /cvsroot/gzz
Module name: gzz
Changes by: Tuomas J. Lukka <address@hidden> 02/11/30 13:26:15
Modified files:
Documentation/Manuscripts/Irregu: irregu.tex
Log message:
move
CVSWeb URLs:
http://savannah.gnu.org/cgi-bin/viewcvs/gzz/gzz/Documentation/Manuscripts/Irregu/irregu.tex.diff?tr1=1.115&tr2=1.116&r1=text&r2=text
Patches:
Index: gzz/Documentation/Manuscripts/Irregu/irregu.tex
diff -u gzz/Documentation/Manuscripts/Irregu/irregu.tex:1.115
gzz/Documentation/Manuscripts/Irregu/irregu.tex:1.116
--- gzz/Documentation/Manuscripts/Irregu/irregu.tex:1.115 Sat Nov 30
13:25:10 2002
+++ gzz/Documentation/Manuscripts/Irregu/irregu.tex Sat Nov 30 13:26:15 2002
@@ -646,6 +646,110 @@
% On the other hand, the generalized formulation brakes most of the border
% drawing algorithms discussed below.
+Curved envelopes can be approximated by dicing to linear pieces.
+In the connected case, the sections are drawn as if they were
+rectangles of such lengths that the spines of the adjacent sections meet.
+Projective texture mapping is used to shear together the sides of the
+adjacent rectangles.
+In the scattered case, the sections are drawn simply
+as overlapping rectangles,
+but clipped along a normal of the envelope so that no part is drawn twice.
+Both of these methods yield the same set of polygons, with
+the only difference in the texture coordinates.
+
+Corners can be problematic, because the envelope must not intersect
+itself. For the scattered case, corners can be drawn by simply
+connecting the envelopes of the sides on a diagonal line.
+For the connected case, the stretching of the texture
+causes an undesireble side effect: the ripples are directed radially
+outward between the directions of the corners, making
+the ripples rotate if the tear-out shape is moved along its side.
+
+A simple solution to the problem is rounding.
+For example,
+a higher order ellipse can be used to obtain a rectangle
+with rounded corners and thus more rectangular sections.
+
+If rounding is not desired, the corners can be drawn as
+intersections of torn-edged half-planes.
+The border of the intersection shape is obtained
+as a similar intersection using the half-planes corresponding to
+the outer edges of the borders.
+The intersection can be implemented using stencil operations.
+
+%by drawing the outside
+%to the stencil buffer for each side of the shape.
+%The inside is then drawn
+%with stencil test set to discard those fragments that were
+%drawn to the stencil buffer as the outside of the shape.
+%This method works even if the tear-out shape has no corners,
+%and requires no extra passes over the inside of the shape
+%(the stencil can be cleared as the contents are drawn).
+
+When the tear-out reaches the edge of canvas, the smooth
+canvas border should be drawn instead of the parts of the tear-out
+shape extending outside the canvas.
+This can be implemented with stencil operations:
+First the full tear-out shape including the border is drawn
+to the stencil buffer.
+Then the canvas with its borders is drawn on screen using stencil test,
+and another bit is written to the stencil buffer for each canvas pixel
+ending up on screen.
+That stencil bit is then used to draw borders for the torn edges.
+
+% If a canvas is torn into multiple pieces, the above methods
+% produce edges that do not fit together: the edges of adjacent
+% pieces have opposing ripples.
+% The problem is partly solved by inverting (i.e., $1-f(\p)$)
+% the ripple function for either one of each pair of facing sides.
+% But then a 180 degree rotation of a pair of fitting pieces
+% inverts the torn shape between them, breaking the principle of
+% tying ripple shape to canvas location.
+%
+% \if0
+% The problem can be fully solved with a vector valued ripple function
+% $F({\p})$, $\Vert F({\p})\Vert \le 1$,
+% using $f({\p}) = (1 + N \cdot F({\p}))/2$,
+% where $N$ is the unit normal
+% of the envelope. The dot product automatically inverts the
+% function for a 180 degree rotation.
+% XXX: equivalent to drawing each envelope section by real 2D-offsetting
+% of a half-plane
+%
+% The texture shader version can directly use the vector valued ripple
function.
+% It can also be used with the
+% pre-computed borders method by pre-computing the dot product, too.
+% However, even the connected case then requires a full 360 degree span
+% of pre-computed outer surfaces.
+% \fi
+%
+% \if0
+% Content drawn using stencil.
+% Inside only needs to be drawn twice. ???
+% Can create ``outside'' stencil and draw inside only once.
+%
+% Curved lines: \\
+% - dicing \\
+% - non-rectangular segments need projective texture mapping for
+% the connected case: rectangular sections are stretched together \\
+%
+% Corners: \\
+% - motion problem with connected edge on non-rectangular segments
+% on a straight line
+% (the ripples ``rotate'' when the tearout shape moves) \\
+% - rounded corners to make segments more rectangular \\
+% -% possible problem with self-intersecting envelope \\
+% - could move spine to the inner edge with the spine-normal definition \\
+% - creating corners by intersecting two straight lines with stencil \\
+%
+%
+% Jigsaw puzzle problems: \\
+% - tear-out pieces do not fit together \\
+% - partially solved using inverted version of the texture \\
+% - better solution by using a two-component texture
+% \fi
+
+
\subsection{Drawing the edge}
@@ -811,117 +915,6 @@
%
% Increasing the border width scaling exponent from 0 makes the
% border width less consistent with sloped offset.
-
-\subsection{Polygonal undistorted shapes}
-
-In the previous sections we have presented different ways of drawing
-one linear section of the envelope.
-In this section, we consider different ways of drawing complete
-tear-out shapes with contents.
-
-Curved envelopes can be approximated by dicing to linear pieces.
-In the connected case, the sections are drawn as if they were
-rectangles of such lengths that the spines of the adjacent sections meet.
-Projective texture mapping is used to shear together the sides of the
-adjacent rectangles.
-In the scattered case, the sections are drawn simply
-as overlapping rectangles,
-but clipped along a normal of the envelope so that no part is drawn twice.
-Both of these methods yield the same set of polygons, with
-the only difference in the texture coordinates.
-
-Corners can be problematic, because the envelope must not intersect
-itself. For the scattered case, corners can be drawn by simply
-connecting the envelopes of the sides on a diagonal line.
-For the connected case, the stretching of the texture
-causes an undesireble side effect: the ripples are directed radially
-outward between the directions of the corners, making
-the ripples rotate if the tear-out shape is moved along its side.
-
-A simple solution to the problem is rounding.
-For example,
-a higher order ellipse can be used to obtain a rectangle
-with rounded corners and thus more rectangular sections.
-
-If rounding is not desired, the corners can be drawn as
-intersections of torn-edged half-planes.
-The border of the intersection shape is obtained
-as a similar intersection using the half-planes corresponding to
-the outer edges of the borders.
-The intersection can be implemented using stencil operations.
-
-%by drawing the outside
-%to the stencil buffer for each side of the shape.
-%The inside is then drawn
-%with stencil test set to discard those fragments that were
-%drawn to the stencil buffer as the outside of the shape.
-%This method works even if the tear-out shape has no corners,
-%and requires no extra passes over the inside of the shape
-%(the stencil can be cleared as the contents are drawn).
-
-When the tear-out reaches the edge of canvas, the smooth
-canvas border should be drawn instead of the parts of the tear-out
-shape extending outside the canvas.
-This can be implemented with stencil operations:
-First the full tear-out shape including the border is drawn
-to the stencil buffer.
-Then the canvas with its borders is drawn on screen using stencil test,
-and another bit is written to the stencil buffer for each canvas pixel
-ending up on screen.
-That stencil bit is then used to draw borders for the torn edges.
-
-% If a canvas is torn into multiple pieces, the above methods
-% produce edges that do not fit together: the edges of adjacent
-% pieces have opposing ripples.
-% The problem is partly solved by inverting (i.e., $1-f(\p)$)
-% the ripple function for either one of each pair of facing sides.
-% But then a 180 degree rotation of a pair of fitting pieces
-% inverts the torn shape between them, breaking the principle of
-% tying ripple shape to canvas location.
-%
-% \if0
-% The problem can be fully solved with a vector valued ripple function
-% $F({\p})$, $\Vert F({\p})\Vert \le 1$,
-% using $f({\p}) = (1 + N \cdot F({\p}))/2$,
-% where $N$ is the unit normal
-% of the envelope. The dot product automatically inverts the
-% function for a 180 degree rotation.
-% XXX: equivalent to drawing each envelope section by real 2D-offsetting
-% of a half-plane
-%
-% The texture shader version can directly use the vector valued ripple
function.
-% It can also be used with the
-% pre-computed borders method by pre-computing the dot product, too.
-% However, even the connected case then requires a full 360 degree span
-% of pre-computed outer surfaces.
-% \fi
-%
-% \if0
-% Content drawn using stencil.
-% Inside only needs to be drawn twice. ???
-% Can create ``outside'' stencil and draw inside only once.
-%
-% Curved lines: \\
-% - dicing \\
-% - non-rectangular segments need projective texture mapping for
-% the connected case: rectangular sections are stretched together \\
-%
-% Corners: \\
-% - motion problem with connected edge on non-rectangular segments
-% on a straight line
-% (the ripples ``rotate'' when the tearout shape moves) \\
-% - rounded corners to make segments more rectangular \\
-% -% possible problem with self-intersecting envelope \\
-% - could move spine to the inner edge with the spine-normal definition \\
-% - creating corners by intersecting two straight lines with stencil \\
-%
-%
-% Jigsaw puzzle problems: \\
-% - tear-out pieces do not fit together \\
-% - partially solved using inverted version of the texture \\
-% - better solution by using a two-component texture
-% \fi
-
\section{Example applications}
In this section, we present two of our user interface designs
- [Gzz-commits] gzz/Documentation/Manuscripts/Irregu irregu.tex, (continued)
- [Gzz-commits] gzz/Documentation/Manuscripts/Irregu irregu.tex, Tuomas J. Lukka, 2002/11/30
- [Gzz-commits] gzz/Documentation/Manuscripts/Irregu irregu.tex, Tuomas J. Lukka, 2002/11/30
- [Gzz-commits] gzz/Documentation/Manuscripts/Irregu irregu.tex, Tuomas J. Lukka, 2002/11/30
- [Gzz-commits] gzz/Documentation/Manuscripts/Irregu irregu.tex, Tuomas J. Lukka, 2002/11/30
- [Gzz-commits] gzz/Documentation/Manuscripts/Irregu irregu.tex, Tuomas J. Lukka, 2002/11/30
- [Gzz-commits] gzz/Documentation/Manuscripts/Irregu irregu.tex, Tuomas J. Lukka, 2002/11/30
- [Gzz-commits] gzz/Documentation/Manuscripts/Irregu irregu.tex, Tuomas J. Lukka, 2002/11/30
- [Gzz-commits] gzz/Documentation/Manuscripts/Irregu irregu.tex, Tuomas J. Lukka, 2002/11/30
- [Gzz-commits] gzz/Documentation/Manuscripts/Irregu irregu.tex, Tuomas J. Lukka, 2002/11/30
- [Gzz-commits] gzz/Documentation/Manuscripts/Irregu irregu.tex, Tuomas J. Lukka, 2002/11/30
- [Gzz-commits] gzz/Documentation/Manuscripts/Irregu irregu.tex,
Tuomas J. Lukka <=
- [Gzz-commits] gzz/Documentation/Manuscripts/Irregu irregu.tex, Tuomas J. Lukka, 2002/11/30
- [Gzz-commits] gzz/Documentation/Manuscripts/Irregu irregu.tex, Tuomas J. Lukka, 2002/11/30
- [Gzz-commits] gzz/Documentation/Manuscripts/Irregu irregu.tex, Tuomas J. Lukka, 2002/11/30
- [Gzz-commits] gzz/Documentation/Manuscripts/Irregu irregu.tex, Tuomas J. Lukka, 2002/11/30
- [Gzz-commits] gzz/Documentation/Manuscripts/Irregu irregu.tex, Tuomas J. Lukka, 2002/11/30
- [Gzz-commits] gzz/Documentation/Manuscripts/Irregu irregu.tex, Tuomas J. Lukka, 2002/11/30
- [Gzz-commits] gzz/Documentation/Manuscripts/Irregu irregu.tex, Tuomas J. Lukka, 2002/11/30
- [Gzz-commits] gzz/Documentation/Manuscripts/Irregu irregu.tex, Tuomas J. Lukka, 2002/11/30
- [Gzz-commits] gzz/Documentation/Manuscripts/Irregu irregu.tex, Tuomas J. Lukka, 2002/11/30
- [Gzz-commits] gzz/Documentation/Manuscripts/Irregu irregu.tex, Tuomas J. Lukka, 2002/11/30