A T-vertex is a vertex which belongs to one polygon, but does not belong to a neighbouring polygon, even though the vertex falls on the edge of the neighbouring polygon. In other words, although the T-vertex touches the neighbouring polygon, the polygon does not "know" about it; it is not in the polygon's list of vertices.
T-vertices create artifacts in Gouraud shading, because there are two sources of information for the colour of the pixel the T-vertex falls on:
T-vertices arise from improper mesh subdivision. For some reason, some polygon in the mesh may need to be sub-divided into several smaller polygons. This happens, for example, in radiosity solvers, where the search for a shadow's boundary leads the solver to cut some patches in half. Improper subdivision happens when we cut the polygon without considering neighbouring polygons. Cutting polygons adds new vertices, and some of these new vertices need to be explicitly added to the neighbours.
Preventing T-vertices requires us to store information about polygon neighbours. One popular data stucture for this purpose is called the Winged-Edge. A winged edge stores information about an edge, including:
\ / e3\ e4/ \ / \ / e5 v1*--------------- | | | F1 | F2 | | e8 | ----------*v2 / \ e7/ \e6 / \
Algorithms: