4 corner gradient

Keith Whitwell keith at tungstengraphics.com
Thu Jun 28 03:29:04 PDT 2007


Glynn Clements wrote:
> Tom De Man wrote:
> 
>> This might be slightly off topic but I can't resist asking the experts
>> here:
>>
>> Using the i915 I try to create a 4 corner gradient rectangle using 2 3D
>> primitive triangles. I get a visible diagonal line between the two
>> triangles (which is ugly). If I use software routines to make a gradient
>> rectangle it looks good.
>> I've tested making the rectangle with 4 triangles (all to the center), but
>> I get a cross then (although less visible).
>>
>> Is this something due to how triangles are colored, due to some 3D param
>> or is it inevitable ?
> 
> Gouraud shading uses linear interpolation. Essentially, each of the
> two triangles will be mapped to a planar (flat) triangle in RGB space. 
> As the 4 vertices (red, green, blue, white) aren't co-planar, there
> will be a discontinuity (corner) along the diagonal where the two
> triangles meet.
> 
> OTOH, bilinear interpolation between the vertices will produce a
> continuous surface (specifically, a ruled surface) with no
> discontinuities.
> 
> AFAIK, you cannot achieve bilinear interpolation using OpenGL
> primitives, although you may be able to get an adequate approximation
> by using a sampled Bézier patch (glMap2, glEvalMesh2, etc).
> 

You could do it pretty simply with a pixel shader.

Or by manual decomposition of the quad into smaller, piece-wise linear 
triangles.

Keith




More information about the xorg mailing list