1. Field of the Invention
This invention relates generally to the field of computer graphics and, more particularly, to high performance graphics systems for rendering graphical objects based on a decomposition of the graphical objects into triangles.
2. Description of the Related Art
A graphics system may be configured to receive a stream of vertices from a host application executing on a host computer. The vertices specify triangles in a 3D coordinate space. The triangles represent a collection of 3D objects in the 3D world coordinate space. The graphics system may operate on the triangles to generate a video stream which represents the view of a virtual camera (or virtual observer) in the 3D world coordinate space. In particular, the graphics system may compute color values for each pixel that resides within each triangle (i.e. the two-dimensional footprint of the triangle in screen space). This process of assigning color values to pixels (or samples) internal to triangles is referred to herein as triangle rasterization.
Each triangle is defined by three vertices. Each vertex comprises a coordinate pair (X,Y), a color vector and texture coordinates. One prior art method for rasterizing a triangle operates by walking along horizontal scan lines from a left edge to a right edge of the triangle. Within a scan line, color values for successive pixels may be generated by repeated addition of pixel increment values (one pixel increment value per color). Successive scan lines may be processed in the order of increasing Y coordinate (i.e. the vertical screen space coordinate) until the entire triangle is covered. Thus, it is important to identify the vertex with the smallest Y coordinate and the vertex with the largest Y coordinate.
It is noted that the identity of the left edge or the right edge may change through the rasterization process. For example, given a triangle with vertices VA=(0,0), VB=(10,10) and VC=(0,20), it is observed that edge VAVB will be the right edge for scan lines having Y coordinate less than 10, and edge VBVC will be the right edge for scan lines having Y coordinate greater than 10. Thus, for a generic triangle, it is important to identify the vertices having minimum, maximum and intermediate Y coordinates values. The minimum and maximum Y coordinates define the first and last scan lines, and the intermediate Y coordinate defines where an edge boundary change will occur.
The portion of a scan line that intersects the triangle is referred to as a span. Each span is bounded by a left boundary point on a left edge and a right boundary point on a right edge of the triangle. The X coordinates of the left (right) boundary points for successive spans may be computed by repeatedly adding a left (right) edge increment starting with the X coordinate of the vertex VA. The left (right) edge increment may equal the slope (xcex94X/xcex94Y) of the left (right) edge. Thus, the slopes of the left and right edges are computed before the spans are processed.
Observe that an edge slope may attain a large magnitude if its Y displacement xcex94Y is small relative to its X displacement xcex94X. Thus, it may be necessary to assign a large number of bits to the slope variables.
One drawback of the above triangle rasterization method is that tall skinny triangles may not be handled efficiently. A tall skinny triangle intercepts a large number of scan lines, but each scan line may have only a few pixels. Thus, a significant portion of the rasterization time may be consumed in the overhead of generating successive scan lines.
The manufacturers of 3D graphics systems are constantly under pressure from consumers to provide increased rendering performance. Thus, there exists a need for a system and method which could rasterize triangles with higher throughput rates.
A graphics system may be configured to operate on a collection of vertices to determine mappings from an initial ordering to secondary and tertiary ordering. The initial order corresponds to the ordering of the vertices in an input buffer. The secondary (tertiary) ordering corresponds to the ordering of the vertices along a triangle major (minor) axis. The graphics system may compute horizontal and vertical displacements along edges of the triangle in the initial ordering, and use the signs of the horizontal displacements and vertical displacements to access one or more mapping tables which determine the mappings. The mappings may be used to rasterize the triangle in terms of pixels (or samples).
In one set of embodiments, the graphics system comprises a buffer memory, a presetup unit and a setup unit. The presetup unit may be configured to compute a horizontal edge displacement and a vertical edge displacement for each edge of a triangle in response to receiving the three vertices defining the triangle. The presetup unit may identify a major displacement as the larger of the horizontal edge displacement and vertical edge displacement for each edge, identify a controlling edge as that edge of the triangle which has the largest major displacement, and identify a major axis coordinate as the coordinate (i.e. horizontal or vertical coordinate) corresponding to the major displacement of the controlling edge. In other words, the major axis coordinate is the horizontal (vertical) coordinate if the horizontal edge displacement of the controlling edge is larger (smaller) than the vertical displacement of the controlling edge.
The presetup unit determines a first ordering code corresponding to the ordering of the vertices with respect to the major axis coordinate in response to the signs of the corresponding edge displacements (i.e. the edge displacements along the major axis coordinate). In addition, the presetup unit may determine a second ordering code corresponding to the ordering of the vertices with respect to a coordinate complementary to the major axis coordinate in response to the signs of the edge displacements along the complementary coordinate. The first and second ordering codes may be determined by table lookup. The presetup unit may store the ordering codes, the vertices and the edge displacements in a buffer memory.
Setup unit accesses the vertices and edge displacements from the buffer memory according to the first ordering and the second ordering using the first and second ordering codes respectively, and computes the rate of change of image attributes (e.g. red, green, blue) with respect to the major axis coordinate and the complementary coordinate. These rates of change are referred to herein as axial ordinate rates, and the image attributes are referred to as ordinates.
The graphics system may further include a sample fill unit, a frame buffer and a pixel computation unit. The sample fill unit may identify a set of sample positions interior to the triangle, compute sample ordinate values (e.g. red, green, blue) for the interior sample positions using the axial ordinate values, and store the sample ordinate values in the frame buffer. The pixel computation unit may then filter the sample ordinate values to determine pixels values which form a displayable image. In one embodiment, the pixel values are stored in the frame buffer for subsequent display. In another embodiment, the pixel values are immediately converted to analog form and transmitted to a video output port (for display on one or more display devices). In some embodiments, pixel values may be provided to a display device in digital form.