# Convert a polygon mesh into a b-spline surface

$$\textbf{Problem:}$$

Getting a $$\textit{polygon-mesh}$$ as input, I have to construct a surface that looks exactly to the given input. My task is to generate a $$\textit{b-spline}$$ surface that exactly looks like the connected polygon mesh. It is obvious that my $$\textit{b-spline}$$ surface has to have a degree of one in both directions $$\textit{u}$$ and $$\textit{v}$$.

$$\textbf{Output:}$$

As an output for my solution. I have to generate a matrix of $$\textit{control point}$$ that represent that generated surface.

One property of this matrix is that each elements of each row and column are connected with each others. If our control points matrix is a $$n \times m$$ matrix, then let $$C_i$$ a column of this matrix with $$C_i = $$ then there must exist path in the polygon from $$e_{1i}$$ to $$e_{mi}$$.

One thing to consider if there is no edge between $$e_{ji}$$ to $$e_{(j+1)i}$$, we can construct one as long as this edge lies inside the polygon.

$$\textbf{my trivial idea}$$

Assuming that the polygon has $$n$$ nodes. I create $$n$$ other nodes inside the polygon near each original node. I create then a $$2 \times n$$ matrix. The first row contains all the points constructing the polygon. Second row contains the corresponding additional inserted node. In order to connect two additional inserted nodes, i have to make sure that the line between two nodes is kept inside the polygon.

This idea works only for simple structure and the complexer is the polygon the hard to find these additional points.

Any good solutions maybe ?.

• To be clear, when you say "looks exactly like the given input", you mean exactly exactly, correct? As in, you want to create a b-spline model with only flat faces and sharp edges, and no true curves whatsoever? – Aaron Rotenberg Dec 12 '19 at 21:59
• Yes! indeed, a bspline surface with a degree of one, – Mohbenay Dec 13 '19 at 8:10

## 1 Answer

Without any assumptions on the input mesh, you cannot in general get a single b-spline surface that replicates an arbitrary polygon mesh. You would need the mesh to be connected, but you would also need some fairly significant assumptions about the mesh topology. At the very least, you would want the input mesh to be manifold. (It might be possible to contrive a method for creating a single b-spline that exactly matches an arbitrary polygon mesh except on a set of measure zero, but in many cases the spline would have to be extremely degenerate and overlap with itself in strange ways.)

On the other hand, if you are allowed to use multiple disconnected b-spline surfaces in the output, then the problem is easy.

A degree-1 b-spline surface with a 2x2 control point matrix and no internal knots is just a quadrilateral with bilinear interpolation in the interior. In particular, if you set two adjacent control points to the same location in 3D space, you get a triangle. (c.f. Bézier triangle)

Any polygon mesh can be subdivided into a triangle mesh through well-known methods. Once you have done that, you can just separately convert each triangle into a 2x2 b-spline surface.