5
\$\begingroup\$

I have a 2D Mesh object generated at runtime painted all with uniform color. I want that mesh to have its color fade to transparent color close to the edges.

Despite I searched everywhere I could not find any solution. Unfortunately I'm not into Shader programming enough to build logically my solution.

EDIT:According to @wondra's reply my mesh is not fan shaped. It has a non regular hole in it.

How can I achieve this?

\$\endgroup\$
2
  • \$\begingroup\$ You'll need to know which triangles have neighboring triangles. Then, whenever a triangle has an edge without a neighboring triangle you can lower the opacity on that edge's verts. \$\endgroup\$
    – RandyGaul
    Jan 26, 2015 at 20:14
  • 2
    \$\begingroup\$ maybe if you post an image of your mesh we can get a closer idea on which effect you are trying to achieve \$\endgroup\$
    – Heisenbug
    Jan 28, 2015 at 14:49

1 Answer 1

1
\$\begingroup\$

The simplest and probably fastest option would be to iterate your mesh and set edges vertices transparency to 0 (or any other desired value). This assumes you v got (fan shaped)adjacency information:

foreach(Triangle t in mesh)
{
   for(int i = 0; i < 3; i++)
   {
      if(t.Adj[i] == - 1) // or ==null, either way, on the edge
      {
         t.Vert[i].a = 0.f;
         t.Vert[(i + 1) % 3].a = 0.f;
      }
   }
}

In case you have opposite adjacency, it is just another mod. If you dont have neither, you can compute it. You can also distribute the alpha to adjected triangles based on distance for more in-depth smoother fadeout(just another inner loop or stack).

Other approach would be to compute extremes(x,y min/max of mesh) and map x,y on some function, which simplest would be for example if(vert.X is less than 10% of width near to extreme) vert.A = 0.f;. Though this would work well only for convex-shaped mesh, best near-rectangle shaped.

\$\endgroup\$
2
  • \$\begingroup\$ I edited my question to point out that the mesh is not fan shaped. Then, following the latter approach that some function where should be written? in the shader? \$\endgroup\$
    – Leggy7
    Jan 26, 2015 at 15:47
  • \$\begingroup\$ @Leggy7 Not mesh fan shaped, but adjecency information: the adj[i] can point either to the neighbour opposite to vert[i] or the next one in ccw order(=fan shaped). Either way you need to know which triangles are next to eachother. Otherwise you would have to find which vertices are on the edge by some other way. \$\endgroup\$
    – wondra
    Jan 26, 2015 at 19:13

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .