New answers tagged

0

If projecting them onto the plane of the vertex normal doesn't do the job, I'm not sure what would. There isn't any unambiguous way to do this in 3D. Imagine the new triangle that you are on there joining is perpendicular to the existing two triangles? What would you want the answer to be in that case? I suppose you could try "voting" by dotting ...


1

It's defining the gradient in terms of barycentric coordinates. It is similar to the derivation in this answer, only rearranged a bit algebraically using the fact that the three barycentric coordinates sum to one. $$ \begin{aligned} f(\mathbf{u}) &= f_i B_i(\mathbf{u}) + f_j B_j(\mathbf{u}) + f_k B_k(\mathbf{u}) \\ &= f_i (1 - B_j(\mathbf{u}) - B_k(\...


0

I dont know what you are using to calculate the Cotan, the accuracy should different on the implementation. But you could do more accurate calculations yourself by approximating the values using taylor expansions. Or find some other librar that can do it more accurate. Also, make sure you are using high prec datatypes.


1

When solving the equation $(M - tL_C)u = \delta_\gamma$, you effectively have to invert the operator: $$ u = (M - tL_C)^{-1} \delta_\gamma $$ Note that while the individual operators $M$ and $L_C$ are only local, containing information about the individual vertices and edges of the mesh, the inverse operator is decidedly not local. Inversion is a global ...


3

Maybe you can find a heuristic to detect when it gets stuck (e.g. gradient magnitude is too small, or it stays on the same triangle or returns to a recently visited triangle too many times in a row, or it hasn't moved at least X distance over the last N steps, etc) and just take a random step in some direction, e.g. to some randomly chosen neighboring ...


2

One possibility would be to create a bit array with 1 bit per half-edge. When you start iterating, initialize them all to 1, then clear the bits of each half-edge and its partner as you iterate. The iteration can be done using __builtin_clz (GCC, clang) or _BitScanReverse (MSVC) [edit: or std::countl_zero in C++20!] to efficiently extract the next 1-bit ...


Top 50 recent answers are included