711 |
|
|
712 |
\section{Hardware-accelerated implementation} |
\section{Hardware-accelerated implementation} |
713 |
|
|
|
TJL |
|
|
|
|
714 |
In this section, we discuss our hardware-accelerated implementation |
In this section, we discuss our hardware-accelerated implementation |
715 |
(libpaper) |
(libpaper) |
716 |
of unique backgrounds (papers). |
of unique backgrounds (papers). |
721 |
We have found that setting the parameters hierarchically |
We have found that setting the parameters hierarchically |
722 |
produces the best results: the parameters for different passes |
produces the best results: the parameters for different passes |
723 |
should depend on hyperparameters randomly selected for entire paper. |
should depend on hyperparameters randomly selected for entire paper. |
724 |
|
This is in accordance with the discussion about \cite{olson02vstm} |
725 |
XXX REASONING: YELLOW SQUARE, RED TRIANGLE |
above: the hyperparameters limit the number of different features |
726 |
|
that are rendered onto one texture. |
727 |
|
|
728 |
Our current parameter hierarchy is shown in |
Our current parameter hierarchy is shown in |
729 |
Fig.~\ref{figpipeline}. The individual parameters are |
Fig.~\ref{figpipeline}. The individual parameters are |
744 |
|
|
745 |
\subsection{Rationale for a Fragment-based implementation} |
\subsection{Rationale for a Fragment-based implementation} |
746 |
|
|
747 |
Our implementation needs to support complicated mappings |
One major goal for the |
748 |
|
implementation is to support complicated mappings |
749 |
between paper and screen coordinates, such as fisheye distortion. |
between paper and screen coordinates, such as fisheye distortion. |
750 |
To make this simple, all processing to obtain shapes on the paper |
To make this simple, all processing when rendering the background texture |
751 |
must be done on the fragment level after the texture accesses, i.e., we cannot use |
must be done on the fragment level after the texture accesses, i.e., we cannot use |
752 |
procedural geometry. |
procedural geometry except if pre-rendering the background into a texture. |
753 |
|
|
754 |
|
However, pre-rendering each texture is likely to be too time- and memory-consuming |
755 |
|
if there are dozens of different documents visible at the same time, |
756 |
|
so |
757 |
|
we shall limit ourselves to pure fragment-based rendering in this article. |
758 |
|
However, if a single background covers large areas of the screen, |
759 |
|
pre-rendering may increase performance considerably, and therefore |
760 |
|
our implementation does support |
761 |
|
two rendering modes with different |
762 |
|
tradeoffs. In the direct mode, |
763 |
|
small, static basis textures are used, which requires 2-3 passes |
764 |
|
with all texture units enabled. |
765 |
|
In the |
766 |
|
pre-rendered mode, |
767 |
|
rendering |
768 |
|
requires 1 pass with only one texture unit, |
769 |
|
but the repeating unit of the texture |
770 |
|
has to be |
771 |
|
pre-rendered into a texture of its own. |
772 |
|
To achieve a satisfactory image quality in zooming |
773 |
|
with pre-rendering, |
774 |
|
a relatively large texture has to be used for each background; 512x512 is not really sufficient. |
775 |
|
|
776 |
Plain OpenGL 1.3 does not by itself provide enough flexibility in the fragment |
Plain OpenGL 1.3 does not by itself provide enough flexibility in the fragment |
777 |
pipeline to allow the flexible generation of features. |
pipeline to allow for generating features nonlinearly from |
778 |
|
the basis textures. |
779 |
Because of this, and the availability of stable Linux drivers, |
Because of this, and the availability of stable Linux drivers, |
780 |
our main platforms are NV10, i.e., OpenGL 1.3 + |
our main platforms are NV10, i.e., OpenGL 1.3 + |
781 |
\url{GL\_\hyp NV\_\hyp register\_\hyp combiners}, |
\url{GL\_\hyp NV\_\hyp register\_\hyp combiners}, |
801 |
% % How is it used? |
% % How is it used? |
802 |
% % XXX |
% % XXX |
803 |
|
|
|
We have two rendering modes with different |
|
|
tradeoffs: direct, where |
|
|
small, static basis textures are used, which requires 2-3 passes |
|
|
with all texture units enabled, and |
|
|
pre-rendered, where the repeating unit of the texture |
|
|
is pre-rendered into a larger texture of its own, and rendering |
|
|
requires 1 pass with only one texture unit. |
|
|
To achieve a satisfactory image quality in zooming |
|
|
with the latter approach, |
|
|
a relatively large texture has to be used; 512x512 is not really sufficient. |
|
|
|
|
|
If using only the direct mode, it would be possible to use procedural geometry |
|
|
when generating the texture as well, but |
|
804 |
|
|
805 |
|
|
806 |
\subsection{Colors} |
\subsection{Colors} |