Hot answers tagged

5

For what it's worth, the glTF Tutorials contain a section on Skinning that shows how the raw vertex and joint weight data feed into a vertex shader to distort the mesh. If you do design your own format to hold this, you'll need tooling to export it from 3D content creation software, as well as software to read the new format into your application. Using an ...


4

If require that all faces have the same number of sides $s$ and require that all vertices also have a certain valency $t$. We see that the following relation between edges, and faces hold for a regular mesh: $$s\cdot f = 2e,$$ $$t\cdot v = 2e.$$ Substitution in the Euler-Poincare formula yields: $$\left(\frac{1}{s} + \frac{1}{t} - \frac{1}{2}\right)e = 1 - g$...


4

I have a few suggestions: Partition the volume by using tetrahedra within the mesh, and outside of it (in the cube). Set the probability to sample each tetrahedron to its volume divided by the inside/outside volume of the mesh. Sample a tetrahedron based on the above probability, then sample a point (uniformly) within the chosen tetrahedron. Discretize ...


4

What you want is something that can perform the inside-outside test for meshes. The simplest solution would be to use Trimesh's implementation which can be ran with Embree to accelerate ray queries. I recommend you check out recent literature on neural implicit representations if you want more alternatives. Your problem arises when one wants to learn 3D ...


4

I don't think it's trying to represent anything in particular. In CG there is a concept of textures, which is a bit like painting the surface of an object a specific color/look. For example, on a car you may want to paint scratches and dust on the surface. Here they have created a human model from their capture data, and when visualising it they have ...


3

There is a trick to shadows like this, but only this exact usecase. While you can certainly draw a true shadow using many techniques. The trick is you can just scale the object flat onto the floor plane. So all you need to do is draw the object 2 times one time with a matrix that is scaled to zero on the floor axis. You can also use this technique to draw ...


3

After a fair bit of reading and skimming through papers, I have yet to find a good definition other than "indent" for what I want to remove, but I have found answers to pretty much everything else. The concept of a "Visual Hull" is what I was looking for regarding a mesh that doesn't have these indents. While the Wikipedia page, and a ...


3

There are numerous approaches to setting up tangent bases on a mesh, and unfortunately, no totally universal standard for how they are calculated. Tangents are based on the mesh's UV mapping, so that the tangent vector points (at least roughly) along the U axis in texture space, and the bitangent along the V axis. This means each triangle in a mesh has its ...


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


2

There can be much dispute on which work is considered best or state-of-the-art. It will depend on your application. However, I'd like to recommend to give a look at this paper by Keenan Crane et al. It is impressive in terms of computational speed. Also, It is simple to implement. Crane et al. Geodesics in heat: A new approach to computing distance based on ...


2

This refers to the order of vertices within a face. Typically in 3D graphics, faces are wound counterclockwise, so that if you're looking from outside of the tetrahedron/mesh, all the front faces will have their vertices in counterclockwise order. (See here and here for more explanation.) This is a "right-hand rule" in that if the fingers of your ...


1

Generally it boils down to finding the nearest element. Computing distance to it. Checking the normal to tell if inside or out. There are a number of edge cases. Also you usually compute the "angle weighted psuedonormal" as its called. Here's the usual reference "Signed Distance Computation using the Angle Weighted Pseudo-normal" by J. ...


1

In CGAL, there is the Arrangement package that allows to build a topologically valid planar partition given a set of segments, and the Regularized Boolean Set-Operations that provides boolean operations between polygons.


1

One approach for stuff like this that I just heard is to do raymarching on simple analytical shapes that approximate the mesh, so you basically create an abstract coarse SDF representation of the mesh in question and raymarch some shadows. I have heard Iñigo Quilez mention it and talking on how he gave a conference about it once but I haven't found it, I ...


1

I can't tell you how exactly each 3d modeling software calculates shadows since I don't know their implementations. However, I guess the usual candidates for real-time shadow calculations are used. These are: Shadow mapping Shadow Volumes To my knowledge, the second one isn't that popular since it is more complicated and usually computationally more ...


1

I'm not familiar with the exact nuances of the STL format, but here are some answers on general computer graphics principles: In the source file, the Vertex Normals are specified and in the destination, the face normal of the triangles are present which are different than the normals one would get by (a-b) x (a-c), where a, b, c are the vertex coordinates ...


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


1

Textures are applied to the faces of a mesh, so textures cannot be anywhere there isn't a face for it to appear on. "Adding more length" to a mesh pretty much implies moving some of the vertices. I don't think you're going to get around that. Now if you are assembling a game world, it's quite common to have modular mesh pieces that can be aligned ...


1

For a mesh that is not closed then, by definition, there is no interior or exterior, only points on the surface and points that are not on the surface. So your first step is to make the hand a "Closed Concave Polyhedron" by closing any openings it has. This can be done relatively simply by defining a plane where the hand is open. (such as at the ...


1

Assuming a value is assigned to each vertex of the mesh and we use purely linear interpolation, then there will be a constant gradient vector within each tetrahedron. Linear interpolation can be expressed using barycentric coordinates, like $$ f(x,y,z) = f_1 w_1(x,y,z) + f_2 w_2(x,y,z) + f_3 w_3(x,y,z) + f_4 w_4(x,y,z) $$ where $f_1 \ldots f_4$ are the ...


1

If anyone ever runs into this. There is a mathematical property of the half edge, that makes it such that any proper half edge can be expressed as an even permutation of vertices. This sounds abstract but the gist of it is very simple. Since there is an even number of HE by definition, you can store your half edges such that if $n$ is even then $n + 1$ is ...


1

There are plenty of algorithms for generating meshes from point clouds. I am going to suggest looking at the libraries CGAL and PCL, if only because their documentation has excellent references which should give you ideas on where to look in the literature if you need to roll your own. Jonathan Shewchuk also has some more 2.5D-ish algorithms that may suit ...


1

I can see two ways of doing "smoothing". The first one is smoothing what's mostly related to the appearance (in your case the normals). The other way is smoothing the geometry itself. In the first case you usually update the normals based on the neighbours. Say $\mathcal{M}$ is a mesh, $T$ is a triangle in $T$ and $n(T)$ is the normal at $T$. One ...


Only top voted, non community-wiki answers of a minimum length are eligible