Method and system of encoding the connectivity of a triangle mesh
The present invention relates to a method and system of encoding the connectivity of a triangle mesh used for viewing, transmitting or storing of graphical 3D models, wherein all triangles of the mesh are traversed one at a time by walking from a previously visited triangle to one of its not yet visited neighbours as the next triangle through their common edge while determining the connectivity of said next traversed triangle.
3D graphics plays an increasingly important role in applications where 3D models are accessed through the internet. Due to improved design and model acquisition tools, to the wider acceptance of this technology, and to the need for higher accuracy, the number and complexity of these models are growing faster than network bandwidth. Consequently, it is imperative to continue increasing the terseness of 3D data transmission formats.
Although many representations have been proposed for 3D models, polygon and triangle meshes remain the de facto standard for exchanging and viewing 3D models. A triangle mesh may be represented by its vertex data and by its connectivity. It may be used directly as a polyhedral surface or as a coarse mesh controlling a subdivision surface. Most compression techniques
separate the encoding of the connectivity information (triangle/vertex incidence) from the geometry information (vertex coordinates, and possibly their color or normal attributes) . Already of theoretical interest forty years ago, lossless connectivity encoding has received over the last few years a significant amount of attention because of its practical importance for the transmission of 3D models. Although several recent schemes are focused on progressive transmission or on computational simplicity, the reduction of the number of bits per triangle remains the primary objective in this field. Furthermore, single-resolution encoding retains its strategic importance, because in most situations we know ahead of time that either the full resolution model or the coarse starting point of a progressive model must be transmitted and because they can be more effectively encoded as single-resolution models than as progressive ones.
Several techniques are known for the loss-less compression of the connectivity of triangle meshes . The connectivity of a "simple" mesh - defined as a connected, zero-genus, manifold triangle mesh - may be stored as a sequence of t triangle descriptors, each triangle been represented by 3 integer labels . Each label identifies one amongst the v vertices and requires log2(v) bits. Organizing triangles into strips (F. Evans, S. Skiena and A. Varshney, Optimizing Triangle Strips for Fast Rendering, Proceedings, IEEE Vizualization '96, pp. 319-326, 1996) , where each new triangle shares an edge with the previous one, reduces the above storage by half in practice. The use of a
buffer to cache a small number of labels may further reduce the expected cost.
The Topological Surgery method of Taubin and Rossignac (Taubin, G. , Gueziec, A., Horn, W. and Lazarus, F., Progressive Forest Split Compression, Siggraph 98
Conference Proceedings, pp 123-132, 1998) compress both a triangle-spanning tree and its dual vertex-spanning tree by encoding the lengths of consecutive single-child nodes. Both trees suffice to decode the connectivity of the simple mesh. For complex and reasonably regular meshes, the expected cost of encoding both trees may amount to about two bits per triangle. However, the overhead of the run length encoding may result in a significantly higher average cost for irregular or small meshes.
Rossignac 's Edgebreaker compression scheme (J. Rossignac, "Edgebreaker: Connectivity compression for triangle meshes", IEEE Transactions on Visualization and Computer Graphics, 5(1), 47-61, Jan-Mar 1999) proposes both a rigorous theoretical analysis and an outstanding worst-case bound of the connectivity compression bit rate. The original method used at most 4 bit per vertex and was improved to 3.6 bit per vertex (D. King and J. Rossignac, "Guaranteed 3.67V bit encoding of planar triangle graphs", 11th Canadian Conference on Computational Geometry (CCCG'99), pp. 146-149, Vancouver, CA, August 15-18, 1999). This upper-bound on storage does not rely on statistic-based entropy or arithmetic coding schemes, which in general perform poorly on small or irregular meshes . Consequently, Edgebreaker is particularly attractive for compressing large catalogs of small models. For
large meshes, entropy codes further reduce the storage to less than 2 bit per vertex (J. Rossignac and A. Szymczak, "Wrap&Zip decompression of the connectivity of triangle meshes compressed with Edgebreaker", Computational Geometry, Theory and Applications, 14(1/3), pp. 119-135, November 1999).
In the method of Edgebreaker all the triangles of a mesh are visited one at a time, walking from a previously visited triangle to one of its not-yet visited neighbors as the next triangle through their common edge, called the "gate". For manifold meshes, the tip of the new triangle is either a "new" vertex (case C) that has not yet been encountered or an "old" vertex of the boundary separating the previously visited portion of the mesh from the rest. Edgebreaker distinguishes four types of "old" vertices, depending on whether they appear in that boundary before the gate (case L) , after the gate (case R) , both (case E) , or neither (case S) . The succession of case types produced by this traversal are encoded as a succession of symbols from the set (C,L,E,R,S), called the clers string or clers-sequence. For zero-genus meshes, the clers string is sufficient to represent the complete connectivity. These situations and the associated clers symbols are shown in Figure 1(a) . The arrow indicates the direction to the next triangle. Previously visited triangles are not shown. Note that in the case S, Edgebreaker moves to the right, using a recursive call, and then to the left. Figure 1(b) gives an example of the clers-sequence of a small region of a simple mesh. A detailed description of the Edgebreaker compression and decompression and some extensions to non-manifold
meshes are given in J. Rossignac, "Edgebreaker: Connectivity compression for triangle meshes", IEEE Transactions on Visualization and Computer Graphics, 5(1), 47-61, Jan-Mar 1999, and in J. Rossignac, A. Safonova, and A. Syzmczak, "3D Compression Made Simple: Edgebreaker on a Corner-Table", Invited lecture at the Shape Modeling International Conference, Gemoa, Italy, May 2001. Because half of the triangles correspond to case C in a manifold mesh, they can be encoded using a single bit (0) , while the remaining four cases may be unambiguously encoded using 3 bits each (110 for L, 101 for R, 111 for E and 100 for S) . This simple code guarantees a 2 bits per triangle encoding. More complex codes guarantee to compress the Edgebreaker-generated clers string encoding of any zero-genus mesh to less than 1.8 bits per triangle . The clers strings of meshes encountered in practice may be compressed even further, sometimes to less than 0.9 bits per triangle, using variable-length entropy codes. When the mesh has a very large number of vertices and most of them have exactly six neighbors, the clers string can provably be compressed down to 0.81 bits per triangle (see e.g. A. Szymczak, D. King, J. Rossignac, "An Edgebreaker-based Efficient Compression Scheme for Connectivity of Regular Meshes", Special issue of Journal of Computational Geometry: Theory and Applications, Vol. 20, No. 2, Oct 2001) . A more efficient decompression algorithm for the clers sequence, called Wrap&Zip, interprets the clers-string to build a simply connected triangulated polygon, which represents the triangle-spanning tree (J. Rossignac and A. Szymczak, "Wrap&Zip decompression of the
connectivity of triangle meshes compressed with Edgebreaker", Computational Geometry, Theory and Applications, 14(1/3), pp. 119-135, November 1999). Then, it zips up the borders of that polygon by matching pairs of its bounding edges in a bottom-up order with respect to the vertex-spanning-tree that is the dual of the triangle-spanning-tree.
Touma and Gotsman also encode the vertices along the vertex-spanning tree (C. Touma and C. Gotsman,
"Triangle Mesh Compression", Proceedings Graphics Interface 98, pp. 26-34, 1998) . They distinguish only two cases, which correspond to the Edgebreaker ' s cases S and C. Other cases are not encoded. Instead, Touma and Gotsman also encode the degree of each vertex, i.e. the number of incident edges, and use it to automatically identify the other cases. During decompression they keep track of the number of already decoded triangles that are incident upon each vertex and are thus capable of identifying the R, L, and E triangles automatically. For highly tessellated regular models, where the degree of the vertices follows almost regular patterns, they report compression results of less than a bit per triangle using Huffman encoding. However, for smaller or less regular meshes, the required storage may easily exceed 2 bits per triangle.
The schemes discussed above perform a depth-first traversal of a triangle spanning tree. Each time a new triangle is visited, we visit its right neighbor and then its left neighbor if they have not previously been visited. Instead, Alliez and Desbrun give priority to triangles that have a better chance of reducing the
length of the boundary separating the previously processed triangles from the rest (P. Alliez and M. Desbrun, Valence-Driven Connectivity Encoding for 3D Meshes, Eurographics 2001 Conference Proceedings, 2001) . More specifically, they attach triangles to border edges that are incident to vertices with the largest total number of previously visited neighbors, thus reducing the frequency of S triangles. To compress the vertex location, the connectivity of each C-case triangle is used to access its neighbors and to estimate the location of the tip-vertex. Then a corrective vector is transmitted to compensate for the error between the correct location and its estimation. When both are quantized and when the estimates are accurate, the corrective vectors are usually very short and their coordinates may be encoded with a few bits each.
It is an object of the present invention to provide a method and system of encoding the connectivity of a triangle mesh which has the capability to further reduce the required storage.
The object is achieved with the method according to claim 1 and with the system according to claim 15.
Advantageous embodiments of the inventive method and system are described in the subclaims or in the subsequent description and examples .
In the proposed method and system of encoding the connectivity of a triangle mesh used for viewing, transmitting or storing of graphical 3D models, all triangles of the mesh are traversed one at a time by
walking from a previously visited triangle to one of its not yet visited neighbours as the next triangle through their common edge while determining the connectivity of said next traversed triangle. The method is characterized in that when traversing the triangles the connectivity of the next triangle is not only determined but also predicted by a prediction algorithm and the predicted connectivity is compared with the determined connectivity. If the predicted connectivity matches the determined connectivity a single confirmation bit is used for encoding. If the predicted connectivity does not match the determined connectivity one bit indicating the wrong prediction followed by none, one or more bits leading to the correct connectivity are used for encoding.
The proposed new encoding technique and system for single-resolution lossless compression of triangle mesh connectivity is preferably based on the Edgebreaker compression, but may also be based on other compression or encoding schemes determining the connectivity of triangle meshes. Both compression and decompression perform the same geometric prediction of the location of the tip-vertex of the next triangle. The present method has the capability of further reducing the required storage or amount of data for storing or transmitting graphical 3D models based on triangle meshes. Only a single confirmation bit needs to be transmitted for each triangle connectivity if the performed prediction is correct. The degree of reduction of storage is dependent on the prediction algorithm used. In a preferred embodiment of the present method the triangle connectivity is predicted
by snapping the tip-vertex to the nearest boundary vertex, if one lies sufficiently close. It could be shown that up to 97% of the predictions using this simple prediction algorithm are correct, so that connectivity information is often compressed to a fraction of a bit per triangle with the present method. The present system comprises means for carrying out the proposed method according to at least one of claims 1 to 14.
It goes without saying that it is also possible to use other prediction algorithms predicting the location of the tip vertex of the next triangle in the present method. An example of such a preferred further prediction algorithm is shown with respect to figure 8.
In the following a preferred embodiment of the present method is described with reference to the accompanying drawings, which illustrate
Fig. 1 (a) Edgebreaker clers symbols,
(b) example clers-sequence: CRSRLECRRRLE;
Fig. 2 an example for a prediction of connectivity using the parallelogram rule; Fig. 3 an example for guessed clers symbols based on geometry prediction; Fig. 4 an example for wrongly guessed C triangles;
Fig. 5 an example for wrongly guessed non-C triangles; Fig. 6 an example for the Apollo sequence of the triangle mesh of figure 1;
Fig. 7 an example for a 3D model represented by a triangle mesh; and
Fig. 8 a further example for a prediction of the tip-vertex of the next triangle.
In the present embodiment the proposed method, in the following also named as Delphi-compression, is applied for encoding the clers string produced by the Edgebreaker mesh traversal. For simplicity of the exposition, we focus on simply connected meshes that are homeomorphic to a sphere . The proposed method applies to more complex meshes as well, but the cost analysis and encoding are more complex. The Delphi- compression does not encode the clers-sequence directly. Instead, it tries to guess each clers-symbol and encodes the confirmation and the corrections to these guesses . The guess is based on the geometry and connectivity of the previously visited triangles. The decompression performs the same guesses and decodes a confirmation bit that either confirms that the guess is right or indicates that it is not, in which case a corrective string of subsequent bits will indicate the correct code. We call this sequence of confirmation bits and of corrections the Apollo-sequence of the Edgebreaker traversal.
In contrast to the clers-sequence decompression, the mesh has to be zipped immediately while decoding the Apollo-sequence. Otherwise, it is not always possible to perform the same guesses as during compression because the neighborhood of a triangle is not completely built. Consequently, when a S-case is encountered that is not correctly identified, the
identity of the old vertex has to be encoded that will serve as the tip-vertex of the S-triangle.
In the following, an example is shown how to guess the clers-symbol of a triangle based on vertex geometry and how to build the Apollo-sequence.
The subsequent definitions are made. A corner c is the association of a triangle c.t with one of its bounding vertices c.v. The next corner around a triangle in counterclockwise direction is denoted c.n, the previous corner c.p, and the opposite corner c.o. The location or geometry of the vertex v=c.v associated with the corner c is denoted c.v.g. As in the original Edgebreaker algorithm, we move from a triangle F to an adjacent triangle T at each step of the mesh traversal. F and T share a common edge G, called gate. Let c be the corner of T that is not incident upon G as shown in Figure 2. Let Length (G) denote the length of the gate. The transmitted information must identify the vertex c.v. Let g(c) be the estimate on the location of c.v.g. For instance, we can compute g(c) using the parallelogram rule:
g(c) = c.n.v.g + c.p.v.g - c.o.v.g.
Let B denote the set of all vertices in the decoded mesh which are not interior to the mesh. As we have assumed that the mesh is simply connected, the vertices of B form one or several cyclic chains (c.p.v, Vr, V2 , ...VI, c.n.v), called hereafter loops, along the oriented border. One of these loops contains the gate G. We will call it the active loop 1. For zero-genus
meshes, we know that c.v is part of the active loop. Let B' be the set of vertices of the active loop excluding the gate vertices c.n.v and c.p.v. Let X be the vertex of B' that is the closest to g(c). Let d:=Dist (X,g(c) ) denote the distance between them. X is a prime candidate for c.v. We will use d to decide whether X is our guess or whether we are guessing that c.v is a new vertex.
Specifically, when d exceeds a threshold, we assume a C triangle. The difference gp = c.v.g - g(c) of the prediction g(c) and the vertex location c.v.g will be encoded. When d is smaller than the threshold, X will be our guess and if that guess is correct, we will have one of the four cases L, E, R, or S, depending on whether X is VI, or Vr, or both, or neither. The threshold is based on the length of the gate G.
More precisely, if d > τ*Length(G), with a constant τ=0.6 for example, we guess T is of type C. Otherwise, we guess that c.v is X and distinguish four situations as shown in Figure 3 :
If X is both VI and Vr, then we guess that T is of type E.
If X is Vr, then we guess that T is of type R. If X is VI, then we guess that T is of type L. Otherwise, we guess that T is of type S.
It is also possible to use another parameter for the threshold. Such a parameter could be the area of the predicted triangle, i. e. the triangle formed by the gate and the predicted tip-vertex.
A single bit in the transmission stream suffices to indicate whether the guess is correct. If so, we not only know the code of T (i.e., we have decoded its Edgebreaker symbol using one bit) , but we also know which vertex it is and can thus zip the border immediately during decompression, avoiding zip delays and not requiring the transmission of offsets that are associated with S triangles to identify the tip-vertices of S triangle.
Of course, the guess can be wrong. In this case some information is required in order to rectify the guess. Note that a false guess does not necessarily indicate a wrong symbol. We might wrongly guess c.v as X and concluded a S situation. In fact, it might be an S situation, but with another tip in B'. In the following, the rectification of the wrong guesses depending on the guessed symbol and the length of the active border is discussed.
We start with the case where we guessed a C and made a mistake as shown in figure 4. Then we discuss the cases where we wrongly guessed L, R, S, or E (see figure 5) .
If we guessed a C, and in fact c.v is a vertex in B', one bit in the transmission stream indicates that our guess was wrong. The subsequent bits would clarify its type. If the length of the active loop |B'| is equal 1, the triangle has to be of type E. No further information is necessary. If |B'| = 2, only two possible symbols L, R have to be distinguished. Otherwise, it is necessary to distinguish between the
three remaining cases in L, R, S, because an E situation is impossible. In case of a mis-classified type S triangle more bits are needed to encode the identity of c.v in order to enable immediately zipping during decoding. Without these bits, it would not be possible to perform the same guesses during decompression as during compression.
Figure 5 shows wrongly guessed non-C triangles. The dark grey triangle shows the actual situation. The light grey triangle visualizes the parallelogram • prediction.
If we wrongly guess case E (X=V1 and X=Vr) , it must be a C situation, since an E is guessed only with |B'|=1 and with only one border vertex, situations L, R, and S are not possible. The confirmation bit is sufficient. No additional bits are necessary to rectify the guess.
If we wrongly guess case R (X=Vr) , the subsequent bits are used to distinguish between the three remaining symbols L, C, S. An E symbol is not possible here.
If we wrongly guess case L (X=V1) , we have to distinguish between the remaining symbols R, C, S.
Again, an E symbol is not possible in this situation.
If we wrongly guess case S, the four remaining symbols C, L, R, S are possible. An E symbol is not possible here, because an E situation occurs only with |B'|=1, which implies Vl=Vr. In this case, we would have never guessed S, only a C or E. Even if S is the correct guess, the tip-vertex might not be X. So, when the
correction states that the guess of S is correct but the tip is wrong, additional bits must be transmitted to identify the correct tip-vertex in the active loop. These situations are rare because the number of S cases is relatively small and many of them are correctly identified.
Taking into account the current length of the active border |B'|, some cases are not possible and the bit code for the correction can be shortened.
If |B'|=1, only cases C and E are possible. |B'|=1 implies Vl=Vr. L, R and S situations are not possible. In this case, the validation bit suffices to distinguish between the two possible cases: C or E.
An active loop length |B'|=2, implies that B' only contains the vertices VI and Vr. Neither an E nor a S situation are possible in this case. If the guess is wrong, one additional bit is sufficient to rectify the situation. For example, in case of a wrongly guessed R, one bit indicates that the guess is wrong, and an additional bit distinguishes between a C and L situation.
Finally, when |B'|=3, there is only one vertex in the active border besides VI and Vr and thus that vertex is the only acceptable tip-vertex for an S case. There is no need to send corrective bits to identify the tip in a wrongly guessed S triangle. Furthermore, a wrongly guessed S case cannot be an S with a different tip-vertex.
Using a careful analysis of these situations and exploiting the restrictions described above, we had devised and evaluated several variable length schemes for encoding the corrective string of bits .
Using the proposed connectivity prediction, an Edgebreaker mesh traversal can be expressed by a sequence of 3-tupel A=(G, Rs, S0) , where G is the confirmation bit indicating whether the guess is correct or not, Rs is the correction string in case of a false guess, and S0 is the offset in a wrongly guessed S situation. This sequence is called the Apollo sequence, because it is used to interpret the connectivity guess. The Apollo sequence is equivalent to the Edgebreaker clers sequence.
Figure 6 shows the Apollo sequence of the above introduced example of figure 1. In this example it is assumed that the first triangle has been guessed correctly as type C. We than predict the tip of the right triangle at g(c) using the parallelogram rule. Since the distance of g(c) and the active border is too large, we guess again a type C triangle. Unfortunately, that guess was wrong. In fact, the right triangle, shown in gray color in the first picture, is of type R. In the Apollo sequence we encode this situation as (f, R) and continue the traversal with the left triangle of R. The prediction scheme is performed for all triangle in Edgebreaker sequence and leads to the following Apollo sequence: ( (t) , (f R) , (t) , (t) , (t) , (t) , (t) , (t) ,
(t) , (f R) , (t) , (t) , (t) ) . With a trivial encoding scheme we can compress this sequence with 16 bits instead of 32 bits for the corresponding CLERS sequence.
The following shows an example for encoding the Apollo sequence. A simply connected regular mesh with t triangles can be expressed by an Apollo sequence of length t-1. Each Apollo tuple corresponds to a symbol of the equivalent clers sequence of that mesh. In order to achieve a compact mesh representation, the Apollo sequence has to be encoded efficiently. The layers of this compression will be discussed separately: - The guess layer,
- the rectified symbol layers, and
- the tip offset layer.
These layers can be compressed using an adaptive entropy encoder like the range encoder as in P. Alliez and M. Desbrun. Valence-Driven Connectivity Encoding for 3D Meshes. Eurographics 2001 Conference Proceedings, 2001, for example. However, compression results vary using different encoders. The entropy of the Apollo sequence as a lower bound for the compression ratio gives more insight about the encoded information. A good entropy encoder will come close to that bound.
We can treat each layer M of the Apollo sequence as a markov source of order n. The conditional entropy H(M|σ.) of such a markov source is given by
H(M|σ3) = -Σ p(M σk)*log2(p(M σk)) ,
where σk = Sk. ... Skn is the sequence of the n previous symbols . The entropy of an ergodic markov source of order n is then given by
H(M)= Σ p(σk)*H(M|σk) .
Note that H(M) is always less than or equals the entropy H(M)= -Σ p (m. ) *log2 (p (m.) ) , where M denotes the same source without memory.
We will treat the layers as sequences of first order markov sources (n=l) . The first order entropy of these layers is a lower bound for the compression ratio of the Apollo sequence.
In addition to that lower bound and a practical compression rate, a guaranteed upper bound is fundamental for a number of applications where compression will be performed at runtime. The upper bound on the number of bits per vertex is needed here to estimate the maximum expected time for transmission. The upper bound of the Apollo sequence mainly depends on the quality of the prediction. If the prediction is often wrong, a lot of rectification information is necessary and the code will become inefficient. In that case, the original clers string should be used instead. Because both encode the same mesh traversal, the clers string can be directly derived from the Apollo sequence. For that reason, the worst case upper bound of 3.6 bits per triangle from Edgebreaker is also valid for Delphi compression.
However, if the prediction is often correct, the upper bound will be much less than in Edgebreaker. The Apollo sequence contains t-1 symbols m. ε (t,f) in the guess layer MG. A trivial code will use 1 bit for each symbol
in that layer. Let p(t) be the probability of a correct guess. The probability p(f) of a wrong guess is given by p(f) = 1 -p(t) .
In case of a wrong guess 2 bits are sufficient to encode the rectified symbol in any case. However, this is a rough estimate. If the guessed symbol Gs is a E it must be a C situation. No further information is needed to rectify the guess. If Gs is a L or R a simple Huffman code will need less than 1.7 bits per symbol to distinguish the three possible rectified symbols. In case of a wrongly guessed C symbol also 1.7 bits are sufficient to distinguish the three rectified symbols L, R, and S. The E symbols which might occur as rectification do not have to be encoded. Only in case of |B'|= 1 an E symbol is possible and in that case, no other symbol besides C is valid. If the guess says that C was wrong, it must be an E. Only in case of a wrongly guessed S, four different rectified symbols C, L, R, and S have to be distinguished.
If the rectified symbol is a S, the tip of that type S triangle has to be encoded in order to zip it immediately. In case of a manifold mesh with genus 0, that tip is a vertex on the active loop and can be encoded by the topological distance s to Vr on the active loop. Experimental results have shown that s is 1 or 2 in most cases. However, this offset is a serious obstacle to guarantee a linear worst case bit-rate. Theoretically, log2(|B'|) are needed to encode the tip of that S triangle.
Nevertheless, we can estimate an upper bound, if the number of S triangles is supposed negligible. The guess layer needs less than one bit per triangle. In addition, for each wrong guess, less than 2 bit are needed to rectify the guess. If the number of S triangles is small, 1.7 bit is sufficient because a rectified S does not often occur. Summing up, an estimated upper bound bit rate b is given by b=l+1.7*p(t) bits per triangle. In other words, Delphi compression is more efficient than Edgebreaker, if more than 65% of the predictions are true. Experimental results lead to 80% to 95% of correct guesses for regular meshes. The estimated upper bound is between 1.34 to 1.1 bits per triangle for these meshes. In practice, the compression bit rate was between 0.8 and 0.2 bits per triangle or 1.6 and 0.4 bits per vertex in these cases .
While decoding the Apollo sequence, the decompression algorithm predicts the clers-symbol of the new triangle using the same prediction scheme as during compression. This guess is interpreted using the corresponding Apollo tupel . If the guess is correct, we can restore that triangle and because we guessed not only the correct symbol but also the correct tip pf the triangle in the active loop in case of a non-C triangle, we can zip immediately and restore the mesh connectivity. If the Apollo tupel indicates that the guess was wrong, we will get the rectified symbol Rs and the offset S0 in addition. This information suffices again to restore the new triangle and immediately zip it.
Figure 7 shows a horse model with 96966 triangles and 48485 vertices which could be compressed with the present method, wherein about 83% of the connectivity is correctly guessed leading to a bit rate of 1.47 bits per vertex.
Figure 8 shows an alternative approach to predict the location of the tip vertex g(c) of the next triangle in the mesh traversal .
The location of g(c) is guessed by projecting the gate E = (c.n.v, c.p.v) and the first edge of the active border Er = (c.p.v, Vr) to the plane defined by the normal vector n of vertex c.p.v. In figure 8 this projection is not demonstrated since this figure for simplicity reasons shows all triangles already in a common plane, the plane of the drawing sheet. The projection of Er is rotated around n (which in this case is perpendicular to the plane of the drawing sheet) with rotation angle α. The rotation is indicated by one of the arrows .
The rotation angle is given by the angle between the projections of E and Er multiplied with a scaling factor s = (l-l/tm) which is dependent on the number of missing triangles tm around c.p.v.
In the present case it is assumed that 6 triangles meet in the vertex c.p.v. If t triangles around c.p.v are encoded so far, the number of missing triangles is given by tm = max(6-t, 1) . Figure 8 indicates in the present example that t = 4 leading to a scaling factor s = so that Er is rotated by half of the angle between E and Er. The number of triangles meeting in each
vertex is preset depending on the circumstances, for example to 6 (as in the present example) or to 7.
The length of Er and the location in direction n have to be adjusted using the same scale factor:
Length of the projected edge = | |Er| | - s x (| |Er| | - ) ]E| )); Location in direction n in analogy.
This mapping leads to a prediction gr for the tip vertex of the next triangle. The same prediction is performed coming from the left side by rotating Ei = (c.n.v, Vi) around c.n.v. This mapping gives a second prediction gi. Finally the tip vertex g(c) is predicted by interpolation of gr and gi.
List of reference signs
T Triangle
G common edge of two triangles v vertex c corner g(c) predicted location of vertex
X vertex closest to predicted location d distance between X and g(c)
1 active loop / active border
2 already traversed area