graphicsgouraud

How to do gouraud shading?


Could someone explain Gouraud shading to me? I can go ahead and Google "gouraud shading", but it doesn't make much sense to me. I have 3 vertices with an (x, y) position and an int[r,g,b] color. I want to linearly interpolate (not sure what this means) the colors of the vertices to shade in the triangle. What is the logic for doing so?


Solution

  • You will perform a bi-linear interpolation.

    Scan the triangle from top to bottom, following the rows of pixels. Every row will intersect the triangle twice, along two distinct edges.

    You will first perform two linear interpolations along these edges, computing a mixture of the RGB components at the vertices, weighted with the distances to these (weight Db/(Da+Db) for color a and Da/(Da+Db) for color b).

    Then you will scan the pixels between the intersections, performing another linear interpolation between the two colors you just computed.

    This way you will fill the triangle with a smooth gradient, in a way that will make it continuous with neighboring triangles, if any.