Part of the Khronos Group
OpenGL.org

The Industry's Foundation for High Performance Graphics

from games to virtual reality, mobile phones to supercomputers

Results 1 to 3 of 3

Thread: Seamless triangular patches

  1. #1
    Junior Member Regular Contributor
    Join Date
    Dec 2010
    Location
    Oakville, ON, CA
    Posts
    165

    Seamless triangular patches

    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...=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. ]

  2. #2
    Junior Member Regular Contributor
    Join Date
    Dec 2010
    Location
    Oakville, ON, CA
    Posts
    165
    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.

  3. #3
    Junior Member Regular Contributor
    Join Date
    Dec 2010
    Location
    Oakville, ON, CA
    Posts
    165
    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.
    Attached Files Attached Files

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •