AU2005201932A1 - Parametric patch colour blend rendering - Google Patents

Parametric patch colour blend rendering Download PDF

Info

Publication number
AU2005201932A1
AU2005201932A1 AU2005201932A AU2005201932A AU2005201932A1 AU 2005201932 A1 AU2005201932 A1 AU 2005201932A1 AU 2005201932 A AU2005201932 A AU 2005201932A AU 2005201932 A AU2005201932 A AU 2005201932A AU 2005201932 A1 AU2005201932 A1 AU 2005201932A1
Authority
AU
Australia
Prior art keywords
patch
colour
parametric
rendering
cell
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Abandoned
Application number
AU2005201932A
Inventor
Herve Soulard
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Canon Inc
Original Assignee
Canon Inc
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Canon Inc filed Critical Canon Inc
Priority to AU2005201932A priority Critical patent/AU2005201932A1/en
Publication of AU2005201932A1 publication Critical patent/AU2005201932A1/en
Abandoned legal-status Critical Current

Links

Description

S&F Ref: 711910
AUSTRALIA
PATENTS ACT 1990 COMPLETE SPECIFICATION FOR A STANDARD PATENT Name and Address of Applicant: Actual Inventor(s): Address for Service: Invention Title: Canon Kabushiki Kaisha, of 30-2, Shimomaruko 3-chome, Ohta-ku, Tokyo, 146, Japan Herve Soulard Spruson Ferguson St Martins Tower Level 31 Market Street Sydney NSW 2000 (CCN 3710000177) Parametric patch colour blend rendering The following statement is a full description of this invention, including the best method of performing it known to me/us:- 5845c -1- PARAMETRIC PATCH COLOUR BLEND RENDERING Field of the Invention The present invention relates generally to computer graphics output generation and, in particular, to a method and apparatus for rendering colour blends across parametric patches. The present invention also relates to a computer program product including a computer readable medium having recorded thereon a computer program for rendering colour blends across parametric patches.
Background Many methods have been developed in two-dimensional (2D) computer graphics in recent times to improve the quality of output. Rendering of graphical objects that have a solid colour or a linear or radial blend between, two colours has also been performed for many years. More recently methods such as Gouraud shaded triangle meshes and blends across bicubic patches have been adapted from three-dimensional (3D) computer graphics -to 2D computer graphics in order to greatly increase the shapes and styles of blends that may be produced.
Methods are known for subdividing bicubic tensor patches Coons patches with cubic B16zier boundaries), representing irregularly shaped colour blends into triangle meshes. These triangle meshes may then be rendered using conventional (3D) computer graphics methods.
Self-overlapping bicubic patches and meshes of such patches may be analysed by dividing patches into cells and grouping cells into regions. These regions may then be rendered in a predetermined order.
However, known methods for rendering patches utilize recursive subdivision, a method that is not amenable to all implementation platforms. Embedded systems, for instance, have limited stack space and so cannot afford deep levels of recursion.
711910.doc -2- One known method for rendering patches is to subdivide a patch into numerous small cells such that each cell is close in data size to an output pixel. Again this method is not amenable to embedded systems where memory is at a premium.
The publication "Surface Algorithms Using Bounds or Derivatives", Computer Aided Geometric Design No. 3, 1986, pp 295-311, by Filip et al (hereinafter called Filip) discloses a non-recursive method for patch subdivision. However, this method deals primarily with three-dimensional (3D) surfaces. Filip does not address issues that arise when rendering colour blends across parametric patches, namely, non-planarity when a colour blend is interpolated bilinearly across a patch, and correct detection and rendering of self-overlapping 2D patches.
Thus, a need clearly exists for a more efficient method of rendering parametric patches, which improves computer graphics output quality.
Summary It is an object of the present invention to substantially overcome, or at least ameliorate, one or more disadvantages of existing arrangements.
According to one aspect of the present invention there is provided a method of rendering a parametric patch, said patch being defined by a patch geometry and the colour of said patch varying according to a colour surface, said colour surface mapping points of a parametric space in which said patch is defined to colour values, said method comprising the steps of: detenrmining a first tessellation step for said patch in each parametric coordinate direction as a function of said colour surface; determining a second tessellation step for said patch in each parametric coordinate direction as a function of said patch geometry and a tolerance value; parametrically tessellating said patch into cells using the minimum of said first and second tessellation steps in each parametric coordinate direction; 711910.doc -3determining one or more colour values to be associated with each said cell depending on said colour surface; and rendering each said cell using the associated colour values in order to render said patch.
According to another aspect of the present invention there is provided an apparatus for rendering a parametric patch, said patch being defined by a patch geometry and the colour of said patch varying according to a colour surface, said colour surface mapping points of a parametric space in which said patch is defined to colour values, said apparatus comprising: first tessellation step determining means for determining a first tessellation step for said patch in each parametric coordinate direction as a function of said colour surface; second tessellation step determining means for determining a second tessellation step for said patch in each parametric coordinate direction as a function of said patch geometry and a tolerance value; tessellating means for parametrically tessellating said patch into cells using the minimum of said first and second tessellation steps in each parametric coordinate direction; colour value determining means for determining one or more colour values to be associated with each said cell depending on said colour surface; and rendering means for rendering each said cell using the associated colour values in order to render said patch.
According to still another aspect of the present invention there is provided a computer program for rendering a parametric patch, said patch being defined by a patch geometry and the colour of said patch varying according to a colour surface, said colour surface mapping points of a parametric space in which said patch is defined to colour values, said program comprising: 711910.doc -4code for determining a first tessellation step for said patch in each parametric coordinate direction as a function of said colour surface; code for determining a second tessellation step for said patch in each parametric coordinate direction as a function of said patch geometry and a tolerance value; code for parametrically tessellating said patch into cells using the minimum of said first and second tessellation steps in each parametric coordinate direction; code for determining one or more colour values to be associated with each said cell depending on said colour surface; and code for rendering each said cell using the associated colour values in order to render said patch.
According to still another aspect of the present invention there is provided a computer program product having a computer readable medium having a computer program recorded therein for rendering a parametric patch, said patch being defined by a patch geometry and the colour of said patch varying according to a colour surface, said colour surface mapping points of a parametric space in which said patch is defined to colour values, said computer program product comprising: computer program code means for determining a first tessellation step for said patch in each parametric coordinate direction as a function of said colour surface; computer program code means for determining a second tessellation step for said patch in each parametric coordinate direction as a function of said patch geometry and a tolerance value; computer program code means for parametrically tessellating said patch into cells using the minimum of said first and second tessellation steps in each parametric coordinate direction; computer program code means for determining one or more colour values to be associated with each said cell depending on said colour surface; and 711910.doc computer program code means for rendering each said cell using the associated colour values in order to render said patch.
Other aspects of the invention are also disclosed.
Brief Description of the Drawings One or more embodiments of the present invention will now be described with reference to the drawings and appendices, in which: Fig. 1(a) shows a set of control points that define a mapping from a parametric space to an output space; Fig. 1(b) shows colour component values at each corner of a patch; Fig. 2 shows a self-overlapping patch; Fig. 3(a) shows a patch subdivided into cells; Fig. 3(b) shows the patch of Fig. 3(a) with each cell divided along a diagonal; Fig. 4 shows a mesh of patches; Fig. 5(a) shows the two patches of the mesh of Fig. 4 in more detail; Fig. 5(b) shows a triangulation of the patches of Fig. Fig. 5(c) shows a portion of the triangulation of Fig. 5(b) in more detail; Fig. 6 shows the boundary curve of the two patches of Fig. 5(a) subdivided into three segments; Fig. 7(a) is a graph showing the red component of a parametric patch as a function of parametric coordinates over the domain of the parametric patch; Fig. 7(b) is a graph showing an approximation of the red component of Fig. 7(a); Fig. 7(c) is a graph showing another approximation of the red component of Fig.
7(a); Fig. 8 is a flow diagram showing a method of rendering a parametric patch; Fig. 9 shows the patch to be rendered in accordance with the method of Fig. 8; Fig. 10(a) shows a patch comprising cells; 711910.doc -6- Fig. 10(b) shows a cell of the patch of Fig. 10(a) divided into two triangles; Fig. 11 is a flow diagram showing a method of rendering a self-overlapping patch; Fig. 12(a) shows two triangles whose bounding boxes do not overlap; Fig. 12(b) shows two non-overlapping triangles whose bounding boxes overlap; Fig. 12(c) shows two overlapping triangles; Fig. 13 shows two triangles; Fig. 14 shows a triangle intersecting a plane; Fig. 15 is a schematic block diagram of a general purpose computer upon which methods described may be practiced; Fig. 16 shows one configuration of software modules for implementing the methods described herein; Fig. 17 shows high level flow and processing of data when the PDF interpreter of Fig. 16 interprets a PDF Document; Fig. 18(a) shows the PDF Document of Fig. 17 inputted into a Decryptor when decryption and decompression is required; Fig. 18(b) shows the PDF Document of Fig. 17 inputted into a Decompressor when decryption is not required and some decompression is required; and Fig. 19 shows high level flow of data and data processing at a high level within the Stream Renderer of Fig. 17 as the Stream Renderer processes tokens of a content stream to generate render engine commands and associated data; and Figs. 20(a) to 20(d) show examples of strip definitions and traversal order for different ambiguity resolution rules.
Detailed Description including Best Mode Where reference is made in any one or more of the accompanying drawings to steps and/or features, which have the same reference numerals, those steps and/or features have 711910.doc -7for the purposes of this description the same function(s) or operation(s), unless the contrary intention appears.
It is to be noted that the discussions contained in the "Background" section and that above relating to prior art arrangements relate to discussions of documents or devices which form public knowledge through their respective publication and/or use. Such should not be interpreted as a representation by the present inventor(s) or patent applicant that such documents or devices in any way form part of the common general knowledge in the art.
A method 800 (see Fig. 8) of rendering a parametric patch is described below. The method 800 may be used to render a region of shaded colour specified in terms of a colour blend across a parametric patch. The patch to be rendered may belong to a larger mesh of patches, as will be described below. The method 800 subdivides a patch, or each individual patch of a mesh of patches, into triangles, such that each triangle may be Gouraud shaded. The method 800 produces a smooth gradation of colour with no or minimal visual artefacts. The method 800 may be used for patches where there is no selfoverlap. The method 800 may also be used for patches with self-overlap, but in this case further processing is required to resolve ambiguities. An example of such processing is method 100, described below, for rendering 2D self-overlapping patches. Further, the method 800 may be used to render patches of a mesh of patches, where some of the patches overlap others, so long as the patches are rendered in the correct order. In this instance, patches that overlap others overwrite earlier rendered patches.
A method 1100 of rendering a 2D self-overlapping patch will also be described with reference to Fig. 11. Where a patch is self-overlapping, the triangles into which the patch has been subdivided or clipped portions thereof may be rendered so as to produce a result that is consistent with a commonly used mathematical definition of resolution of overlap, as will be described below.
711910.doc -8- The triangles generated in accordance with the methods described herein may be rendered into pixels using known rendering methods.
The methods described below may be practiced using a general-purpose computer system 1500, such as that shown in Fig. 15 wherein the processes of Figs. 1 to 14 may be implemented as software, such as an application program executing within the computer system 1500. In particular, the steps of the described methods are effected by instructions in the software that are carried out by the computer. The instructions may be formed as one or more code modules, each for performing one or more particular tasks. The software may also be divided into two separate parts, in which a first part performs the described methods and a second part manages a user interface between the first part and the user. The software may be stored in a computer readable medium, including the storage devices described below, for example. The software is loaded into the computer from the computer readable medium, and then executed by the computer. A computer readable medium having such software or computer program recorded on it is a computer program product. The use of the computer program product in the computer preferably effects an advantageous apparatus for rendering parametric patches. Alternatively, the described methods may be implemented in an embedded system, for example, in a printer.
The computer system 1500 is formed by a computer module 1501, input devices such as a keyboard 1502 and mouse 1503, output devices including a printer 1515, a display device 1514 and loudspeakers 1517. A Modulator-Demodulator (Modem) transceiver device 1516 is used by the computer module 1501 for communicating to and from a communications network 1520, for example connectable via a telephone line 1521 or other functional medium. The modem 1516 can be used to obtain access to the Internet, and other network systems, such as a Local Area Network (LAN) or a Wide 711910.doc -9- Area Network (WAN), and may be incorporated into the computer module 1501 in some implementations.
The computer module 1501 typically includes at least one processor unit 1505, and a memory unit 1506, for example formed from semiconductor random access memory (RAM) and read only memory (ROM). The module 1501 also includes an number of input/output interfaces including an audio-video interface 1507 that couples to the video display 1514 and loudspeakers 1517, an I/O interface 1513 for the keyboard 1502 and mouse 1503 and optionally a joystick (not illustrated), and an interface 1508 for the modem 1516 and printer 1515. In some implementations, the modem 15116 may be incorporated within the computer module 1501, for example within the interface 1508. A storage device 1509 is provided and typically includes a hard disk drive 1510 and a floppy disk drive 1511. A magnetic tape drive (not illustrated) may also be used. A CD- ROM drive 1512 is typically provided as a non-volatile source of data. The components 1505 to 1513 of the computer module 1501, typically communicate via an interconnected bus 1504 and in a manner which results in a conventional mode of operation of the computer system 1500 known to those in the relevant art. Examples of computers on which the described arrangements can be practised include IBM-PC's and compatibles, Sun Sparcstations or alike computer systems evolved therefrom.
Typically, the application program is resident on the hard disk drive 1510 and read and controlled in its execution by the processor 1505. Intermediate storage of the program and any data fetched from the network 1520 may be accomplished using the semiconductor memory 1506, possibly in concert with the hard disk drive 1510. In some instances, the application program may be supplied to the user encoded on a CD-ROM or floppy disk and read via the corresponding drive 1512 or 1511, or alternatively may be read by the user from the network 1520 via the modem device 1516. Still further, the software can also be loaded into the computer system 1500 from other computer readable 711910.doc media. The term "computer readable medium" as used herein refers to any storage or transmission medium that participates in providing instructions and/or data to the computer system 1500 for execution and/or processing. Examples of storage media include floppy disks, magnetic tape, CD-ROM, a hard disk drive, a ROM or integrated circuit, a magneto-optical disk, or a computer readable card such as a PCMCIA card and the like, whether or not such devices are internal or external of the computer module 1501. Examples of transmission media include radio or infra-red transmission channels as well as a network connection to another computer or networked device, and the Internet or Intranets including e-mail transmissions and information recorded on Websites and the like.
The described methods may alternatively be implemented in dedicated hardware such as one or more integrated circuits performing the functions or sub functions of Figs.
1 to 14. Such dedicated hardware may include graphic processors, digital signal processors, or one or more microprocessors and associated memories.
The input to the method 800 of rendering a parametric patch is shown in Figs. l(a) and The input comprises the geometry of a patch to be rendered in accordance with the method 800. For example, Fig. l(a) shows a set of control points py (xy yo) that define a mapping from a parametric space to an output space.
The input to the method 800 also comprises the colour of the patch to be rendered.
For example, Fig. 1(b) shows the colour component values cy at each corner of the patch.
These colour component values cy may be bilinearly interpolated across the domain.
The domain e [0,1] 2 may be used. Bilinearly interpolated colour at parametric coordinates v) may be defined in accordance with Equation as follows: c(u, v)=(coo 0 C,ou)(1- v)+(co 0 1 (1) 711910.doc 11 In the following description colour is specified in terms of red green and blue components, this being a commonly used colour configuration referred to as RGB. Different colour spaces CMYK), grey-scale blends, and other configurations are also possible for use with the described methods by changing the number and names of the components.
The principles of method 800 described herein have general applicability to rendering patches. However, for ease of explanation, the steps of the method 800 are described with reference to a bicubic B6zier patch. It is not intended that the present invention be limited to the described method. For example, the invention may have application to other types of patches such as Coons patches or surfaces of higher or lower degree.
A B6zier surface may be defined by a collection of control points poo, py, pmx.
The Bezier surface is a mapping from the [0,1] 2 parametric domain to a continuous surface S in space in accordance with Equation as follows: S v)=(Sx v),Sy v)) (ui(1-u)m-i nv(1-v)n j Pi (2) i=0 j=0 For a bicubic surface m n 3.
Each of the four boundaries of a B6zier patch is a B6zier curve f or f defined by control points along the boundary. For example, the boundary curve between the control points poo and pmo may be determined in accordance with Equation below: (1 pmo (3) Equation may be determined by setting v 0 in Equation 711910.doc 12- Fig. 4 shows a mesh of patches 400. A common boundary 403 between two patches 401, 402 of the mesh 400 is assumed to be the same curve. This is achieved by patches 401 and 402 sharing some common control points.
To render a bicubic patch specified using Equations and a parametric coordinate (uo, v o) may be determined for each pixel (xo,yo), such that S(uo,Vo)=(xo,y 0 The colour of (xo,yo) may then be determined using Equation applied to (uo,vo). This comprises either analytic inversion of Equation which is difficult, or numerical inversion of Equation at every pixel (xo,yo), which is an extremely laborious task.
Fig. 2 shows a self-overlapping patch 200. Input may be provided to the method 800 where an output point Q, as shown in Fig. 2, is multiply defined. That is, there are two or more points in the parametric domain (u 2 ,v 2 which map to the same point S S (u2,v 2 In this instance, there is an ambiguity as to which colour to display at an output pixel containing point Q, whether c (ul,vi) or c (u 2 ,v 2 However, according to a commonly used rule for ambiguity resolution, the colour that corresponds to the largest value of v, or, if all values of v are equal, then the largest value of u, may be selected for displaying the output pixel.
Mesh Subdivision (or Tessellation) Filip discloses a method for determining a lower bound on the number of subdivisions of a patch in order for a resultant triangle mesh to be parametrically correct to within some error bound. In accordance with the method of Filip, a parametric patch S(u,v) may be subdivided into an ns x ms cell mesh by determining points S ,0 o i n s ,0 j m s to form cells as shown in Fig. and then dividing eachs mscell 301) along a diagonal into two triangles as shown in Fig. 3(b).
each cell 301) along a diagonal into two triangles as shown in Fig. 3(b).
711910.doc 13 Filip proves that the error of a linear approximation to a C 2 function f(t) in the range s sup d f a t b is a) 2 U b where "sup" indicates the supremum (least upper 8 a t b dt 2 bound) over the specified range. The number of subdivisions nf of a curve f(t) over the range that keeps the error of the linear approximation within a bound 6 may be determined in accordance with Equation as follows: sup d 2 f(4) n, 0t41 t 2 Filip shows that the error of a planar approximation to a C 2 surface S over a triangular area T AABC, where B A (11,0) and C A is less than or equal to 1 2M I +2111 2
M
2 +122M 3 8 sup 82S where M sup a S(u, v)eT 9u 2 sup a2S (u,v)eT 9uav sup 2
S
S=(u,v)eT v- 2- Filip then discloses a method for determining the number of subdivisions ns and ms in u and v directions respectively in accordance with Equations (5A) to (5G) as follows: If M >0 and M 3 >0, r (M +2kM 2 k2 M 3 ns =kms where k Mi/M 3 and M 1
M
2 and M 3 are suprema of the second derivatives over e [0,1] 2 and Es is a surface error tolerance.
711910.doc If M 1 >0 and M 3 0, ms 1 ns (M 2
+M
2 2 +8M 1 1 IfMi= 0 andM 3 0, ms M2 M 2 2 +8EM 3 88S n, 1 If M M 3 0, then n s m s (M 2M 2
M
3 n s ms (M 2 /4es) Thus, if ns and ms are determined as described above, the parametric patch may be subdivided as shown in Fig. 3(b) so that every point in each triangle is parametrically correct to within surface error tolerance Es. A "parametric distance" as defined in Filip is bounded by Es as follows: sup t u,v)-S(u,v)J <e, v) eT where t(u,v) is a planar approximation taking a point in the triangle T to coordinate space.
When a patch is part of a mesh of patches as shown in Fig. 4, a problem with the methods described by Filip is that common edges between two patches may be subdivided to different degrees. This leads to "cracks" in the rendered output.
Fig. 5(a) shows the adjacent patches 401 and 402 of Fig. 4 in more detail. The patch 402 has been divided into cells 501, 502, 503 and 504. If application of equations (5A) to 711910.doc 15 as appropriate results in patch 401 being divided into three cells 512 to 514 along boundary 403 but patch 402 divided into two cells 501 and 503 along the same boundary, the result will be a triangulation 500 as shown in Fig. The triangulation 500 comprises triangles 531, 532, 533, 534, 535, 536, 537, 538, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, and 552 as shown in Fig. A portion 501 of the triangulation 500 of Fig. 5(b) is shown in greater detail in Fig. After rendering the triangles shown in Fig. 5(b) cracks appear such as the shaded region 560 in Fig. which lies between triangles 547 and 551 of patch 401 and triangle 536 of patch 402.
To avoid the cracks 560) of Fig. Filip suggests that a boundary curve be subdivided based on the curve error bound E in accordance with Equation The curve error bound E is not necessarily the same as the surface error tolerance Es. Setting C 6s improves the rendering of patch boundaries, as disclosed by Filip. Patch subdivision points points 512, 513 and 520) may be moved to a nearest curve subdivision point, and additional triangles may be formed as required. Thus, supposing common boundary 402 required subdivision into three segments, patch 402 may be subdivided as shown in Fig. 6.
In Fig. 6, point 520 of Fig. 5(a) is moved to coincide with point 513, so that cell 503 is divided into triangles 604 and 605 (instead of 535 and 536). Cell 501 is divided into three triangles 601, 602 and 603 (instead of 531 and 532) since an additional curve subdivision point occurs at point 512 on common boundary 403.
Colour Considerations The methods disclosed by Filip are inadequate for rendering colour blended patches.
The problem is that although the geometric shape of each cell in the subdivision of a cubic patch can be adequately approximated by two triangles, the colour blend across the 711910.doc 16patch cannot necessarily be adequately approximated by Gouraud shading the triangles, which the method of Filip yields.
The reason for this inadequacy of the method disclosed by Filip is that in each colour component Red), Gouraud shading is planar, while bilinear interpolation is not. So, for example, the red component value across cell 504 of Fig. 5(a) is defined by a bilinear interpolation function, while the triangles 537 and 538 of Fig. 5(b) into which cell 504 is divided are rendered using Gouraud shading as planar patches.
As an example, Fig. 7(a) is a graph showing the red component R as a function of parametric coordinates u and v over the domain [0,1] 2 of a parametric patch. In the example, the red value R is at a minimum value at and and is at a maximum value at and At points in between the minimum value and the maximum value, the value of R is bilinearly interpolated. The graph of Fig. 7(a) shows a curved surface 700 popularly known as a "saddle". An approximation of the curved surface 700 by two triangles 701 and 702 will provide either a maximum value of R along diagonal to as shown in Fig. or a minimum value of R along diagonal to as shown in Fig. Neither of the approximations of the curved surface 700 of Fig. 7(b) and Fig.7(c) is an adequate approximation to Fig. and if used would yield visibly erroneous output. If the cell 504 were rendered using the method of Filip, the results would clearly be unacceptable.
A solution to this problem is to determine how many subdivisions of a patch are required in order to adequately approximate the colour surface c by a triangular mesh. A similar method to that which was described for subdividing S may be used.
For c defined as in Equation (1) sup a 2 c [0,1]2 Bu 711910.doc 17sup 0 2
C
[0,1]2 au 2 01 application of Equation (5G) provides the number of subdivisions in accordance with Equation as follows: n= V~jc 00 -CIO +c 1 -COjj/4cF) (6) where 6, is a colour error tolerance.
The modulus operation may be determined, for a colour c as follows: 11c~l= JR 2
+B'
Alternatively, an independent result may be determined for each colour component and the maximum of the independent results utilized in accordance with Equations (7A) to (7D) as follows: 11C mrax(nR,nG~nB) (7A) where nR V ROO -RIO RI Rol/4sj) (7B) nG GI 0
+G
11
G
0 j/48c) (7C) nB V 13 0 0 -B1 10 BI B 0 1 (7D) 71 1910.doc -18- The value ~c may be set to a number less than the smallest colour difference perceivable by a human viewer or to a number less than the smallest colour difference representable in computer memory 1506). For example, if an 8 bit byte is used to represent a colour component, then colour values range from 0 to 255. An error tolerance of 0.5 ensures that the error will not be noticeable. A larger tolerance will increase the performance of the computer system 1500 as the larger tolerance will yield fewer subdivisions, but will result in slightly lower quality of output.
Rendering the Patch The method 800 of rendering a parametric patch will now be described in detail.
The method 800 may be implemented as software resident in the hard disk drive 1510 and being controlled in its execution by the processor 1505. The method 800 uses the maximum of the number of subdivisions required for accurate geometry and the number of subdivisions required for accurate colour interpolation. As such, the degree of subdivision is adequate for both the geometry of a patch as represented in Fig. 1(a) and for the colour blend across the patch as represented in Fig. 1(b).
The method 800 begins at step 805, where the processor 1505 obtains the specifications of the patch comprising the control points pu and colour values. At the next step 810, the processor 1505 determines the minimum number of subdivisions required for accurate colour blend interpolation using either Equation or the set of Equations 7(A) to Then at the next step 815, the processor 1505 uses Equation to determine a minimum number of subdivisions nn, nf, n3 and nf4, for each of the boundaries 901, 902, 903 and 904 of the patch, as shown in Fig. 9. At step 820, the processor 1505 uses the Equations (5A) to (5G) to determine ns and ms, the minimum number of subdivisions of the patch in the u and v parametric directions respectively.
711910.doc 19- The method 800 continues at the next step 825, where the processor 1505 determines the actual number of subdivisions within the patch in accordance with Equations (8A) and (8B).
n max(ns,n (8A) m' =max(ms,n) (8B) A problem with using a different number of subdivisions along a boundary than to within a patch is that if a boundary has many fewer segments than the patch, then long, thin triangles may be produced. For example, Fig. 10(a) shows a patch 1000 tessellated into cells 1002). In Fig. 10(a), n' m 4, nf 4 nf=2 nf 3 3 and nf4 2.Fig. 10(b) shows the cell 1002 divided into two triangles 1011 and 1012, which have some long edges. Long edges may produce Mach bands and other artefacts when the patch 1000 is rendered.
Filip discloses that reducing the number of subdivisions (in this example, from n' 4 to n ,2 1) mean that locally the conditions for ensuring that the surface error is less than tolerance s, is not met. Similarly, for affected cells, the colour interpolation is not guaranteed to be within error tolerance Ec. For this reason, the number of subdivisions of an edge may need to be increased based on physical size of the edge to keep triangle edges within a certain bound. Thus, the total length of an edge li may be determined and divided by the maximum allowable triangle side length l,,m to determine a possibly increased number of subdivisions of an edge in accordance with Equation as follows: max(nf, /lnx]) (9) 711910.doc Alternatively, as each triangle is created along a boundary, the length of the edge of the triangle on that boundary may be compared with imax, and, if greater, the triangle can be subdivided. So long as identical steps are performed on both sides of a common boundary, no cracking problems will occur.
Some cells, such as the cells 1001 and 1003, are triangular. After subdivision into two triangles, one of the two triangles will be degenerate. For this reason, degenerate triangles may be accounted for by, for example, detecting that two vertices are coincident and discarding such triangles.
An optimization relating to step 825 is that when two patches share a common boundary, the number of subdivisions determined for a boundary when processing the first of the two patches may be stored in memory 1506. In this instance, when processing the second patch, the number of subdivisions does hot need to be determined.
Following step 825, at step 830 the processor 1505 subdivides each of the cells of the patch to be rendered and generates triangles for rendering. For each triangle vertex, the following information is determined at step 825: vertex parametric coordinates (pu,Pv) vertex position (Px,Py) vertex bilinearly interpolated colour (pR,PG,PB).
For example, cell 1004 in Fig. 10(a) has four vertices 1101, 1102, 1103 and 1104. Cell 1004 will be subdivided into two triangles, one with vertices 1101, 1102 and 1104, and the other with vertices 1101, 1103 and 1104. The parametric coordinates of the vertices 1101, (ii) 1102, (iii) 1103 and (iv) 1104 are shown below: O (0.25,0) nf, 711910.doc -21 (ii) 2, J (0.5,0) n (iii) i (0.25,0.25) n ms (0.5,0.25) The vertex position (Px,py) may be determined from the parametric coordinate (Pu,pv) using Equation The vertex colour (PR, PG, PB) may be determined from the parametric coordinate (pupv) by bilinear interpolation of the colours at the patch comers as follows: PG, PB) COO (1-Pu) (1-Pv) C0 1 u(1-v) Cio(1-u)v CI1UV The method 800 proceeds by testing at step 835 whether or not there are any triangles remaining to be rendered. If there are, the method 800 proceeds to step 840 where the vertex parametric coordinates, position and colour are determined as described above.
At step 845 the triangle is rendered using Gouraud shading. For example, for a point y) in the triangle having vertices Pl=(x,yl) colour Ci,P 2 (x 2 ,y 2 ):Colour C 2 and
P
2 (x 2 ,y 2 ):Colour C 2 C(x, y)=C(Xstrt (x X star) AC C f- (C2 -C \Y2 -Y1 x, y y (x 2 -x) Y2 -Y1 711910.doc 22 AC= (c 3 -c 1 )(y 2 2 -Cl)(v 3
-Y)
(x 3 x,)(y 2 2 x )(y 3
Y)
The method 800 then returns to step 835 to process any further remaining triangles. If, at step 835, the processor 1505 determines that all triangles have been rendered, then the method 800 concludes. Further patches may need to be rendered using the method 800.
Alternative rendering methods may be used to render the parametric patch. For example, all of the triangles may be created and stored in a display list configured within memory 1506. Further, the triangles may be sorted in scan line order and the output may be produced scanline by scanline.
Rendering three-dimensional surfaces The methods disclosed by Filip may be used for three dimensional surfaces where S(u,v) e R Sy(u,v), In particular, the method disclosed by Filip for determining the number of subdivisions required for accurate colour interpolation may be used for three-dimensional surfaces.
One difference between processing two and three-dimensional surfaces is in the rendering. The colour values interpolated at triangle vertices for two-dimensional surfaces typically represent reflectance coefficients rather than colours. These reflectance coefficients are typically combined with light source and viewpoint data to determine the actual vertex colours. Hidden surfaces need to be considered for three-dimensional surfaces. For example, back-face culling and depth buffer algorithms may be used to ensure that the nearest surface to the viewpoint is displayed at each pixel.
Self-overlapoine oatches 711910.doc -23 The method 800 may be used for patches where there is no self-overlap. Further, the method 800 may be used to render patches of a mesh of patches, where some of the patches overlap others, so long as the patches are rendered in the correct order. In this instance patches that overlap others overwrite earlier rendered patches.
However, special considerations are required for self-overlapping patches such as the patch 200 of Fig. 2. The method 1100 of rendering a self-overlapping patch will now be described with reference to Fig. 11. The method 1100 may be used for rendering a collection of triangles, such as those typically produced by step 830 of the method 800, wherein overlapping triangles are rendered in such a way as to satisfy the rule that points with greater value of parameter v are displayed in preference to those with lesser value of v, and for points with equal value of parameter v, points with greater value of parameter u are displayed in preference to those with lesser value of u.
The method 1100 divides a patch into strips of cells, each strip corresponding to a given range of v. For example, patch 401 of the triangulation 500 is divided into a first strip containing triangles 541,542, 543 and 544, a second strip containing triangles 545, 546, 547 and 548, and a third strip containing triangle 549, 550, 551 and 552. The first strip contains triangles whose v value ranges from 0 to 1/3, the second strip contains triangles whose v value ranges from 1/3 to 2/3, and the third strip contains triangles whose v value ranges from 2/3 to 1. Although the patch 401 shown in Fig. 5 is not selfoverlapping, consider a self-overlapping patch with analogous subdivision. If the first strip was rendered first and the second strip was rendered second and a portion of the second strip overlapped a portion of the first strip, the patch would be rendered correctly because the portion with greater v would overwrite the portion with lower v.
However, if a portion of a strip overlapped a portion of the same strip, then there is no guarantee that the later written portions correspond to regions of greater values of v, since both portions contain a sub-range of v values from the range. Furthermore, if 711910.doc 24 adjustments were made to cells along the boundary as shown for example in Fig. 6, then triangles with an edge along the boundaries corresponding to u 0 or u 1 may have a different range of v parametric values than other triangles in the same strip.
The method 1100 processes triangles one by one and decides whether each triangle may be rendered unchanged, or whether the triangle to be rendered needs to be clipped so that the triangle does not overwrite an already rendered portion of the patch that has a greater v value.
The method 1100 may be implemented as software resident on the hard disk drive 1510 and being controlled in its execution by the processor 1505. The method 1100 begins at step 1105 where the processor 1505 subdivides the patch into triangular cells.
In one implementation, step 1105 may be implemented using the steps 805 to 830 of the method' 800. Alternative methods may also be used to subdivide the patch to be rendered into cells. For example, recursive subdivision may be used at step 1105 or the patch may be subdivided into a predetermined number of cells.
The method 1100 deals with overlap by comparing each triangle with relevant earlier rendered triangles. Relevant earlier rendered triangles may be stored in memory 1506 for reference in a processed triangle list. Initially, there are no rendered triangles so at step 1110, the processed triangle list is initialized to an empty list.
At the next step 1115, the method 1100 commences a loop over each strip of cells of the subdivided patch in ascending order of v range. Cells in each of ns strips are processed at step 1115. Alternatively, if recursive subdivision was used to subdivide the patch into cells, disjoint strips of cells may be defined such that a strip of cells contains all cells that are used to render the patch over a subset of the parametric space of the form v) e [0,1]x [v A, vB 711910.doc 25 As in the preferred embodiment, a loop is carried out over all strips in ascending order of v range.
When loop 1115 has finished processing all strips, the method 1100 terminates at step 1120, and rendered output should correspond to the required result with self-overlaps rendered correctly. However, for each strip, the method 1100 processes the series of steps commencing from step 1125.
At step 1125, the method 1100 commences a loop over each triangle within the current strip. Consider for example, the triangles illustrated in Fig. 6 derived from patches 401 and 402 in Fig. 5. Supposing patch 401 was being rendered. Then for the first strip, loop 1125 will iterate over triangles 542, 541, 544 and 543 in that order. The order of increasing u at constant v is to satisfy the ambiguity resolution rule that when two overlapping points have the same v, then the value of u indicates the priority. With the method of subdivision as described above, common boundary constraints means that cell vertices along a common boundary may be moved, additional triangles may be introduced, and triangles may become degenerate. Supposing patch 402 was being rendered. Then for the first strip, loop 1125 will iterate over triangles 603, 602, 601, 534 and 533, incorporating an additional triangle created since the number of subdivisions nf 2 in the common boundary is greater than the number of subdivisions ns' inside patch 402.
For each triangle T in the strip, loop 1125 performs the series of steps commencing from step 1135. After the last triangle in the strip has been processed, the method 1100 proceeds to step 1165 as will be described below.
At step 1135, a loop over each triangle S in the processed triangle list is commenced. Initially, this list is empty at step 1110. However, in general, this list will contain all triangles that have already been processed and which span a range in v that may affect triangles in the current strip. In other words, if v 2 is the minimum v occurring 711910.doc 26 in the current strip, then any processed triangle with maximum value v 1 of v, such that v v 2 needs to be stored in the processed triangle list configured within memory 1506.
For each triangle S in the processed triangle list, loop 1135 performs the series of Isteps commencing from step 1140. After the last triangle in the list has been processed, the method 1100 proceeds to step 1170 as will be described below.
In the series of steps commencing from step 1140, the method 1100 determines whether current triangle T is affected by already rendered triangle S. The outcome is Oeither that the current triangle T is unaffected by the already rendered triangle S or that triangle S and triangle T overlap and over part or all of the overlapping area, triangle S has a greater value of v. In the latter case, the current triangle T needs to be clipped in whole or in part so that the current triangle does not overwrite parts of the triangle S where the value v in S is greater.
At step 1140, the processor 1505 determines whether there is any overlap between the triangles S and T. Figs. 12(a), 12(b) and 12(c) show three possible orientations of the two triangles S and T. Step 1140 firstly checks whether the bounding boxes of triangles S and T overlap. This is an efficient test that eliminates more expensive calculation and handles the vast majority of cases. Triangles whose bounding boxes do not overlap, such as the example shown in Fig. 12(a), do not affect each other, and the method 1100 continues at step 1135. If, however, the bounding boxes of the triangle S and T do overlap, then an accurate intersection test needs to be performed. The intersection test distinguishes cases such as the example in Fig. 12(b), in which the triangles S and T do not overlap, from cases such as the example in Fig. 12(c), where the triangles S and T overlap. For overlapping triangles, one triangle the triangle T) may lie entirely within the other triangle the triangle If there is no overlap, the method 1100 again proceeds with a next iteration at step 1135. If there is overlap, the method 1100 proceeds to step 1145.
711910.doc 27 To determine whether triangle T with vertices T 1 (xl,yl), T 2 (x2,y2), and T 3 (x2,y2), does not overlap triangle S with vertices S1, S 2 and S 3 the processor 1505 determines whether any one of following cases are true: vertices T 1 T2 and T 3 all lie on the opposite side of line S 1
S
2 than vertex S 3 vertices TI, T 2 and T 3 all lie on the opposite side of line S 2
S
3 than vertex S1; vertices Ti, T 2 and T 3 all lie on the opposite side of line S 3
S
1 than vertex S 2 vertices Si, S 2 and S 3 all lie on the opposite side of line TIT 2 than vertex T3; vertices S1, S 2 and S 3 all lie on the opposite side of line T2T3 than vertex Ti; and vertices S1, S 2 and S 3 all lie on the opposite side of line T 3
T
1 than vertex T 2 If none of the conditions to are true, then the triangles S and T overlap. To test if point P lies on an opposite side of line AB than point Q, the processor 1505 compares the sign of AB x AQ with that of AB x AP, where product (xi, y) x (x2y2) x2 yl x1y2.
Thus, if (AB x AQ) (AB x AP) 0, then points P and Q are on opposite sides of the line AB or at least the point P is on the line AB.
At step 1145, the processor 1505 determines whether at every point at which the triangles S and T overlap, the v values of triangles S and T are such that the v value for the triangle T is greater than the v value for the triangle S. If so, the triangle T may be rendered without clipping, and the method 1100 continues with the next iteration of step 1135. If not, then the method 1100 proceeds to step 1150. To determine the condition of step 1145 the processor 1505 defines the triangles T and S in three-dimensional xyv space. To achieve this, each vertex Ti is treated as a point Ti (xi,Yi, vi) utilizing both the spatial coordinates of the vertex Ti and the v coordinate of the parametric coordinates (ui, v 1 of the vertex Ti. If either of the following conditions are satisfied: all vertices of triangle T are "above" the plane containing triangle S, or all vertices of triangle S are "below" the plane containing triangle T, 711910.doc -28then the test in step 1145 returns "yes" and the triangle T can be rendered so that the triangle T overwrites the triangle S. The vertex Ti =(xi,Yi,Vi) is referred to as being "above" a plane, if the value vi is greater than or equal to the v coordinate value of the plane at point The vertex Ti =(xi,yi,vi) is referred to as being "below" a plane, if the vertices is less than or equal to the v value at the same point on the plane.
For example, Fig. 13 shows two triangles T and S. In Fig. 13, vertex T, of triangle T has a greater v value than the corresponding point T that lies on plane P containing triangle S. To determine whether a point is "above" a plane defined by three points y v i 1,2,3 the processor 1505 determines whether: X Xi Y- Yi V v det-v /dx2 2 1 2 et x2, Y Y x 3 Y3 -Y1 v 3 -V Ix3 y3 -yl In step 1150, if the triangle S cannot be eliminated as a triangle that affects the rendering of the triangle T, then two further cases need to be distinguished. At step 1150 the processor 1505 tests whether any one of the following conditions are true: all vertices of triangle T are "below" the plane containing triangle S or all vertices of triangle S are "above" the plane containing triangle T.
If either of conditions or directly above are true, then triangle T and S do not intersect in three-dimensional xyv space and so triangle T is not visible within the bounds of the triangle S. Following step 1150, the method 1100 proceeds to step 1155 where the triangle T is clipped so as to hide any part of the triangle T that overlaps the triangle S.
711910.doc 29 In step 1155, and also in step 1160 to be described below, when triangle T is to be clipped it is advantageous to record the path which triangle T is to be clipped against but to delay the clipping operation until loop 1135 has finished. If clipping is performed immediately, then the clipped result is no longer guaranteed to be a triangle, making comparison with further triangles in the processed triangle list much more difficult.
Furthermore, many rendering systems have facilities for rendering polygons subject to clipping by other polygons, so it may be advantageous to perform clipping during rendering step 1170, as will be described below.
Returning to step 1150, if neither of the conditions and are true, then the method 1100 proceeds to step 1160 where a more complex clipping operation is performed. In this instance, the only part of triangle S that can hide triangle T is the part that is "above" the plane in which T lies. Thus, at step 1160 the processor 1505 determines the portion of triangle S that is above plane T by clipping S using the known Sutherland-Hodgman clipping algorithm. This creates a new polygon S'.
Triangle T is then clipped so that triangle T is hidden within the boundary of the 2D polygons'.
To form the polygon the Sutherland-Hodgman algorithm is applied in threedimensioned xyv space. This algorithm was first published in "Reentrant Polygon Clipping", by I.E. Sutherland and G. W. Hodgman, Communications of the ACM 17(1), pp 32-42, January 1974. In step 1160, the Sutherland-Hodgman algorithm is applied by first finding a vertex among vertices 1 S 2 and 3 of triangle S that is above the plane of triangle T, which may be referred to as P. For example, the vertex of triangle S that is above the plane P may be This vertex forms the first vertex of the clipped polygon The Sutherland-Hodgman algorithm then proceeds by examining the edge between 711910.doc the vertex and an adjacent vertex 2 If the edge segment 1S§ 2 intersects the plane P then the point of intersection is added to Then S2 is examined and if S2 lies above the plane P, then 2 is added to Then the edge S2 S3 is tested for intersection against the plane P and if the edge $2§3 intersects, the intersection point is added to S'.
Then, if 83 is above the plane P, 53 is added to Finally, if the edge from S3 back to S, intersects the plane P, then the intersection point is added to In each of the above tests, if the test fails, no addition is made to S' at that point.
Fig. 14 shows a triangle S intersecting a plane P. In the example of Fig. 14, vertices S, and S2 are visible and S 3 is clipped. SiS2 does not intersect the plane P, S2S 3 intersects the plane P at point A, and $3S, intersects the plane P at point B. The clipped result is the polygon 1 $2 AB.
Both steps 1155 and 1160 continue to loop 1135, where the next triangle in the processed triangle list is processed in the same manner. As a result, a triangle T may have multiple clip paths associated with the triangle T. When all triangles in the processed triangle list have been compared with triangle T, loop 1135 terminates and the method 1100 proceeds to step 1170. At step 1170, triangle T is rendered subject to the zero or more clip paths associated with the triangle T during loop 1135. The method 1100 then proceeds to step 1175, where the processor 1505 adds the triangle T to the processed triangle list. The method 1100 then proceeds to the next iteration of loop 1125.
When all triangles in a strip have been processed loop 1125 terminates and the method 1100 continues with step 1165. At step 1165, all triangles in the processed triangle list that cannot affect the triangles in the following strip are removed from the 711910.doc -31 list. Step 1165 improves the efficiency of the algorithm and reduces the time to process all of the triangles in the patch to be rendered.
In the method of patch subdivision described above, cells along boundaries of the patch are adjusted to remove continuity problems with adjacent patches. Therefore, triangles with vertices on the u 0 and u 1 boundaries of the patch may have v values perturbed so that they may affect triangles in several strips. Step 1165 therefore does not remove triangles with vertices on the u 0 and u 1 boundaries of the patch that may affect triangles of the next strip to be processed. All other triangles are removed.
Step 1165 then proceeds with the next iteration of loop 1115. After all strips of the patch are rendered, loop 1115 terminates and the method 1100 concludes. At this point all triangles of the patch have been rendered, with self overlap dealt with, either by triangles with greater v values overwriting those with lower v values, or with triangles clipped so that the triangles do not overwrite earlier rendered triangles with higher v values.
The methods described above conform with the ambiguity resolution rule that points with greater value of parameter v are displayed in preference to those with lesser value of v, and for points with an equal value of parameter v, points with greater value of parameter u are displayed in preference to those with lesser value of u. Strips correspond to ranges of v values and are iterated over in ascending order of v range, and the triangles of a strip are iterated over in ascending order of u value, as shown in Fig. 20(a), where the numbers 1, 2, 3, 4 indicate the order of iteration of the strips, and the arrows indicate the order of iteration of triangles within each strip. However, other rules may be used for resolving ambiguities. For example, for points with an equal value of parameter v, points with lesser value of parameter u may be displayed in preference to those with greater value of u. In this instance, the triangles of a strip will be iterated over in descending order of u value. Six further examples of ambiguity resolution rules are as follows: 711910.doc -32 Decreasing v, increasing u: strips correspond to ranges of v values and are iterated over in descending order of v range, and the triangles of a strip are iterated over in ascending order of u value, as shown in Fig. Decreasing v, decreasing u: as in the previous rule, except that the triangles of a strip are iterated over in descending order of u value.
Increasing u, increasing v: strips correspond to ranges of u values and are iterated over in ascending order of u range, and the triangles of a strip are iterated over in ascending order of v value, as shown in Fig. Increasing u, decreasing v: as in the previous rule, except that the triangles of a strip are iterated over in descending order of v value.
Decreasing u, increasing v: strips correspond to ranges of u values and are iterated over in descending order of u range, and the triangles of a strip are iterated over in ascending order of v value, as shown in Fig. Decreasing u, decreasing v: as in the previous rule, except that the triangles of a strip are iterated over in descending order of v value.
The methods described above may be used to render Type 6 Coons Patch Meshes) and Type 7 Tensor Product Patch Meshes) PDF Shadings. These PDF shadings are specified in the fifth edition of the PDF Reference which specifies version 1.6 of the Adobe Portable Document Format (PDF). In this instance, Fc may be set to the "PDF Smoothness tolerance" and 6 may be set to the "PDF flatness tolerance".
As described above, the steps of the described methods may be effected by instructions in software that are carried out by the computer system 1500. The instructions may be formed as one or more software code modules, each for performing one or more particular tasks. For example, Fig. 16 shows one configuration of software modules 1600, which may be used for implementing the described methods. The 711910.doc -33 software modules 1600 may be embedded within a printer such as the printer 1515. The software modules 1600 comprise a PDF Interpreter 1610, which reads bytes of a PDF document and interprets the bytes to then send render engine commands and associated data to a Render Engine 1640. The Render Engine 1640 may be used to interpret these commands and data and produce pixels that represent pages of the PDF document to be printed. One or more post render processing modules 1660 may be used to print these pixels onto sheets. Each of the modules 1610, 1640 and 1660 may comprise one or more separate software modules.
The interpretation of a PDF document required to generate commands for the Render Engine 1640 and associated data requires a variety of different types of objects be read and processed. The reading and processing of an object may be broken down into a number of steps. Some of these steps may be common to the required processing of other types of objects, and some steps may be exclusive to a particular type of object. As an object is processed, data representing the object may be passed through one or more processing steps, and data of associated objects may also be passed through some of these steps. The major data flows and processing steps in the PDF Interpreter 1610 will be described below. The processing steps may be formed as one or more further software modules and are described herein using names that indicate the type of processing they perform. The processing steps may have different names.
Fig. 17 shows the high level flow and processing of data when the PDF Interpreter 1610 interprets a PDF Document 1711 to generate commands for the Render Engine 1640 and data associated with the commands. At the start of interpretation, an Object Retriever 1720 receives from a File Server 1710, uncompressed bytes 1713 derived from cross reference tables and or cross reference streams associated with the PDF Document 1711, to build a cross reference Table 1721 and a PDF Trailer object which is the root object for the PDF Document 1711. The Cross Reference Table 1721 maps an object and 711910.doc 34 0 generation number of a PDF indirect object to a PDF file position or containing PDF object stream and offset into the stream. The Object Retriever 220 is able to build a representation of any PDF object excluding stream data.
SAs well as providing bytes from any requested location in the PDF Document 1711, the File Server 1710 also decrypts and decompresses PDF streams in the PDF Document 1711 to provide useful decrypted and uncompressed) stream data bytes to other parts of the PDF Interpreter 1610. The conversion of PDF stream data to the decrypted and Suncompressed data may require decryption if the stream is encrypted followed by zero or more successive decompressions using decompression algorithms corresponding to the filters associated with the PDF stream.
Fig. 18(a) shows the PDF Document 1711 inputted into a Decryptor 1810. As seen in Fig. 18(a), when decryption and decompression is required, decrypted bytes are passed from the Decryptor 1810 into a Decompressor Input Buffer 1820 associated with a first Decompressor 1822. Zero or more of these Decompressor Input Buffer 1820 and Decompressor 1822 sets may exist. That is, N= 1 to number of Decompressors 1822) required. In this instance, output bytes from a previous Decompressor Input Buffer 1820 and Decompressor 1822 set flow into the Decompressor Input Buffer for the next set. The first Decompressor 1822 N=I) reads bytes N=1) from the input buffer 1820, decompresses the bytes and produces decompressed output bytes If there are no decompression filters associated with the PDF stream then the decrypted bytes may be used by other modules of the PDF Interpreter 1610 and no decompression buffers 1820 or decompressors 1822 will be used. If more than one decompressor is required, then further sets of Decompression Buffers 1820 with Decompressors 1822 will be chained as many as are required), each receiving decompressed output bytes from the previous decompressor. Output bytes from a very last Decompressor 1822 N 711910.doc number of decompressors required) may be used by other modules of the PDF interpreter 1610.
Fig. 18(b) shows that when decryption is not required and some decompression is required, PDF stream bytes are decompressed by a Decompressor 1832 to produce decompressed output bytes. If there are is only one decompression filter associated with the PDF stream the decompressed output bytes may be used by other modules of the PDF Interpreter 1610 and no decompression buffers or additional Decompressors 1842 will be used. Zero or more of these Decompressor Input Buffer 1840 and Decompressor 1842 sets may exist. That is, N= 2 to number of Decompressors 1842) required. In this instance, output bytes from a previous Decompressor Input Buffer 1840 and Decompressor 1842 set flow into the Decompressor Input Buffer for the next set. If more than one Decompressor 1832 is required, then the sets of Decompression Input Buffers 1840 with Decompressors 1842 will be chained (as many as are required), each reading as input bytes from a Decompressor Input Buffer 1840 that are the bytes output from the previous Decompressor 1842. Output bytes from the last Decompressor 1842 N number of decompressors required) may be used by other modules of the PDF Interpreter 1610.
In a computer system 1500) with limited memory 1506), the intermediate buffers 1820 and 1840 are small. The minimum size of an intermediate buffer may be determined as follows, where: The smallest size block of data that a preceding decryptor or decompressor can write is represented by "Smallest_Write"; (ii) The smallest size block of data that a decompressor associated with the block can read is represented as "Smallest_Read"; (iii) Max_Size is the maximum of"Smallest_Write" and "Smallest_Read"; (iv) MinSize is the minimum of "Smallest Write" and "Smallest_Read"; and 711910.doc -36- Minimum size of an intermediate buffer is equal to "N x Min_Size", where N is the smallest integer such that N x Min _Size is greater than or equal to Max_Size.
The intermediate buffers are required while the PDF stream is being decrypted and or decompressed. In another implementation, an intermediate buffer when it is empty and is not about to be written to by a decryptor or decompressor, may be re-used to receive output from a different decryptor or decompressor in a chain if the intermediate buffer is large enough.
To build an object that is an interpreter representation of an indirect PDF non compressed object, the Object Retriever 1720 determines the location of the indirect PDF non compressed object by retrieving its PDF file object position 1725 from the Cross Reference Table 1721.
The File Server 1710 reads bytes starting from the PDF file object position and passes the bytes 1714 to a Lexer 1730. The Lexer 1730 converts the bytes to tokens, which are then assembled to form the object by the Object Retriever 1720.
To build an object which is an interpreter representation of an indirect PDF compressed object, the Object Retriever 1720 retrieves from the Cross Reference Table 1721 an object number 1791 of the PDF object stream containing the object. The PDF file object position 1725 of the stream is retrieved from the Cross Reference Table 1721.
If an offset of the object within the stream has not yet been recorded within the Cross Reference Table 1721, then offsets 1792 to all PDF compressed objects within the stream are read from the start of the stream via the File Server 1710. The offsets are used to decrypt and decompress as required and via the Lexer 1730 to provide the offsets 1792 as tokens 1731. The tokens 1731 may be recorded in the Cross Reference Table 1721 so that reading through the offsets at the start of a given Object Stream occurs once per PDF document.
711910.doc 37 The File Server 1710 reads bytes 1712 from the stream and decrypts and or decompresses the bytes as necessary to obtain bytes from the offset in the decrypted and or decompressed data flow and pass the bytes 1714 to the Lexer 230. The Lexer 230 converts the bytes 1714 to tokens 1731, which are then assembled to form the object by the Object Retriever 1720. All processing steps of the Interpreter 1610 that require an object to be obtained from the PDF Document 1711 are able to use the Object Retriever 1720 to obtain the object. The Object Retriever 1720 may cache objects 1722 into an Object Cache 1723 for later reuse.
After the Cross Reference Table 1721 and PDF Trailer object are built, a Document Catalogue Server 1740 may obtain a document catalogue object 1724 from the Object Retriever 1720 and store the document catalogue object 1724 to later service requests to obtain data from the Document Catalogue Server 1740. A Page Renderer 1760 obtains from the Document Catalogue Server 1740 a page tree root node 1741 of a page tree associated with the PDF Document 1711.
The PDF Interpreter 1610 is configured to interpret a list of pages 1751 to be rendered. The list 1751 may be obtained by a Controller 1750 from the printer 1515. The list 1751 is passed 1752 to the Page Renderer 1760. The Page Renderer 1760 traverses nodes of the page tree to visit nodes for each page in the list of pages 1751 to be rendered.
As the Page Renderer 1760 traverses nodes of the page tree the Page Renderer 1760 obtains page tree node objects 1726 from the Object Retriever 1720. A most recently encountered resource dictionary 1763 in page tree nodes may be kept at the bottom of a Resource Stack 1771 of resource dictionaries by a Resource Server 1770 which maintains the Resource Stack 1771.
For each page to be rendered, a page size, rotation and clip region 1761 as defined by the PDF Document 1711 are passed from the Page Renderer 1760 to the Controller 1750. The page size 1753 is passed to the printer 1515. A page to face transform 1754 711910.doc -38and sheet face size are returned. The Controller 1750 obtains device dependent information 1755 including the sheet face size and sends 1756 device dependent information to a Stream Renderer 1780 to allow the Stream Renderer 1780 to initialise the Render Engine 1640 to receive render commands and data for the page on the sheet face.
Also, any resource dictionary 1763 associated with a page node is pushed by the Resource Server 1770 onto the Resources Stack 1771.
The Page Renderer 1760 obtains content stream dictionaries 1729 for content streams of the page from the Object Retriever 1720 and passes the content stream dictionaries 1729 to the Stream Renderer 1780.
When the Stream Renderer 1780 receives content stream dictionaries 1765 the Stream Renderer 1780 passes 1782 the content stream dictionaries to the File Server 1710. The File Server 1710 will read bytes 1712 from the PDF document 1711 which are in the stream, decrypt and decompress the bytes if necessary, and pass 1714 the bytes to the Lexer 1730. The Lexer 1730 lexically analyses and converts the bytes into tokens 1732. These tokens may be interpreted by the Stream Renderer 1780 which generates render engine commands and associated data for the Render Engine 1640. The render engine commands and associated data describe how the Render Engine 1740 will render objects described in the stream.
After all content streams for a page have been processed, the Resource Server 1770 pops any resource dictionary associated with the page node off the Resources Stack 1771.
The Page Renderer 1760 may then proceed to process the next page in the list of pages to be rendered as described above.
Fig. 19 shows high level flow of data and data processing at a high level within the Stream Renderer 1780 as the Stream Renderer 1780 processes tokens of a content stream to generate commands for the Render Engine 1640 and associated data. An Operation Router 1910 receives a content stream dictionary 1765 for a first content stream of a page, 711910.doc 39 or for the content stream of a PDF Form XObject or Type 3 font. The Operation Router 1910 creates an empty operand stack that can hold graphics operands. The Operation Router 1910 pushes 1911 the operand stack onto a stack of operand stacks 1912. The Operation Router 1910 also passes any received content stream dictionary 1781 to the File Server 1710.
The File Server 1710 reads bytes 1712 from the PDF document 1711, which are in the stream associated with the dictionary. The File Server 1710 decrypts and decompresses the bytes 1712 if necessary and passes 1714 the bytes to the Lexer 1730 which lexically analyses and converts the bytes into tokens 1732. These tokens 1732 are interpreted by the Operation Router 1910. Tokens 1732 representing graphics operands 1913 are pushed onto the top stack of operands in stack of operand stacks 1912. Tokens 1732 representing graphics operators are used to select part of an appropriate Graphics Processor 1920, 1930 or 1940) to process the graphics operands. Fig 19 shows a particular Graphics Processor referred to as the Graphics State Manager 1920 and two slightly different generic Graphics Processors 1930 and 1940 as placeholders for many Graphics Processors that the PDF Interpreter 1610 may comprise. When part of the appropriate Graphics Processor 1930, 1940) is selected for a given graphics operator, the Graphics Processor checks that the correct number and type of operands are on top of the top operand stack. The Graphics Processor processes the operands to commands for the Render Engine 1640 and associated data, which is sent to the Render Engine 1640. The render engine commands and associated data are such that the graphics command will have its intended effect on the appearance of the rendered page as described by a Portable Document Format specification associated with the PDF Document 1711, subject to any modifications deemed appropriate for the printer 1515.
After the operands have been processed, the part of the appropriate Graphics Processor pops the operands off the top stack of operands in the stack of operand stacks 1912.
711910.doc 40 For some PDF graphics state operators, a corresponding part of the Graphics State Manager 1920 will obtain corresponding operands 1921 from the top of the top stack of operands in the stack of operand stacks 1912. For many of the graphics state operators, a Graphics State Manager 1920 obtains a graphics state value from an operand 1921 and set 1922 the graphics state value into a top graphics state set of such values in the stack of graphics state sets 1923. For a PDF gs operator associated with the PDF Document 1711, the Graphics State Manager 1920 obtains the name of a graphics state dictionary from an operand 1921, obtains the named graphics state dictionary 1924 as a resource from the Resource Server 1770, and sets graphics state values obtained from the dictionary, into the top graphics state set. The Graphics State Manager 1920 also sends render engine commands and associated data to the Render Engine 1640 to set a render engine state to correspond to the top graphics state set values 1925. For some PDF graphics state operators, a corresponding part of another Graphics Processor part of the Graphics Processor 1930 or 1940) closely related to the corresponding graphics state value, will be called to set the graphics state value in operands 1931 or 1941) into the top graphics state set. Alternatively, when such a graphics state value is found in a graphics state dictionary, which is to be set into the graphics state, by the Graphics State Manager 1920, the value will be sent one of 1926 or 1927) to the appropriate part of the appropriate Graphics Processor one of Graphics Processors 1930 or 1940) to be set.
Graphics processors 1930 and 1940 are shown in Fig. 19 as two generic example placeholders. In the PDF Interpreter 1610 there are a variety of real graphics processors that exist in their place. As an example, the generic Graphics processor 1940 processes data. Depending upon the particular operator received by the Operation Router 1910, an appropriate part of the generic Graphics Processor 1940 will be selected to obtain operands 1941 from the top of the top stack of operands in stack of operand stacks 1912.
Processing of these operands may require obtaining zero or more of: graphics state set 711910.doc -41values 1943 from the top graphics state set on the stack of sets 1923; resources 1774 via the Resource Server 1770 (which obtains the resources 228 from the Object Retriever 1720); and indirect objects 1727 from the Object Retriever 1720. If a content stream is to be processed the Content Stream of a Form XObject), then the Content Stream Dictionary 1746 will be passed to the Operation Router 1910 for the Operation Router 1910 to process the content stream data. If data from another type of stream image data associated with an Image XObject) is to be processed, then the non-content stream dictionary 1782 Image XObject Stream Dictionary) will be passed to the File Server 1710 and the decrypted and uncompressed stream data bytes 1715 will be returned for processing.
The high level functionality of the graphics processors within the PDF Interpreter 1610 whose position are shown in Fig. 19 by place holder graphics processors 1930 and 1940 is described below. Unless otherwise stated descriptions, the term "operand stack" will be used to refer to the top stack of operands in stack of operand stacks 1912, and the term "graphics state" will by used to refer to the top graphics state set on the stack of sets 1923.
The PDF Interpreter 1610 comprises a graphics processor known as the path processor. The path processor performs PDF path construction operations, using operands from the top of the operand stack. The path processor translates these operations to construct a shape described by the operations. The path processor also performs PDF path painting operations on the currently constructed path. These operations are to fill the currently constructed path, stroke the currently constructed path, use the currently constructed path as a clip, or some combination of these. The construction and painting may require obtaining graphics state values from the top graphics state set and sending render engine commands and associated data to the Render Engine 1640.
711910.doc 42 The PDF Interpreter 1610 also comprises a graphics processor known as the font processor. The font processor sets the text font and size using operands from the top of the operand stack and font related resources from the Resource Server 1770. The font processor also processes Type 3 font width operators. The font processor sends Type 3 font content stream headers 1946 to the Operation Router 1910 to draw Type 3 font glyphs. The font processor also performs font substitution. These operations may require setting and obtaining graphics state values in the graphics state and sending render engine commands and associated data to the Render Engine 1640. This includes setting the current font and font size into the Render Engine 1640.
A graphics processor known as the text processor is also included in the PDF Interpreter 1610 to set text related graphics state values (except font state) in the graphics state using operands from the top of the operand stack. The text processor also uses operands from the top of the operand stack to note new text positions, and to obtain strings to be shown. The text processor uses text related graphics state values to determine the position of these strings and passes the position and the strings to the Render Engine 1640 for rendering.
The PDF Interpreter 1610 also comprises a graphics processor known as the XObject processor. The XObject processor obtains the name of the XObject to be rendered from the top of the operand stack and then obtains the corresponding XObject stream dictionary from the Resource Server 1770. If the XObject is an Image XObject, the Image XObject stream dictionary is passed to the image processor for image processor to process. If the XObject is a form XObject, the XObject processor will push a copy of the top graphics state set onto the stack of graphic state sets 1923, adjust the current transformation matrix in the top graphics state set to correctly map the form space to Render Engine 1640 space, pass the form XObject content stream dictionary 1946 to the Operation Router 1910 for the Operation Router 1910 to process as a stream of graphics 711910.doc -43 operands and graphics operators. When the Operation Router 1910 has finished processing the stream, the XObject processor will pop the top graphics state set on the stack of graphic state sets 1923.
The PDF interpreter 1610 also comprises a graphics processor known as the image processor. When image XObjects are to be rendered, the image processor obtains image XObject stream dictionaries from the XObject processor. The image processor passes these stream dictionaries 1782 to the File Server 1710 and obtains back the unencrypted and uncompressed image data. This image data may be colour converted, and will then be passed to the Render Engine 1640. When inline images are to be rendered, the image processor requests the Object Retriever 1720 to convert the image specifications before the image data in the content stream, into a PDF interpreter image dictionary. The image processor also requests the File Server 1710 to return the image data (unencrypted and uncompressed) from the content stream. This image data is then processed as per image data for image XObject image data.
The PDF Interpreter 1610 also comprises a graphics processor known as the pattern manager. The pattern manager coordinates the filling of graphics objects when a current colour space is a PDF pattern. When the current colour space is set to a pattern, the pattern manager receives the name of the pattern from the Graphics State Manager 1920 and a corresponding pattern dictionary from the Resource Server 1770.
A graphics processor of the PDF Interpreter 1610 known as the shading processor obtains the name of a shading dictionary as the top operand from the top of the top operand stack in response to the Operation Router 1910 processing a PDF shading operator. The shading processor then obtains a corresponding shading dictionary from the Resource Server 1770, and optionally, unencrypted and decompressed bytes 1715 from the shading stream from the File Server 1710. To paint the shading, the shading processor sends render engine commands and associated data to the Render Engine 1640.
711910.doc 44 When objects are to be filled with a shading pattern, the pattern manager retrieves the corresponding shading dictionary from the Resource Server 1770 and passes the shading dictionary to the shading processor. The outlines of the objects are sent to the Render Engine 1640 as a temporary clip and then the shading processor will send render engine commands and associated data to the Render Engine 1640 for the Render Engine 1640 to fill the clipped area with the shading pattern. The temporary clip is then removed.
A graphics processor of the PDF Interpreter 1610 known as the colour converter converts the colour of objects into a corresponding colour in the colour space in which the Render Engine 1640 will accept the colour. Specifications for conversion between some pairs of colour spaces are built onto the PDF Interpreter 1610, and specification for conversions between some other pairs of colour spaces are obtained from the Resource Server 1770.
A graphics processor known as the function calculator transforms numeric data as described by PDF Function objects. Other graphics processors within the PDF Interpreter 1610 use the function calculator when required.
To increase the ability of the PDF Interpreter 1610 to recover from errors that may occur while the PDF Interpreter 1610 is interpreting a PDF document, the PDF Interpreter 1610 maintains a record of the integrity of some data structures that are part of the state of the PDF interpreter 1610. The Cross Reference Table 1721, the object Cache 1723, the Resources Stack 1771, the stack of graphics state sets 1723, the stack of operand stacks 1912 are examples of such data structures. As the PDF Interpreter 1610 updates these data structures, a status of their integrity is also maintained. For example, during pushing of an empty stack of operands 1911 onto the stack of operand stacks 1912, the integrity of the stack of operand stacks may change from "good" to "being reconfigured" and then back to "good". When and if an error occurs during the interpretation of a PDF document, the integrities of some data structures which are part of the state of the PDF 711910.doc 45 Interpreter 1610 are read to determine if the data structures are good enough for the PDF Interpreter 1610 to continue operating after the error has been dealt with, or whether the integrities are sufficiently bad that continued interpretation of the PDF document would not be reliable, or possible. The integrities may also be altered.
Memory allocation and free routines that allocate and free data memory of a range of sizes usually take longer to execute than allocation and free routines that allocate and free memory of one size. Some parts of PDF interpreting may often require memory to hold data of a repeatedly same size for a relatively short time. To reduce time in obtaining and freeing such memory, these parts of the PDF interpreting will maintain a list of memory blocks in memory 1506, for example, of the fixed size that is required to hold data. This list is initially empty. When a memory block of the fixed size is required, the memory block is taken from the list if the list is not empty. Otherwise the block of fixed size is allocated using a memory allocation routine that can allocate memory of a range of sizes. When the memory is no longer required details of the memory block are returned to the list. At the end of PDF interpreting or at some earlier times if memory is scarce, blocks may be removed from the list and freed to a pool from which the blocks of memory were originally allocated.
In another implementation, some parts of the PDF interpreting may often require memory of a size from a set of similar sizes. In this implementation, memory blocks may be allocated with a size equal to the maximum of the sizes in the set.
To operate with a limited amount of memory the PDF Interpreter 1610 does not use more than a certain amount of the memory 1506 at any time. When the PDF Interpreter 1610 is operating the PDF Interpreter 1610 has data in allocated blocks of memory. The data per block is classified as one of essential or non-essential. Essential data is required for future operation of the PDF Interpreter 1610 and cannot be reconstructed by the PDF Interpreter 1610. Non-essential data is either not required for future operation of the PDF 711910.doc 46 Interpreter 1610 or is not required immediately and can be reconstructed later by the PDF Interpreter 1610 when required. When the PDF Interpreter 1610 attempts to allocate a block of memory 1506 that would take the total allocated memory over the allowed limit, the PDF Interpreter 1610 attempts to free currently allocated memory containing nonessential data to at least allow the requested allocation to possibly succeed without taking the total allocated memory over the allowed limit. The freeing of non-essential data continues until there is no more of the non-essential to free or at least until the target amount has been freed.
The aforementioned preferred method(s) comprise a particular control flow. There are many other variants of the preferred method(s) which use different control flows without departing the spirit or scope of the invention. Furthermore one or more of the steps of the preferred method(s) may be performed in parallel rather sequentially.
Industrial Applicability It is apparent from the above that the arrangements described are applicable to the computer and data processing industries.
The foregoing describes only some embodiments of the present invention, and modifications and/or changes can be made thereto without departing from the scope and spirit of the invention, the embodiments being illustrative and not restrictive.
In the context of this specification, the word "comprising" means "including principally but not necessarily solely" or "having" or "including", and not "consisting only of'. Variations of the word "comprising", such as "comprise" and "comprises" have correspondingly varied meanings.
711910.doc

Claims (4)

1. A method of rendering a parametric patch, said patch being defined by a patch geometry and the colour of said patch varying according to a colour surface, said colour surface mapping points of a parametric space in which said patch is defined to colour values, said method comprising the steps of: determining a first tessellation step for said patch in each parametric coordinate direction as a function of said colour surface; determining a second tessellation step for said patch in each parametric coordinate direction as a function of said patch geometry and a tolerance value; parametrically tessellating said patch into cells using the minimum of said first and second tessellation steps in each parametric coordinate direction; determining one or more colour values to be associated with each said cell depending on said colour surface; and rendering each said cell using the associated colour values in order to render said patch.
2. A method according to claim 1, wherein said first tessellation step is further dependent on a colour tolerance value.
3. A method according to claim 1, wherein each said cell is a polygon.
4. A method according to claim 3, further comprising the step of subdividing each said polygon into triangles.
711910.doc 48 A method according to claim 4, wherein said rendering step comprises rendering said triangles using Gouraud shading. 6. A method according to any of the preceding claims, wherein said patch geometry is represented as a set of control points defining a mapping from said parametric space to said output space. 7. A method according to claim 6, wherein said control points define a tensor product patch. 8. A method according to claim 6, wherein said control points define a bicubic Bezier patch. 9. A method according to claim 6, wherein said control points define a Coons patch. A method according to any of the preceding claims, wherein said colour surface is defined by a bilinear interpolation function between four predetermined colour values. 11. A method according to claim 1, further comprising the step of determining a tessellation step of a boundary curve of said patch as a function of said patch geometry and a curve tolerance value. 12. A method according to claim 11, wherein said boundary curve is shared by said patch and a neighbouring patch in a mesh of patches. 711910.doc 49 O 13. A method according to claim 11 or 12, wherein said parametric tessellation into cells adjacent said boundary curve is further dependent on said further tessellation step. 14. A method according to claim 1, further comprising the steps of: grouping said cells into a plurality of strips depending on the associated range of each cell and a predetenrmined rule; determining one or more colour values to be associated with each said cell depending on said colour surface; traversing said strips in a first order depending on said predetermined rule; traversing said cells within a current strip in a second order depending on the associated range of each cell and said predetermined rule; comparing a traversed cell to a previously traversed cell of said current strip; and rendering said traversed cell using the colour values associated with said traversed cell, depending on said comparison. A method according to claim 14, wherein at least a portion of said traversed cell is discarded prior to rendering said traversed cell depending on said comparison. 16. A method according to claim 14, wherein said comparison determines whether said traversed cell overlaps said previously traversed cell. 17. An apparatus for rendering a parametric patch, said patch being defined by a patch geometry and the colour of said patch varying according to a colour surface, said colour surface mapping points of a parametric space in which said patch is defined to colour values, said apparatus comprising: 711910.doc first tessellation step determining means for determining a first tessellation step for said patch in each parametric coordinate direction as a function of said colour surface; second tessellation step determining means for determining a second tessellation step for said patch in each parametric coordinate direction as a function of said patch geometry and a tolerance value; tessellating means for parametrically tessellating said patch into cells using the minimum of said first and second tessellation steps in each parametric coordinate direction; colour value determining means for determining one or more colour values to be associated with each said cell depending on said colour surface; and rendering means for rendering each said cell using the associated colour values in order to render said patch. 18. A computer program for rendering a parametric patch, said patch being defined by a patch geometry and the colour of said patch varying according to a colour surface, said colour surface mapping points of a parametric space in which said patch is defined to colour values, said program comprising: code for determining a first tessellation step for said patch in each parametric coordinate direction as a function of said colour surface; code for determining a second tessellation step for said patch in each parametric coordinate direction as a function of said patch geometry and a tolerance value; code for parametrically tessellating said patch into cells using the minimum of said first and second tessellation steps in each parametric coordinate direction; code for determining one or more colour values to be associated with each said cell depending on said colour surface; and 711910.doc -51 0 code for rendering each said cell using the associated colour values in order to render said patch. I19. A computer program product having a computer readable medium having a computer program recorded therein for rendering a parametric patch, said patch being defined by a patch geometry and the colour of said patch varying according to a colour surface, said colour surface mapping points of a parametric space in which said patch is defined to colour values, said computer program product comprising: computer program code means for determining a first tessellation step for said patch in each parametric coordinate direction as a function of said colour surface; computer program code means for determining a second tessellation step for said patch in each parametric coordinate direction as a function of said patch geometry and a tolerance value; computer program code means for parametrically tessellating said patch into cells using the minimum of said first and second tessellation steps in each parametric coordinate direction; computer program code means for determining one or more colour values to be associated with each said cell depending on said colour surface; and computer program code means for rendering each said cell using the associated colour values in order to render said patch. A method of rendering a parametric patch, said method being substantially as herein before described with reference to any one of the embodiments as that embodiment is shown in the accompanying drawings. 711910.doc 52 21. An apparatus for rendering a parametric patch, said apparatus being substantially as herein before described with reference to any one of the embodiments as that embodiment is shown in the accompanying drawings. 22. A computer program for rendering a parametric patch, said program being substantially as herein before described with reference to any one of the embodiments as that embodiment is shown in the accompanying drawings. DATED this 5 th Day of May, 2005 Canon Kabushiki Kaisha Patent Attorneys for the Applicant SPRUSON FERGUSON 711910.doc
AU2005201932A 2005-05-06 2005-05-06 Parametric patch colour blend rendering Abandoned AU2005201932A1 (en)

Priority Applications (1)

Application Number Priority Date Filing Date Title
AU2005201932A AU2005201932A1 (en) 2005-05-06 2005-05-06 Parametric patch colour blend rendering

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
AU2005201932A AU2005201932A1 (en) 2005-05-06 2005-05-06 Parametric patch colour blend rendering

Publications (1)

Publication Number Publication Date
AU2005201932A1 true AU2005201932A1 (en) 2006-11-23

Family

ID=37460979

Family Applications (1)

Application Number Title Priority Date Filing Date
AU2005201932A Abandoned AU2005201932A1 (en) 2005-05-06 2005-05-06 Parametric patch colour blend rendering

Country Status (1)

Country Link
AU (1) AU2005201932A1 (en)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9508316B2 (en) 2013-06-27 2016-11-29 Canon Kabushiki Kaisha Method, system and apparatus for rendering

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9508316B2 (en) 2013-06-27 2016-11-29 Canon Kabushiki Kaisha Method, system and apparatus for rendering

Similar Documents

Publication Publication Date Title
US7872648B2 (en) Random-access vector graphics
US8044955B1 (en) Dynamic tessellation spreading for resolution-independent GPU anti-aliasing and rendering
EP1453007B1 (en) Color gradient paths
RU2360288C2 (en) Files containing mixed raster
US8928667B2 (en) Rendering stroked curves in graphics processing systems
US8698808B2 (en) Conversion of dashed strokes into quadratic Bèzier segment sequences
US7924278B2 (en) Real-time GPU rendering of piecewise algebraic surfaces
EP2036046B1 (en) Anisometric texture synthesis
US7868887B1 (en) Rendering rational quadratic Bézier curves on a GPU
US8243070B1 (en) Triangulation for accelerated rendering of polygons
US8072452B1 (en) Efficient multi-resolution curve rendering
US9508316B2 (en) Method, system and apparatus for rendering
US20130120391A1 (en) Triangulation for Accelerated Multi-Resolution Rendering of Stroked Paths
US8818135B1 (en) Low memory content aware fill
US7692652B2 (en) Selectively transforming overlapping illustration artwork
US10540789B2 (en) Line stylization through graphics processor unit (GPU) textures
JPH0916745A (en) Method and system for development of graphic object
US8068106B1 (en) Rendering cubic Bézier curves as quadratic curves using a GPU
RU2469400C1 (en) Method to convert bitmapped image into metafile
US7081903B2 (en) Efficient movement of fragment stamp
US7400330B2 (en) Magnification of indirection textures
US7215342B2 (en) System and method for detecting and converting a transparency simulation effect
AU2005201932A1 (en) Parametric patch colour blend rendering
JP2005235205A (en) Compositing with clip-to-self functionality without using shape channel
AU2005201933A1 (en) Method of rendering self-overlapping colour blend patches

Legal Events

Date Code Title Description
MK1 Application lapsed section 142(2)(a) - no request for examination in relevant period