The present invention is related to computer graphing systems. In particular, the present invention is related to transforming and rendering shapes on a computer output device.
Many of the images that appear on a computer screen or on a computer-printed page are generated by passing a base image through some form of transform. This technique allows a computer to display many different versions of the base image without storing all of the versions in long-term memory. For example, using a single base image of the letter “b”, a computer can generate large versions of the letter, can change the location or orientation of the letter on the display or page, or can skew the letter by slanting its top to the left or to the right.
In two-dimensional graphics, transforms have historically been limited to affine transforms where all parallel lines in the base image remain parallel in the transformed image. Affine transforms include scaling, rotating, skewing, and translating (i.e. changing location).
Two techniques have been developed for performing affine transforms. In one technique, each pixel of the base image is transformed separately by transforming the coordinates of the pixel. Thus, if there were one hundred pixels in an image, one hundred transforms would be performed. In the other technique, pixels within a base image are described using a set of equations known as a path. Typically, the x-coordinates of the pixels are described using one equation and the y-coordinates of the pixels are described using a separate equation. These paths are then transformed to produce a new set of equations that describe the pixels of the transformed image.
Recently, more complex non-affine transforms have been developed, which provide a three-dimensional appearance to two-dimensional objects. In a non-affine transform, lines that are parallel in the base image do not necessarily remain parallel in the transformed image. Because of the complexity of these transforms, only pixels have been transformed in the prior art. To transform more complex curves, the prior art transforms selected points along the curve and then connects the transformed points together to construct the transformed curve.
This technique for performing non-affine transforms is less than ideal because a large number of data points must be transformed for very complex curves. In addition, the exact description of the curve is lost in the transform. This can cause the curve to appear jagged in the transformed space, especially if further transforms are performed on the points approximating the curve.
The present invention provides a method and apparatus for rendering images on a computer screen. Under the invention, a portion of a base image is described using a path. The path is then transformed using a non-affine transform to produce a transformed path. The transformed path is then rendered onto the computer screen.
Another aspect of the present invention is a method for rendering curves of any order and any dimension. In particular, the present invention provides a means for converting a function of any order that describes one segment of a curve into a function that describes a different sized segment or an adjoining segment.
Under the prior art, transformed curve 250 is an inaccurate approximation of the curve that would be produced if every point along curve 220 were transformed individually. In addition, because the curve is converted into a set of selected points, the description of the curve is lost during the transform process. Because of this, transformed curve 250 can appear jagged under the prior art.
The present invention overcomes the problems of the prior art by providing a means for transforming a set of equations that describe curves and lines in a base image instead of the individual points of the base image. This produces a more accurate non-affine transform and retains the description of curves in the base image so that the curve appears smoother in the transform space.
Two non-affine transforms known as bilinear and perspective are of particular interest under the present invention. Although both are “quad” transforms, they each have different properties from each other. In a bilinear transform, a square box is transformed into a quadrilateral such that any point along an edge of the square becomes a point on the edge of the quadrilateral and the point's relative position on the square edge is the same as its relative position on the quadrilateral edge. Thus, if a point's location along a square edge is one quarter the distance of the square edge, the transformed point's location will be one quarter the distance of the quadrilateral edge. In a perspective transform, the two-dimensional base image is transformed into a three-dimensional image. The three-dimensional image is then projected onto a two-dimensional surface to generate the transformed image.
Under one embodiment of the present invention, a bilinear transform is performed by transforming equations that describe the two coordinates of a curve. In most embodiments, the equations that describe the coordinates are functions of t, where t has values between zero and one. Thus, in a u, v coordinate system:
u=fu(t) EQ. 1
v=fv(t) EQ. 2
Each coordinate x, y in the transform space is formed by combining Equations 1 and 2 using coordinate specific transform functions of the form:
x=uvαx+uβx+vγx+δx EQ. 3
y=uvαy+uβy+vγy+δy EQ. 4
where the constants, αx, βx, γx, δx, αy, βy, γy, and δy, are determined from the corner points of a quadrilateral formed by transforming a base image square having corners at u,v coordinates of 0,0, 0,1, 1,0, and 1,1.
αx=p0,x−p1,x−p2,x+p3,x EQ. 5
âx=−p0,x+p1,x EQ. 6
ãx=−p0,x+p2,x EQ. 7
äx=p0,x EQ. 8
áy=p0,y−p1,y−p2,y+p3,y EQ. 9
ây=−p0,y+p1,y EQ. 10
ãy=−p0,y+p2,y EQ. 11
äy=p0,y EQ. 12
where a subscript x designates the x coordinate of the point and a subscript y designates the y coordinate of the point.
Using equations 1 and 2 above, a line in the base image can be defined as:
u=tmu+nu EQ. 13
v=tmv+nv EQ. 14
where (nu, nv) is the starting point of the line and (mu+nu, mv+nv) is the ending point of the line. An example of a line described by Equations 13 and 14 is shown as line 300 in FIG. 5A.
Combining equations 13 and 14 with equations 3 and 4 produces a set of transformed equations:
x=(tmu+nu)(tmv+nv)áx+(tmu+nu)âx+(tmv+nv)ãx+äx EQ. 15
y=(tmu+nu)(tmv+nv)áy+(tmu+nu)ây+(tmv+nv)ãy+äy EQ. 16
which describe the x and y coordinates of a transformed curve. Equations 15 and 16 can be re-written as:
x=c2,xt2+c1,xt+c0,x EQ. 17
y=c2,yt2+c1,yt+c0,y EQ. 18
where:
c2,x=mumváx EQ. 19
c1,x=(munv+mvnu)áx+muâx+mvãx EQ. 20
c0,x=nunváx+nuâx+nvãx+äx EQ. 21
c2,y=mumváy EQ. 22
c1,y=(munv+mvnu)áy+muây+mvãy EQ. 23
c0,y=nunváy+nuây+nvãy+äy EQ. 24
Equations 17 and 18 show that a bilinear transform of a straight line results in a second order curve under the present invention.
x=q0,x(1−t)2+q1,x2t(1−t)+q2,xt2 EQ. 25
y=q0,y(1−t)2+q1,y2t(1−t)+q2,yt2 EQ. 26
where
q
0,x
=c
0,x EQ. 27
q2,x=c0,x+c1,x+c2,x EQ. 29
q
0,y
=c
0,y EQ. 30
q2,y=c0,y+c1,y+c2,y EQ. 32
Based on equations 3 and 4, it can be seen that a path of order n in the base image becomes a path of order 2n in the transformed image. Thus, under embodiments of the present invention, cubic curve 320 of
u=t3a3,u+t2a2,u+ta1,u+a0,u EQ. 33
v=t3a3,v+t2a2,v+ta1,v+a0,v EQ. 34
becomes sixth order curve 322 of
x=c6,xt6+c5,xt5+c4,xt4+c3,xt3+c2,xt2+c1,xt+c0,x EQ. 35
y=c6,yt6+c5,yt5+c4,yt4+c3,yt3+c2,yt2+c1,yt+c0,y EQ. 36
with
c6,x=a3ua3váx EQ. 37
c5,x=(a3ua2v+a2ua3v)áx EQ. 38
c4,x=(a3ua1v+a2ua2v+a1ua3v)áx EQ. 39
c3,x=(a3ua0v+a2ua1v+a1ua2v+a0ua3v)áx+a3uâxa3vãx EQ. 40
c2,x=(a2ua0v+a1ua1v+a0ua2v)áx+a2uâx+a2vãx EQ. 41
c1,x=(a1ua0v+a0ua1v)áx+a1uâx+a1vãx EQ. 42
c0,x=a0ua0váx+a0uâx+a0vãx+äx EQ. 43
c6,y=a3ua3váy EQ. 44
c5,y=(a3ua2v+a2ua3v)áy EQ. 45
c4,y=(a3ua1v+a2ua2v+a1ua3v)áy EQ. 46
c3,y=(a3ua0v+a2ua1v+a1ua2v+a0ua3v)áy+a3uâya3vãy EQ. 47
c2,y=(a2ua0v+a1ua1v+a0ua2v)áy+a2uây+a2vãy EQ. 48
c1,y=(a1ua0v+a0ua1v)áy+a1uây+a1vãy EQ. 49
c0,y=a0ua0váy+a0uây+a0vãy+δy EQ. 50
Under other embodiments of the invention, a perspective transform is performed on a path defined in the u,v plane to produce a transformed path in the x,y plane. This involves first transforming the path into a three-dimensional x′, y′, w′ space then projecting the path in the three-dimensional space onto the x,y plane.
The transform into the three-dimensional space can be represented by a matrix expression:
where u and v are each functions of t. The projection onto the xy plane is then formed by dividing the equations for the x′ and y′ coordinates by the equation for the w′ coordinate:
From equations 51, 52, and 53 it can be seen that if u and v are described by linear equations, then x and y will also be described by the ratio of linear equations. In fact, if u and v are functions of order n, then x and y are rational functions of order n.
Once the paths have been transformed, either through a bilinear or perspective transform, the transformed equations for x and y must be rendered into individual pixels on a display. When x and y are linear equations, it is relatively easy to convert the equations into individual pixels. However, for more complex x and y equations, the determination of individual pixels is computationally intensive.
Under the prior art, higher order curves are rendered by approximating the higher order curve as a series of lines. Although techniques for identifying these lines have been discussed in the prior art, specific examples have only been given for third order functions. From the examples, those skilled in the art can generate the lines for higher order curves. However, this involves generating a new set of rendering equations for each order curve, a task that is typically done by hand. The prior art does not provide an efficient means for generating the equations needed to render curves of any order. The present invention addresses this problem by providing a method for generating the equations needed to render any order curve.
Any order curve can be described using a Bezier notation. Under that notation, a curve r of order n is described by:
where qi are the Bézier control points for curve r, and Bin are Bernstein polynomials of n-th order that are defined as:
Under this description of the curve, the locations of the control points, qi, define the shape of the curve. In particular, q0 and qn define the start and end of the curve. Note that the control points have the same dimensions as the curve they represent. Thus, for the two-dimensional curves produced by a bilinear transform, the control points have two dimensions and for the three-dimensional curves produced by a perspective transform, the control points have three dimensions. Our rendering technique can be applied to Bézier curves of any order and any dimensions.
The general technique of the prior art for determining the series of lines to approximate a curve, r, is described below with reference to a curve 400 shown in
The process of FIG. BA begins at start 500 and continues at step 502 where a variable, NSTEPS, is set to one. “NSTEPS” represents the number of lines that will need to be drawn given the current segment size. Initially, the current segment size is set to the entire length of the curve.
At step 504, the curve over the current segment is examined to determine if it may be approximated by a straight line. To decide this, a straight line is drawn between control points q0 and qn, and a distance is calculated between the straight line and the other control points that define the curve. For example, in
In one embodiment, the distance between a control point and the base line is measured along a line that is perpendicular to the base line and that intersects the control point. In some embodiments, the distance is determined by calculating a distance based on the x coordinate and a distance based on the y coordinate. The distance based on x coordinate is the distance between the point's x coordinate, qx,i, and a line drawn between the endpoints of the curve, rx, describing the x coordinate. The y coordinate distance is the distance between the y coordinate of the point, qy,i, and a line drawn between the endpoints of the curve, ry, describing the y coordinates. The distance with the larger magnitude can be used as the distance between the control point and the line or the square root of the sum of the squares of these two distances can be used as the distance between the control point and the line. In general, the selected distance is known as an error vector, with each control point having a separate error vector.
At step 506 of
In step 508, the equations describing the curve are altered so that they are functions of t/2 instead of functions of t. This produces equations that describe the first half of the curve. For example, in
With the new segment size, the number of lines that needs to be generated doubles. Thus, in step 510, NSTEPS is doubled. The process then returns to step 504 to determine the error vectors for the new curve segment.
If none of the error vectors of a current curve segment exceed the threshold at step 506, the process continues at step 513 of FIG. 8B. In step 513, the last operation performed to produce the function describing the current curve segment is checked to see if it was a half-step operation. If it was, this is the largest segment that can be represented by a straight line and the process continues at state 516 where the line segment between the end points of the curve is stored in memory for later rendering. For example, if the last operation was a half-step operation to form the functions that describe curve segment 418 of
If the last operation performed was not a half-step operation at step 513, then it is possible that a segment twice the size of the current segment could be represented by a straight line.
Before doubling the segment size, the present invention checks NSTEPS to see if it is an even number at step 526. If NSTEPS is odd at step 526, such as for curve segment 424 of
If NSTEPS is even at step 526, the equations describing the curve are changed so that they are functions of 2t instead of t at step 528. This is shown in
With the doubling of the segment size, the number of lines that must be drawn is cut in half. Thus, at step 530, NSTEPS is divided by two. The process then returns to step 504 of
After a line is stored for a curve segment at step 516 of
After moving to the next segment, the process returns to step 504 of
As mentioned above, one aspect of the present invention is a method for generating the half-step, double-step and move functions for any order function that defines a curve segment. This method simplifies the creation of these functions for larger order curves, such as the sixth order curve generated above by passing a cubic curve through a bilinear transform.
Under one embodiment of the present invention, a single method is used to generate both the half-step and double step functions. In the prior art, generating the functions involves taking a current Bézier function that is in terms of t, substituting t/c for t, and reorganizing the function so that it is once again in terms of just t. This reorganization changes the control points of the Bézier function, but the order of the function remains the same. Under the method of the present invention, the reorganization of the function is simplified to a simple matrix calculation for converting the previous control points into a set of new control points.
Under one embodiment, the conversion matrix used in these calculations is formed by first re-writing the Bezier function for the curve in terms of a new variable {tilde over (t)} and a new set of control points {tilde over (q)}i. Since both functions describe the same curve, they can be set equal to each other as:
Setting t=c{tilde over (t)} and using the identity:
equation 57 provides the relationship between the control points of the two different equations as:
If the coordinates of each control point are written in matrix form such that:
then the relationship of equation 59 can be written as:
{tilde over (Q)}x=D(c)Qx and {tilde over (Q)}y=D(c)Qy EQ. 61
where D(c) is a matrix with ij components that are given by:
(D(c))ij=Bji(c) EQ. 62.
For a half-step conversion, in which a function that describes a curve segment is converted into a function that describes half of the curve segment, c is equal to ½. Using Equation 62, matrix D(c) can be easily generated for any order curve, thus providing a simple means for determining the conversion equations for any order curve. For example, a sixth order curve has a half-step matrix D(½) of:
Similarly, the double-step matrix D(2) can be easily calculated for any order curve using equation 62. For example, for a sixth order curve, D(2) is easily calculated as:
If the curves are described as an n-th order polynomial instead of using the Bezier description, each curve, r, is represented as:
If the curves resented by equations 65 and 66 are described in terms of a new variable {tilde over (t)} and a new set of parameters ãi, the following equations are produced:
Setting t equal to c{tilde over (t)}, in equations 67 and 68 produces the following relationships between the parameters:
ãi,x=ciai,x EQ. 69
ãi,y=ciai,y EQ. 70
which can be written in matrix notation as:
Ãx=Dp(c)Ax EQ. 71
Ãy=Dp(c)Ax EQ. 72
where
and
When a curve is defined in higher dimensions than two, each component will follow the same relation as Equations 71 and 72.
Embodiments of the present invention also provide a means for generating the move functions that are the result of changing a current function from representing one curve segment to representing a neighboring curve segment of equal length. Using equation 57 above, with t={tilde over (t)}+1, the identity:
can be used to generate the following relationship between the control points of the two functions:
This can be described in a matrix form as:
{tilde over (Q)}=S(n)Q EQ. 77
where
and the ijth element of S(n), Sijn, is defined as:
Thus, embodiments of the present invention provide a simple means for generating a matrix to convert a function from representing one curve segment to representing a neighboring curve segment.
If the function for the curve segment is in the form of a polynomial, equations 67 and 68 above can be used to generate the transform matrix by setting t={tilde over (t)}+1. This produces a transform matrix Sp that has ijth components defined as:
and which can be used to determine the parameters Ãx, Ãy for the new curve segment from the parameters Ax, Ay for the current segment using:
Ãx=SpAx EQ. 81
Ãy=SpAy EQ. 82
where
Embodiments of the present invention also provide a method for converting a polynomial representation of a path into a Bézeir representation of the path. The method involves generating a conversion matrix that is determined by setting the Bézier representation of the path found in Equation 54 equal to the polynomial representation of the path found in Equations 65 and 66 above. This produces:
Using the identity:
equation 84 can be modified to produce:
where
Using equation 87, an n-by-n matrix H can be created to convert the polynomial coefficients into a set of Bézier control points through the matrix equations:
Qx=HAx EQ. 88
Qy=HAy EQ. 89
where
An inverse relationship is also provided for converting Bézier control points into polynomial coefficients that describe the same path. That inverse relationship is:
Ax=GQx EQ. 91
Ay=GQy EQ. 92
where
and the ij elements of G are defined as:
Equations 62 and 79 above can also be represented as special cases for a more generalized description of selecting a new line segment. Specifically, we can describe t as extending from a point t1 to a point t2 using the following equation:
t=t1(1−{tilde over (t)})+t2{tilde over (t)} EQ. 95
where t goes from t1 to t2 as {tilde over (t)} goes from 0 to 1. Using the following identity:
the transformation rule for the coefficients are:
Equation 97 can be rewritten in terms of matrices as:
{tilde over (Q)}=K(n)(t1,t2)Q EQ. 98
with the matrix element given as:
Using this generalized description, Equation 62 can be seen as a specific case where:
and Equation 79 can be viewed as a specific case where:
Some embodiments of the present invention provide Application Programming Interfaces (API) that transform a path using the perspective or bilinear transform discussed above and then render the transformed path using the rendering technique described above. Under one such embodiment, an API for transforming and drawing a path is invoked using the API call DrawWarpPath(p, pen, dstPoints, dstCount, srcRect, srcUnit, quadMode) where p is the path to be transformed, pen is a pen type to be used when drawing the path, dstPoints is a list of edges for a quadrilateral that defines the transform, dstCount is three when the defining quadrilateral is a parallelogram and four otherwise, srcRect are points that describe a source rectangle in terms of a unit measure found in srcUnit, and quadMode is either bilinear or perspective. In other embodiments, an API for transforming and filling a path is invoked using the API call FillWarpPath(p, b, dstPoints, dstCount, srcRect, srcUnit, quadMode) where the parameters that are found in both DrawWarpPath and FillWarpPath have the same properties and the parameter b in FillWarpPath is a brush style that describes the texture, and color to be used to fill the path. In some embodiments, that path parameter passed to the API is a list of paths to be rendered on the screen.
FIG. 10 and the related discussion are intended to provide a brief, general description of a suitable computing environment in which the invention may be implemented. Although not required, the invention will be described, at least in part, in the general context of computer-executable instructions, such as program modules, being executed by a personal computer. Generally, program modules include routine programs, objects, components, data structures, etc. that perform particular tasks or implement particular abstract data types. Moreover, those skilled in the art will appreciate that the invention may be practiced with other computer system configurations, including hand-held devices, multiprocessor systems, microprocessor-based or programmable consumer electronics, network PCs, minicomputers, mainframe computers, and the like. The invention may also be practiced in distributed computing environments where tasks are performed by remote processing devices that are linked through a communications network. In a distributed computing environment, program modules may be located in both local and remote memory storage devices.
With reference to
Although the exemplary environment described herein employs the hard disk, the removable magnetic disk 29 and the removable optical disk 31, it should be appreciated by those skilled in the art that other types of computer readable media which can store data that is accessible by a computer, such as magnetic cassettes, flash memory cards, digital video disks, Bernoulli cartridges, random access memories (RAMs), read only memory (ROM), and the like, may also be used in the exemplary operating environment.
A number of program modules may be stored on the hard disk, magnetic disk 29, optical disk 31, ROM 24 or RAM 25, including an operating system 35, one or more application programs 36, other program modules 37, and program data 38. A user may enter commands and information into the personal computer 20 through local input devices such as a keyboard 40, pointing device 42 and a microphone 43. Other input devices (not shown) may include a joystick, game pad, satellite dish, scanner, or the like. These and other input devices are often connected to the processing unit 21 through a serial port interface 46 that is coupled to the system bus 23, but may be connected by other interfaces, such as a sound card, a parallel port, a game port or a universal serial bus (USB). A monitor 47 or other type of display device is also connected to the system bus 23 via an interface, such as a video adapter 48. In addition to the monitor 47, personal computers may typically include other peripheral output devices, such as a speaker 45 and printers (not shown).
The personal computer 20 may operate in a networked environment using logic connections to one or more remote computers, such as a remote computer 49. The remote computer 49 may be another personal computer, a hand-held device, a server, a router, a network PC, a peer device or other network node, and typically includes many or all of the elements described above relative to the personal computer 20, although only a memory storage device 50 has been illustrated in FIG. 10. The logic connections depicted in
When used in a LAN networking environment, the personal computer 20 is connected to the local area network 51 through a network interface or adapter 53. When used in a WAN networking environment, the personal computer 20 typically includes a modem 54 or other means for establishing communications over the wide area network 52, such as the Internet. The modem 54, which may be internal or external, is connected to the system bus 23 via the serial port interface 46. In a network environment, program modules depicted relative to the personal computer 20, or portions thereof, may be stored in the remote memory storage devices. It will be appreciated that the network connections shown are exemplary and other means of establishing a communications link between the computers may be used. For example, a wireless communication link may be established between one or more portions of the network.
Although the present invention has been described with reference to particular embodiments, workers skilled in the art will recognize that changes may be made in form and detail without departing from the spirit and scope of the invention.
The present application is related to a co-pending application U.S. Ser. No. 09/452,422, filed on even-date herewith and owned by a common assignee. The related application is entitled “WARPING TEXT ALONG A CURVED PATH”.
Number | Name | Date | Kind |
---|---|---|---|
4805117 | Fiore et al. | Feb 1989 | A |
4985849 | Hideaki | Jan 1991 | A |
5175808 | Sayre | Dec 1992 | A |
5367617 | Goossen et al. | Nov 1994 | A |
5717848 | Watanabe et al. | Feb 1998 | A |
6100894 | Goel | Aug 2000 | A |
6226418 | Miller et al. | May 2001 | B1 |
6271864 | Graham | Aug 2001 | B1 |
6542157 | Browne | Apr 2003 | B1 |