POV-Ray : Newsgroups : povray.advanced-users : bicubic bezier and hermite patches : Re: bicubic bezier and hermite patches Server Time
29 Jul 2024 02:35:42 EDT (-0400)
  Re: bicubic bezier and hermite patches  
From: andrel
Date: 17 Mar 2004 17:14:23
Message: <4058CD96.7040803@hotmail.com>
Sascha Ledinsky wrote:

> I asked because I'm interested in generating (at least G1 continuous) 
> patches over a mesh of splines (cubic bezier curves). It should allow 
> for 3-, 4- and 5-sided patches and different "levels of detail", i.e. 
> two small patches, connecting seamlessly to one side of a larger patch.
We have had a discussion about 3 and 5 sided polygons a couple
of weeks ago in a p-b-i tread called: Patches for arbitrary topology
shapes. As outlined there, there are some ways of generating n-sided
polygons with cubic sides and control over the tangent, so you can
make smooth surfaces combining them with bicubic patches. These are
not implemented in POV (yet) so you can not use them.

> If case of 4-sided patches the spline-mesh specifies 12 of the 16 
> control-points, so I'm looking for a method to compute the missing 4 
> control-points. 
For first order continuity the inner control points on both
sides of an edge and the control point on the edge should be on a
straight line. That does not completely specify the point, but
it severely restricts it at least.
> Setting the twist vectors to 0 is fine if the mesh has 
> only rectangular patches, but it leads to cracks when joining 
> non-4-sided patches.
> 
> I thought that twist vectors might be easier to handle than bezier 
> controlpoints.
No, especially not if you use non-4-sided patches. The Hermite
formulation is easiest in 4-sided and (I think) very complicated
otherwise.
Bezier is very easy to control. That is in fact why it is so
popular.
One way of creating a smooth surface actually consists of
manupulating only the inner 4 points of a patch and compute
the others by interpolating.
> Another thing related is splitting non-4-sided patches into 4-sided ones.
One obvious way to create a triangle with a bicubic patch is
to make two sides conform to the same cubic equation.
These two sides have 7 points that you will need to compute
from the 4 control points from the adjacent 4-sided patch.
Not very difficult, but there will probably be 'cracks' in
the surface as POV will internally convert them to smooth
triangles and it will not use the same points on both
patches. So this is not a good approach.
Another technique is to fuse the 4 control points on one
side into one point. With this technique you also lose the
symmetry, but you can always divide a triangle into three
smaller ones and restore it.


> -sascha
> 
> 
> andrel wrote:
> 
>> Ok, I wil put the generation of the four 16 by 16 matrices
>> on my todo list. It may be a few days before I have some time
>> to do it. If you have access to Matlab it will be even easier,
>> then I could send you some of my scripts.
>>
>> Further down on my list will be to create some macros for
>> the conversion and even further down to create some
>> tutorial pages on bicubic patches in POV and how to convert
>> from one representation to the other (unless someone already
>> did that of course).
>>
>>     Andrel
>>
>> Sascha Ledinsky wrote:
>>
>>> As I was able to compute all but the four inner bezier controlpoints 
>>> (or the hermite twist vectors) I searched the internet again and 
>>> found the following equation to convert from bezier to hermite (or 
>>> vice versa):
>>>
>>> d^2P/dudv(0,0) = 9(P00-P011+P10-P11)
>>>
>>> I'll have to try it, but it looks promising.
>>>
>>> Anyway, thanks a lot for your help!
>>> -Sascha
>>>
>>>
>>> andrel wrote:
>>>
>>>> Have you solved your ploblem yet.
>>>>
>>>> Today in the train I realized that my suggestion
>>>> is correct, but that it is too much influenced by
>>>> the fact that I do have a program to solve the inverse
>>>> of a 16 by 16.
>>>>
>>>> Rethinking it from the perspective of: 'how would
>>>> I solve this by hand?' often gives better results.
>>>> - there are only three types of points in the (realized)
>>>>  patch: corner points (4), side points (8) and center
>>>>  poinys (4)
>>>> - cornerpoints are in all representations the same, so
>>>>  we do not have to apply any interpolation.
>>>> - sidepoints are only influenced by the two cornerpoints
>>>>  on that side and in case ot the bezier patch the control
>>>>  points on that side, and in the hermite case by the
>>>>  2 derivatives along the side. All in all we need 4
>>>>  numbers only to do the conversion from one representation
>>>>  to the other. We use symmetry to apply the same 4 to
>>>>  every sidepoint of course.
>>>> - For the center points we need only 16 numbers to
>>>>  describe the conversions.
>>>> All in al we need compute only 4+16 numbers to do
>>>> all conversions. so the 16 by 16 matrix is a bit overkill
>>>> (I will keep using it because it greatly somplifies
>>>>  my code but that is another issue).
>>>>
>>>>   Andrel
>>>> Sascha Ledinsky wrote:
>>>>
>>>>> I've got to delve into that.
>>>>> Thanks a lot for your help!
>>>>> -Sascha
>>>>
>>>>
>>>>
>>>>
>>>>
>>


Post a reply to this message

Copyright 2003-2023 Persistence of Vision Raytracer Pty. Ltd.