X-Git-Url: https://git.ucc.asn.au/?p=ipdf%2Fsam.git;a=blobdiff_plain;f=chapters%2FProcess%2FTransformations.tex;fp=chapters%2FProcess%2FTransformations.tex;h=9f586ab64d56ebc0538a7b0790ee143b27c150c1;hp=0000000000000000000000000000000000000000;hb=9fcf44a0c34f393689118e913a2d17d907036c85;hpb=d5e7e14d2ec624cfe0febcccd81e95082ef1c175 diff --git a/chapters/Process/Transformations.tex b/chapters/Process/Transformations.tex new file mode 100644 index 0000000..9f586ab --- /dev/null +++ b/chapters/Process/Transformations.tex @@ -0,0 +1,38 @@ +Equation \eqref{view-transformation} involves a division operation; in general, the result cannot be represented exactly in either a fixed or floating point format. However, if the coordinates involved are expressed as rational numbers, the result will always be exact. + + + + +\begin{enumerate} + \item Store static object bounds, transform to view before rendering + \begin{itemize} + \item Straight foward approach + \item Causes the most obvious rounding errors; impossible to render objects accurately below epsilon + \item The transformation can be performed by the GPU or CPU; the GPU is restricted to floats + \item CPU can perform transformation to arbitrary precision, but this requires all object bounds to be expressed with arbitrary precision + \end{itemize} + \item Modify all object bounds, no transformation required before rendering + \begin{itemize} + \item The rounding error on floats does not accumulate as quickly + \item Instead of one division by a very small number there are repeated divisions by larger numbers + \item However, if the document is scaled so object bounds $\to 0$ then the object will not be recoverable + \item For arbitrary precision we still need to apply all bounds transformations on the GPU + \end{itemize} + \item Keep object bounds static to some intermediate object and transform the bounds of that object + \begin{itemize} + \item We have used SVG \verb// to construct the intermediate objects; all beziers are relative to their parent path. + \item One could instead use the entire SVG bounds; however + for an SVG with a high level of detail this would have problems \rephrase{elaborate}. + \item We only need to apply some bounds transformations on the CPU + \item However as the document grows we still need to apply transformations to all paths, even those that are not visible + \end{itemize} + \item Quad tree + \begin{itemize} + \item Divide space up into a quad tree + \item Refer to David's stuff + \item The advantage over Path based transformations is that the bounds of objects which are not visible do not need to be recalculated + \end{itemize} + +\end{enumerate} + +