<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-20729352</id><updated>2011-07-07T21:55:34.394+01:00</updated><category term='SMIL'/><category term='Reyes'/><category term='SVG'/><category term='XML'/><category term='reyes xslt xquery svn googlecode'/><category term='XSLT'/><category term='reyes xslt xquery googlecode'/><title type='text'>X-Reyes</title><subtitle type='html'>X-Reyes is an experimental implementation of the Reyes Image Rendering Architecture. It takes as its input SVG or X3D, uses XML for data structures and XSLT 2.0 for processing the model.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://x-reyes.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20729352/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://x-reyes.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Philip Fennell</name><uri>http://www.blogger.com/profile/12353204855753453016</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://3.bp.blogspot.com/_XhX96nJzT_8/SQwSvu3qeYI/AAAAAAAAAAk/rD9NgMytyag/S220/philip_fennell.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>14</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-20729352.post-5803166591742288590</id><published>2009-10-25T20:10:00.001Z</published><updated>2009-10-25T20:10:59.898Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='reyes xslt xquery svn googlecode'/><title type='text'>Code checked-in</title><content type='html'>I've just this minute put both the original XSLT code and the new XQuery code into the X-Reyes Google Code &lt;a href="http://code.google.com/p/x-reyes/source/checkout"&gt;SVN repository&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20729352-5803166591742288590?l=x-reyes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://x-reyes.blogspot.com/feeds/5803166591742288590/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20729352&amp;postID=5803166591742288590' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20729352/posts/default/5803166591742288590'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20729352/posts/default/5803166591742288590'/><link rel='alternate' type='text/html' href='http://x-reyes.blogspot.com/2009/10/code-checked-in.html' title='Code checked-in'/><author><name>Philip Fennell</name><uri>http://www.blogger.com/profile/12353204855753453016</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://3.bp.blogspot.com/_XhX96nJzT_8/SQwSvu3qeYI/AAAAAAAAAAk/rD9NgMytyag/S220/philip_fennell.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-20729352.post-8112734737577942769</id><published>2009-10-21T08:54:00.000+01:00</published><updated>2009-10-21T08:54:43.788+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='reyes xslt xquery googlecode'/><title type='text'>Back in business</title><content type='html'>I have recently been working on another implementation of the Reyes pipeline, this time I'm using XQuery. So far I have the TIFF serialiser and I've gotten as far as the read, depth-sort and bound steps. There is an &lt;a href="http://code.google.com/p/x-reyes/"&gt;X-Reyes Google Code project&lt;/a&gt; and soon I'll be uploading both the original XSLT code plus the new XQuery stuff too. As this is very much a Functional Programming approach the XQuery code will, until XQuery 1.1 comes out, only run on &lt;a href="http://www.saxonica.com/"&gt;Saxon-EE&lt;/a&gt; or &lt;a href="http://xqzone.com/"&gt;MarkLogic Server&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20729352-8112734737577942769?l=x-reyes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://x-reyes.blogspot.com/feeds/8112734737577942769/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20729352&amp;postID=8112734737577942769' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20729352/posts/default/8112734737577942769'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20729352/posts/default/8112734737577942769'/><link rel='alternate' type='text/html' href='http://x-reyes.blogspot.com/2009/10/back-in-business.html' title='Back in business'/><author><name>Philip Fennell</name><uri>http://www.blogger.com/profile/12353204855753453016</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://3.bp.blogspot.com/_XhX96nJzT_8/SQwSvu3qeYI/AAAAAAAAAAk/rD9NgMytyag/S220/philip_fennell.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-20729352.post-114830215859484918</id><published>2006-05-22T13:26:00.000+01:00</published><updated>2006-05-22T13:49:18.613+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SMIL'/><category scheme='http://www.blogger.com/atom/ns#' term='Reyes'/><category scheme='http://www.blogger.com/atom/ns#' term='SVG'/><category scheme='http://www.blogger.com/atom/ns#' term='XML'/><category scheme='http://www.blogger.com/atom/ns#' term='XSLT'/><title type='text'>Of beginnings, endings and syncbases</title><content type='html'>Given that x-reyes will generate animated sequences, it is quite obvious that those sequences are a fixed set of frames. Therefore, the fancier interactive aspects of SMIL, like mouse events and/or wallclock times, will not be required.&lt;br /&gt;&lt;br /&gt;To that end (no pun intended), the @begin and @end attributes will support &lt;a href="http://www.w3.org/TR/SVG11/animate.html#BeginValueListSyntax" title="Attributes to control the timing of the animation"&gt;syncbase&lt;/a&gt; values of the following form:&lt;br /&gt;&lt;br /&gt;syncbase-value ::= ( Id-value "." ( "begin" | "end" ) ) ( S? ("+"|"-") S? Clock-value  )?&lt;br /&gt;&lt;br /&gt;The begin and end events of named animation elements (set, animate, animateMotion, etc) is a very powerful feature of SMIL that should be supported and for that matter utilised where possible. After all, everyday life is a connected sequence of beginnings and endings, that may be offset from each other, but they are all connected to synchronizing base events. Just consider a simple walk cycle!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20729352-114830215859484918?l=x-reyes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://x-reyes.blogspot.com/feeds/114830215859484918/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20729352&amp;postID=114830215859484918' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20729352/posts/default/114830215859484918'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20729352/posts/default/114830215859484918'/><link rel='alternate' type='text/html' href='http://x-reyes.blogspot.com/2006/05/of-beginnings-endings-and-syncbases.html' title='Of beginnings, endings and syncbases'/><author><name>Philip Fennell</name><uri>http://www.blogger.com/profile/12353204855753453016</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://3.bp.blogspot.com/_XhX96nJzT_8/SQwSvu3qeYI/AAAAAAAAAAk/rD9NgMytyag/S220/philip_fennell.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-20729352.post-114744064482162044</id><published>2006-05-12T14:29:00.000+01:00</published><updated>2006-05-12T14:47:32.206+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SMIL'/><category scheme='http://www.blogger.com/atom/ns#' term='Reyes'/><category scheme='http://www.blogger.com/atom/ns#' term='SVG'/><category scheme='http://www.blogger.com/atom/ns#' term='XML'/><category scheme='http://www.blogger.com/atom/ns#' term='XSLT'/><title type='text'>The svg:set element...</title><content type='html'>On the face of it, the svg:set element does not seem to be as much fun as the others. In fact you can achieve the same effect by setting the @calcMode to 'discrete' which has the effect of not interpolating between the extremes.&lt;br /&gt;&lt;br /&gt;Anyway, I now have support for svg:set.&lt;br /&gt;&lt;br /&gt;I was supposed to be doing svg:animateMotion next but svg:set seemed easier by far than the whole motion path, keyPoints, keyTimes and keySplines scene!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20729352-114744064482162044?l=x-reyes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://x-reyes.blogspot.com/feeds/114744064482162044/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20729352&amp;postID=114744064482162044' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20729352/posts/default/114744064482162044'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20729352/posts/default/114744064482162044'/><link rel='alternate' type='text/html' href='http://x-reyes.blogspot.com/2006/05/svgset-element.html' title='The svg:set element...'/><author><name>Philip Fennell</name><uri>http://www.blogger.com/profile/12353204855753453016</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://3.bp.blogspot.com/_XhX96nJzT_8/SQwSvu3qeYI/AAAAAAAAAAk/rD9NgMytyag/S220/philip_fennell.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-20729352.post-114716811413797436</id><published>2006-05-09T08:46:00.000+01:00</published><updated>2006-05-09T10:48:34.203+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SMIL'/><category scheme='http://www.blogger.com/atom/ns#' term='Reyes'/><category scheme='http://www.blogger.com/atom/ns#' term='SVG'/><category scheme='http://www.blogger.com/atom/ns#' term='XML'/><category scheme='http://www.blogger.com/atom/ns#' term='XSLT'/><title type='text'>The svg:animate element</title><content type='html'>As of this writing I have support for the following properties of the SVG animate element:&lt;br /&gt;&lt;br /&gt;* @attributeName&lt;br /&gt;* @begin = clock-value&lt;br /&gt;* @dur = clock-value&lt;br /&gt;* @end  = clock-value&lt;br /&gt;* @fill = (freeze|remove)&lt;br /&gt;* @from = length without units!&lt;br /&gt;* @to = length without units!&lt;br /&gt;* @by = length without units!&lt;br /&gt;&lt;br /&gt;I do need to deal with @from/@to values that decrease, and for that matter @by values that are negative.&lt;br /&gt;&lt;br /&gt;After that I'll be looking at svg:animateMotion.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20729352-114716811413797436?l=x-reyes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://x-reyes.blogspot.com/feeds/114716811413797436/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20729352&amp;postID=114716811413797436' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20729352/posts/default/114716811413797436'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20729352/posts/default/114716811413797436'/><link rel='alternate' type='text/html' href='http://x-reyes.blogspot.com/2006/05/svganimate-element.html' title='The svg:animate element'/><author><name>Philip Fennell</name><uri>http://www.blogger.com/profile/12353204855753453016</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://3.bp.blogspot.com/_XhX96nJzT_8/SQwSvu3qeYI/AAAAAAAAAAk/rD9NgMytyag/S220/philip_fennell.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-20729352.post-114709142524773970</id><published>2006-05-08T13:12:00.000+01:00</published><updated>2006-05-08T13:30:25.256+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SMIL'/><category scheme='http://www.blogger.com/atom/ns#' term='Reyes'/><category scheme='http://www.blogger.com/atom/ns#' term='SVG'/><category scheme='http://www.blogger.com/atom/ns#' term='XML'/><category scheme='http://www.blogger.com/atom/ns#' term='XSLT'/><title type='text'>Drifted into the world of animation</title><content type='html'>One aspect of implementing a Reyes render would be that ability to render animated sequences. To that end I have 'branched-off' into the world of animation, or to be more specific &lt;a href="http://www.w3.org/AudioVideo/"&gt;SMIL&lt;/a&gt; - the Synchronized Multimedia Integration Language. SMIL (pronounced Smile) is a 'framework for incorporating animation onto a time line and a mechanism for composing the effects of multiple animations'. Although a W3C recommendation in it's own right it is also the animation component of SVG.&lt;br /&gt;&lt;br /&gt;Given the work I have done to-date with X-Reyes you wont be surprised to here that I have started implementing a SMIL interpreter using XSLT. The idea being that the XSLT transform(s) take an SVG graphic, with inline svg:animation elements, and generate the 'inbetweens' for each animated primitive. There is an SVG/JavaScript test harness that allows you to run, pause, step forward/backward and stop the animated sequence using conventional video playback style buttons.&lt;br /&gt;&lt;br /&gt;The next step would be to generate a sequence of whole graphics, one for each frame of the timeline that can be subsequently fed into the X-Reyes render to generate the  required frame images. In an ideal world I'd by generating an animated GIF but X-Reyes only supports TIFF at present.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20729352-114709142524773970?l=x-reyes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://x-reyes.blogspot.com/feeds/114709142524773970/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20729352&amp;postID=114709142524773970' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20729352/posts/default/114709142524773970'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20729352/posts/default/114709142524773970'/><link rel='alternate' type='text/html' href='http://x-reyes.blogspot.com/2006/05/drifted-into-world-of-animation.html' title='Drifted into the world of animation'/><author><name>Philip Fennell</name><uri>http://www.blogger.com/profile/12353204855753453016</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://3.bp.blogspot.com/_XhX96nJzT_8/SQwSvu3qeYI/AAAAAAAAAAk/rD9NgMytyag/S220/philip_fennell.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-20729352.post-113990789655901668</id><published>2006-02-14T08:56:00.000Z</published><updated>2006-02-14T09:06:34.180Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='Reyes'/><category scheme='http://www.blogger.com/atom/ns#' term='SVG'/><category scheme='http://www.blogger.com/atom/ns#' term='XML'/><category scheme='http://www.blogger.com/atom/ns#' term='XSLT'/><title type='text'>A little snip here, a little snip there</title><content type='html'>In order to pave the way for the next phase, I have done some trimming of the data structures used within the X-Reyes.&lt;br /&gt;&lt;br /&gt;The chief culprit was the use of the svg:metadata element to store additional data (metadata if you like) about the primitives. I had used an:&lt;br /&gt;&lt;br /&gt;&amp;lt;xr:bbox top="0" right="16" bottom="16" left="0"/&amp;gt;&lt;br /&gt;&lt;br /&gt;element to store the bounding box of each primitive (and micropolygon). This, as I'm sure you can imagine is rather verbose. So I have done away with the svg:metadata element and now use an:&lt;br /&gt;&lt;br /&gt;xr:bbox="0 16 16 0"&lt;br /&gt;&lt;br /&gt;attribute instead. This has reduced the memory required to process an image by a third.&lt;br /&gt;&lt;br /&gt;Sweet!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20729352-113990789655901668?l=x-reyes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://x-reyes.blogspot.com/feeds/113990789655901668/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20729352&amp;postID=113990789655901668' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20729352/posts/default/113990789655901668'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20729352/posts/default/113990789655901668'/><link rel='alternate' type='text/html' href='http://x-reyes.blogspot.com/2006/02/little-snip-here-little-snip-there.html' title='A little snip here, a little snip there'/><author><name>Philip Fennell</name><uri>http://www.blogger.com/profile/12353204855753453016</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://3.bp.blogspot.com/_XhX96nJzT_8/SQwSvu3qeYI/AAAAAAAAAAk/rD9NgMytyag/S220/philip_fennell.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-20729352.post-113949980935399257</id><published>2006-02-09T15:38:00.000Z</published><updated>2006-02-09T22:52:09.646Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='Reyes'/><category scheme='http://www.blogger.com/atom/ns#' term='SVG'/><category scheme='http://www.blogger.com/atom/ns#' term='XML'/><category scheme='http://www.blogger.com/atom/ns#' term='XSLT'/><title type='text'>Add a bit of opacity can make things clearer</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/6246/1088/1600/opacity.jpg"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;" src="http://photos1.blogger.com/blogger/6246/1088/320/opacity.jpg" border="0" alt="" /&gt;&lt;/a&gt;The addition of opacity makes things a bit more interesting. I used a simple equation:&lt;br /&gt;&lt;br /&gt;I = k * I + (1 - k) * I'&lt;br /&gt;&lt;br /&gt;where k is the opacity, I is the intensity (the value of each of the RGB colour channels) of the nearest of two overlapping polygons and I' is that of the one behind it.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20729352-113949980935399257?l=x-reyes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://x-reyes.blogspot.com/feeds/113949980935399257/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20729352&amp;postID=113949980935399257' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20729352/posts/default/113949980935399257'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20729352/posts/default/113949980935399257'/><link rel='alternate' type='text/html' href='http://x-reyes.blogspot.com/2006/02/add-bit-of-opacity-can-make-things.html' title='Add a bit of opacity can make things clearer'/><author><name>Philip Fennell</name><uri>http://www.blogger.com/profile/12353204855753453016</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://3.bp.blogspot.com/_XhX96nJzT_8/SQwSvu3qeYI/AAAAAAAAAAk/rD9NgMytyag/S220/philip_fennell.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-20729352.post-113923455407430969</id><published>2006-02-06T13:54:00.000Z</published><updated>2006-02-06T16:56:49.470Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='Reyes'/><category scheme='http://www.blogger.com/atom/ns#' term='SVG'/><category scheme='http://www.blogger.com/atom/ns#' term='XML'/><category scheme='http://www.blogger.com/atom/ns#' term='XSLT'/><title type='text'>That's more like it!</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/6246/1088/1600/test01.1.jpg"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;" src="http://photos1.blogger.com/blogger/6246/1088/320/test01.1.jpg" border="0" alt="" /&gt;&lt;/a&gt;The square peg in the square hole. For the rather simplistic sampling strategy I'm using at present, the occlusion culling is quite straight forward. Find the first micropolygon who's top-left vertex matches the sample coordinates. And yes you're right, no multipoint stochastic sampling here. But then why would I? I'm working in pixel units only and there are no rotated primitives, diagonal lines or curves.&lt;br /&gt;&lt;br /&gt;As yet...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20729352-113923455407430969?l=x-reyes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://x-reyes.blogspot.com/feeds/113923455407430969/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20729352&amp;postID=113923455407430969' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20729352/posts/default/113923455407430969'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20729352/posts/default/113923455407430969'/><link rel='alternate' type='text/html' href='http://x-reyes.blogspot.com/2006/02/thats-more-like-it.html' title='That&apos;s more like it!'/><author><name>Philip Fennell</name><uri>http://www.blogger.com/profile/12353204855753453016</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://3.bp.blogspot.com/_XhX96nJzT_8/SQwSvu3qeYI/AAAAAAAAAAk/rD9NgMytyag/S220/philip_fennell.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-20729352.post-113897598109328960</id><published>2006-02-03T14:08:00.001Z</published><updated>2008-03-25T21:09:44.546Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='Reyes'/><category scheme='http://www.blogger.com/atom/ns#' term='SVG'/><category scheme='http://www.blogger.com/atom/ns#' term='XML'/><category scheme='http://www.blogger.com/atom/ns#' term='XSLT'/><title type='text'>Not so clever now are we, aye?</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/6246/1088/1600/test01.0.jpg"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;" src="http://photos1.blogger.com/blogger/6246/1088/320/test01.0.jpg" border="0" alt="" /&gt;&lt;/a&gt;I need to explain here that this image was supposed to be an orange square, half the size of the blue one, placed in the middle of the image.&lt;br /&gt;&lt;br /&gt;Now at first glance it would seem that I've either got my buckets muddled up, or else the tiles in the TIFF image, which coincidentally  are the same size as the buckets (16x16) have got jumbled. Well not so.&lt;br /&gt;&lt;br /&gt;It so happens that I didn't realize the importance of Occlusion Culling. My buckets contain samples for all the micropolygons for each of the primitives covered by the bucket. What I need to do is only keep one sample, the first, (seeing as the micropolygons have been depth sorted) for each sample position in the bucket.&lt;br /&gt;&lt;br /&gt;I'd better go and implement the occlusion culling before I go any further.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20729352-113897598109328960?l=x-reyes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://x-reyes.blogspot.com/feeds/113897598109328960/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20729352&amp;postID=113897598109328960' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20729352/posts/default/113897598109328960'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20729352/posts/default/113897598109328960'/><link rel='alternate' type='text/html' href='http://x-reyes.blogspot.com/2006/02/not-so-clever-now-are-we-aye.html' title='Not so clever now are we, aye?'/><author><name>Philip Fennell</name><uri>http://www.blogger.com/profile/12353204855753453016</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://3.bp.blogspot.com/_XhX96nJzT_8/SQwSvu3qeYI/AAAAAAAAAAk/rD9NgMytyag/S220/philip_fennell.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-20729352.post-113897541633348002</id><published>2006-02-03T13:44:00.000Z</published><updated>2006-02-03T14:05:08.253Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='Reyes'/><category scheme='http://www.blogger.com/atom/ns#' term='SVG'/><category scheme='http://www.blogger.com/atom/ns#' term='XML'/><category scheme='http://www.blogger.com/atom/ns#' term='XSLT'/><title type='text'>Getting there...</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/6246/1088/1600/test01.jpg"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;" src="http://photos1.blogger.com/blogger/6246/1088/320/test01.jpg" border="0" alt="" /&gt;&lt;/a&gt;It seems a bit of a leap from my previous posts to this one that announces results of the first tests of this implementation of the  Reyes pipeline. However, above is a JPEG of the first TIFF image produced.&lt;br /&gt;&lt;br /&gt;Yes, blue isn't it!&lt;br /&gt;&lt;br /&gt;Now, don't all rush at once, it is a simple image but it proves that I can get an input SVG graphic through the pipeline, in the processes splitting it into smaller primitives, create grids, bust the grids into micropolygons, sample them, wrap the rendered sequence of pixel values in a TIFF image format before running it through a Base64 encoding and out to the file system (all in XSLT I might add). Of course I have to Base64 decode the resulting file in order to view it, but that's trivial compared to what has gone on previously.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20729352-113897541633348002?l=x-reyes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://x-reyes.blogspot.com/feeds/113897541633348002/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20729352&amp;postID=113897541633348002' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20729352/posts/default/113897541633348002'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20729352/posts/default/113897541633348002'/><link rel='alternate' type='text/html' href='http://x-reyes.blogspot.com/2006/02/getting-there.html' title='Getting there...'/><author><name>Philip Fennell</name><uri>http://www.blogger.com/profile/12353204855753453016</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://3.bp.blogspot.com/_XhX96nJzT_8/SQwSvu3qeYI/AAAAAAAAAAk/rD9NgMytyag/S220/philip_fennell.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-20729352.post-113836321669474660</id><published>2006-01-27T11:49:00.001Z</published><updated>2008-03-25T21:06:37.886Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='Reyes'/><category scheme='http://www.blogger.com/atom/ns#' term='SVG'/><category scheme='http://www.blogger.com/atom/ns#' term='XML'/><category scheme='http://www.blogger.com/atom/ns#' term='XSLT'/><title type='text'>Catching errors and confirming results...</title><content type='html'>The XSLT pipeline processor that I created in order to apply the multiple transforms necessary to generate a rendered result is in need of two things:&lt;br /&gt;&lt;br /&gt;1) It needs to report that an empty sequence from a process is an error, and a fatal one at that. Fairly obvious really!&lt;br /&gt;&lt;br /&gt;2) Secondly, it would be nice if one could declare what the expected result should be.&lt;br /&gt;&lt;br /&gt;Of course if I knew, in great detail, what the result was going to be  before hand, then you have to ask yourself why have I created all of this mechanism in the first place. It's a bit self referential.&lt;br /&gt;&lt;br /&gt;No, what I'm thinking of is declaring some pattern that can be applied to the result in order to provide some high level verification that the result is looking like what I'd expect. This is not comparing the differences, it's more of a case of 'have I got the right number of blocks?' or 'Does this node exist?'.&lt;br /&gt;&lt;br /&gt;Now the obvious candidate for this is an XPath expression that is bound to a process and is evaluated against the result of the process. If the expression evaluates to true, then proceed, otherwise exit the pipeline gracefully and let me know what went wrong.&lt;br /&gt;&lt;br /&gt;Now this sounds all very well and good, but, and there is one big but, the only easy way to evaluate an XPath expression is to use the saxon:eval() extension function. Now the thing is, I don't like using implementation specific extensions because they aren't transferable. Of course you could implement a simple XPath evaluator in XSLT by tokenizing the path expression, using regular expressions and recursively processing the path steps. I'll only do that if I'm ever so bored that I haven't got anything better to do!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20729352-113836321669474660?l=x-reyes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://x-reyes.blogspot.com/feeds/113836321669474660/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20729352&amp;postID=113836321669474660' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20729352/posts/default/113836321669474660'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20729352/posts/default/113836321669474660'/><link rel='alternate' type='text/html' href='http://x-reyes.blogspot.com/2006/01/catching-errors-and-confirming-results.html' title='Catching errors and confirming results...'/><author><name>Philip Fennell</name><uri>http://www.blogger.com/profile/12353204855753453016</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://3.bp.blogspot.com/_XhX96nJzT_8/SQwSvu3qeYI/AAAAAAAAAAk/rD9NgMytyag/S220/philip_fennell.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-20729352.post-113697942345515270</id><published>2006-01-11T11:25:00.000Z</published><updated>2006-01-30T08:56:09.240Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='Reyes'/><category scheme='http://www.blogger.com/atom/ns#' term='SVG'/><category scheme='http://www.blogger.com/atom/ns#' term='XML'/><category scheme='http://www.blogger.com/atom/ns#' term='XSLT'/><title type='text'>Goals</title><content type='html'>The following list identifies the things I hope to achieve by undertaking the task of implementing the Reyes rendering architecture using XML and XSLT.&lt;br /&gt;&lt;br /&gt;1) Extend my knowledge of and experience with XSLT 2 and XPath 2.&lt;br /&gt;&lt;br /&gt;2) Learn some of the fundamental principles of building a Reyes renderer and 2D/3D rendering in general.&lt;br /&gt;&lt;br /&gt;3) Better understand what can be achieved by using functional programming techniques, where recursion replaces conventional loops and there are no side-effects from calling a function.&lt;br /&gt;&lt;br /&gt;4) Produce a renderer that can, initially, render simple SVG graphics as Base64 encoded TIFF files.&lt;br /&gt;&lt;br /&gt;5) The longer term goal is to then extend X-Reyes to render simple X3D scenes with a basic lighting model. This is altogether more of a challenge as it really gets to the core of what Reyes rendering, and 3D rendering in general is all about.&lt;br /&gt;&lt;br /&gt;6) Everything that is created should be as human readable as possible. I say this because there is one thing I cannot stand, and that is the anonymous list of arguments to a function. When reading someone's code, at a glance it is not possible to tell what the nature of those arguments might be. Now that XSLT 2 allows the passing of parameters to both matching templates as well as named templates it is possible to get a better idea of what parameters are expected at the other end. I know that the xsl:function element has anonymous parameters but then nothing's perfect.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20729352-113697942345515270?l=x-reyes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://x-reyes.blogspot.com/feeds/113697942345515270/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20729352&amp;postID=113697942345515270' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20729352/posts/default/113697942345515270'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20729352/posts/default/113697942345515270'/><link rel='alternate' type='text/html' href='http://x-reyes.blogspot.com/2006/01/goals.html' title='Goals'/><author><name>Philip Fennell</name><uri>http://www.blogger.com/profile/12353204855753453016</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://3.bp.blogspot.com/_XhX96nJzT_8/SQwSvu3qeYI/AAAAAAAAAAk/rD9NgMytyag/S220/philip_fennell.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-20729352.post-113681380862583098</id><published>2006-01-09T13:20:00.001Z</published><updated>2008-03-25T20:59:11.817Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='Reyes'/><category scheme='http://www.blogger.com/atom/ns#' term='SVG'/><category scheme='http://www.blogger.com/atom/ns#' term='XML'/><category scheme='http://www.blogger.com/atom/ns#' term='XSLT'/><title type='text'>Why would I do such a thing?</title><content type='html'>I do a lot of work with &lt;a href="http://www.w3.org/XML/"&gt;XML&lt;/a&gt; and &lt;a href="http://www.w3.org/Style/XSL/"&gt;XSLT&lt;/a&gt;. Since XSLT 2 came along my horizons have dropped away and all I can see is clear, deepening, blue sky and quite possibly the edge of space.&lt;br /&gt;&lt;br /&gt;I have a deep love for and interest in computer graphics and love working with XML. So you'd be right in thinking that I'm also quite taken by both &lt;a href="http://www.w3.org/Graphics/SVG/"&gt;SVG&lt;/a&gt; (Scalable Vector Graphics) and &lt;a href="http://www.web3d.org/x3d/"&gt;X3D&lt;/a&gt; (XML encoding of VRML).&lt;br /&gt;&lt;br /&gt;So how do you get from there to an implementation of the &lt;a href="http://en.wikipedia.org/wiki/Reyes_rendering"&gt;Reyes rendering architecture&lt;/a&gt;. Well, I'm keen to see if XSLT 2's tree and sequence processing abilities would enable me to apply multiple transformations to an input model that would carry-out the necessary processing steps identified by the Reyes algorithm. The end result would be a sequence of samples from the image that would represent the rasterization of the original vector graphic (SVG or X3D).&lt;br /&gt;&lt;br /&gt;Now as you may know, XML does not support the generation of binary data. But, it doesn't stop you creating sequences of integer values (pixel values) that can be Base64 encoded prior to output in a file. If you create the right sequences you can decode the Base64 file to obtain a binary file, which in this case could be a &lt;a href="http://partners.adobe.com/public/developer/tiff/index.html"&gt;TIFF&lt;/a&gt; image file, of the image you are attepmting to render.&lt;br /&gt;&lt;br /&gt;If you are still asking yourself why, then all I can say is:&lt;br /&gt;&lt;br /&gt;'Think how much you can learn from trying!'&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/20729352-113681380862583098?l=x-reyes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://x-reyes.blogspot.com/feeds/113681380862583098/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=20729352&amp;postID=113681380862583098' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/20729352/posts/default/113681380862583098'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/20729352/posts/default/113681380862583098'/><link rel='alternate' type='text/html' href='http://x-reyes.blogspot.com/2006/01/why-would-i-do-such-thing.html' title='Why would I do such a thing?'/><author><name>Philip Fennell</name><uri>http://www.blogger.com/profile/12353204855753453016</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://3.bp.blogspot.com/_XhX96nJzT_8/SQwSvu3qeYI/AAAAAAAAAAk/rD9NgMytyag/S220/philip_fennell.jpg'/></author><thr:total>0</thr:total></entry></feed>
