Yes, the vertex shader can do that. I’m not the best with shaders, but they basically work like this:
- The vertex shader is run for each vertex, taking your VertexDeclaration (usually some combination of Position, Normal, Texture Coordinates, Color) as input, and producing vertex output (Position + any custom info like Normal, Color, Position in a different reference frame).
- The pixel shader is run for each pixel of the triangle, taking the input from the vertex shader output (Position, Normal, etc.) interpolated between the values for the corner vertices, and producing a Color.
So the easiest way to re-orient your triangles is to do some transformation in the vertex shader based on the normal and the camera position. If you only want to reorient some triangles with this shader, then maybe also set a flag in the shader per mesh, or even a flag on the VertexDeclaration per triangle.