PDA

View Full Version : Seamless triangular patches



Yandersen
10-22-2015, 02:29 PM
Hi!
Recently I found a very helpful paper describing how to make the edge between triangular bezier patches match with the desired level of continuity:
http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.85.3877&rep=rep1&type=pdf
Basically, to make the normals at the edges match (C1 continuity) we need to make edge "panels" (see the document) coplanar and symmetric.

Well, it does make two surfaces match, indeed. But what if the patch is surrounded by 3 other surfaces? The corner panels seem to pose a problem here as those are common for two edges. Assume that we adjusted panels on one side making one shared edge match. Then we try to adjust another edge' panels - that means we readjust corner panels again making the first edge disjoint again!

So here is what I thought: what if we shrink the problematic corner panels to a degenerate triangles corresponding to the corner points? Will it break the dependency between edges? Or there is some rule stating that panels must not be a degenerate triangles?

So far I tried that on quintic bezier surfaces (see page 2, figure 1). First, I aligned edge panels to make 2 surfaces match with C1 level. Then I shrunk points P140,P041,P131 of the first surface to the same spot - P050, so the panel P050P140P041 degenerated to a single dot and the panel P041P131P032 became a line. I did the similar to the each edge of the surfaces. As the result, surfaces that were matching before, now are C1 continuous only at the corner points, not along the edge. :(
Is there a chance that with higher degree surfaces this trick will work or it will not work at all no matter what?

[The reason I need to break the dependency between edges is that I want patches to be independent of each other, so a patch can be described as 3 PN points and match another arbitrary patch without any adjustments. Therefore each edge must be defined by two corner PN points only. ]

Yandersen
10-26-2015, 12:30 AM
Indeed, it works for surfaces with level 7 and above! But it requires 2 corner panels to shrink into degenerate triangles to fully break the dependency between triangle's edges. There is more to investigate though, but preliminary results show that it is possible to construct independent surfaces based on just 3 PN handles and make the patches meet with C1 continuity.

Yandersen
10-28-2015, 02:56 AM
Here is an application in the attachment demonstrating two independent surfaces constructed from two random triangles (random vertices and normals) with one common edge. Surfaces are built independently from each other using just 3 PN-handles as input for each, but there is real C1 continuity over the edges. The algorithm is inside the Tessellator.hpp. See ReadMe.txt before starting an app for keys description.