<?xml version="1.0" encoding="UTF-8"?>
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:default="http://purl.org/rss/1.0/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:admin="http://webns.net/mvcb/" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:content="http://purl.org/rss/1.0/modules/content/"><default:channel xmlns="http://purl.org/rss/1.0/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:admin="http://webns.net/mvcb/" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" rdf:about="http://steelsoftware.blog.co.uk/"><title>Steel Software Blogs</title><link>http://steelsoftware.blog.co.uk/</link><description>This is the blog of Steven Workman, a University of Sheffield Computer Science student. And this is his working life</description><dc:language xmlns:dc="http://purl.org/dc/elements/1.1/">en-UK</dc:language><admin:generatorAgent xmlns:admin="http://webns.net/mvcb/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" rdf:resource="http://www.blog.co.uk"/><sy:updatePeriod xmlns:sy="http://purl.org/rss/1.0/modules/syndication/">hourly</sy:updatePeriod><sy:updateFrequency xmlns:sy="http://purl.org/rss/1.0/modules/syndication/">8</sy:updateFrequency><sy:updateBase xmlns:sy="http://purl.org/rss/1.0/modules/syndication/">2000-01-01T12:00+00:00</sy:updateBase><image><title>Steel Software Blogs</title><link>http://steelsoftware.blog.co.uk/</link><url>http://data5.blog.de/design/preview/f0/db0cb37752597981e274c021ae8ca2_160x200.jpg</url></image><items><rdf:Seq><rdf:li rdf:resource="http://steelsoftware.blog.co.uk/2006/08/25/v3~1068736/"/><rdf:li rdf:resource="http://steelsoftware.blog.co.uk/2006/06/24/website_changes~906659/"/><rdf:li rdf:resource="http://steelsoftware.blog.co.uk/2006/05/23/wrap_up~821464/"/><rdf:li rdf:resource="http://steelsoftware.blog.co.uk/2006/04/21/done~745981/"/><rdf:li rdf:resource="http://steelsoftware.blog.co.uk/2006/04/05/don_t_let_it_get_to_you~704992/"/><rdf:li rdf:resource="http://steelsoftware.blog.co.uk/2006/03/29/a_vision_of_the_future~683954/"/><rdf:li rdf:resource="http://steelsoftware.blog.co.uk/2006/03/25/splitting_hairs~672697/"/><rdf:li rdf:resource="http://steelsoftware.blog.co.uk/2006/03/17/time_ticking_away~653441/"/><rdf:li rdf:resource="http://steelsoftware.blog.co.uk/2006/03/01/troublesome_volume_tracing~603683/"/><rdf:li rdf:resource="http://steelsoftware.blog.co.uk/2006/02/12/mesh_mayhem~557532/"/><rdf:li rdf:resource="http://steelsoftware.blog.co.uk/2006/01/26/stage~508823/"/><rdf:li rdf:resource="http://steelsoftware.blog.co.uk/2006/01/17/game_engines_cheat~478454/"/><rdf:li rdf:resource="http://steelsoftware.blog.co.uk/2006/01/11/new_year_update~461197/"/><rdf:li rdf:resource="http://steelsoftware.blog.co.uk/2005/12/21/xmas_update~403577/"/><rdf:li rdf:resource="http://steelsoftware.blog.co.uk/2005/11/11/a_full_description~298722/"/><rdf:li rdf:resource="http://steelsoftware.blog.co.uk/2005/11/08/week_5_update~292897/"/><rdf:li rdf:resource="http://steelsoftware.blog.co.uk/2005/11/04/cracked~281842/"/><rdf:li rdf:resource="http://steelsoftware.blog.co.uk/2005/10/29/cracking_the_algorithm~269707/"/><rdf:li rdf:resource="http://steelsoftware.blog.co.uk/2005/10/26/the_cracking_algorithm~261876/"/><rdf:li rdf:resource="http://steelsoftware.blog.co.uk/2005/10/18/week_3_and_a_website_milestone~242977/"/><rdf:li rdf:resource="http://steelsoftware.blog.co.uk/2005/10/03/second_week~214268/"/><rdf:li rdf:resource="http://steelsoftware.blog.co.uk/2005/09/27/update~203231/"/><rdf:li rdf:resource="http://steelsoftware.blog.co.uk/2005/09/13/the_future_of_computers~178972/"/><rdf:li rdf:resource="http://steelsoftware.blog.co.uk/2005/09/05/dx9_or_opengl~164092/"/><rdf:li rdf:resource="http://steelsoftware.blog.co.uk/2005/09/02/v1_9_11_and_opengl~158412/"/><rdf:li rdf:resource="http://steelsoftware.blog.co.uk/2005/08/30/project_prioritisaiton~150664/"/><rdf:li rdf:resource="http://steelsoftware.blog.co.uk/2005/08/23/v1_9_10/"/><rdf:li rdf:resource="http://steelsoftware.blog.co.uk/2005/08/16/version_1_9_9/"/><rdf:li rdf:resource="http://steelsoftware.blog.co.uk/2005/08/12/v1_7_5/"/><rdf:li rdf:resource="http://steelsoftware.blog.co.uk/2005/08/10/v1_7_0/"/></rdf:Seq></items></default:channel><default:item xmlns:default="http://purl.org/rss/1.0/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" rdf:about="http://steelsoftware.blog.co.uk/2006/08/25/v3~1068736/"><default:title>v3.01</default:title><default:link>http://steelsoftware.blog.co.uk/2006/08/25/v3~1068736/</default:link><dc:date xmlns:dc="http://purl.org/dc/elements/1.1/">2006-08-25T15:52:44+02:00</dc:date><default:description>	&lt;p&gt;I've a feeling that I really should update this more often. Ah well, here goes:&lt;/p&gt;
	&lt;p&gt;USE (University Sports Engine) v3.01&lt;br&gt;
Fixed:&lt;br&gt;
Lop-sided forums&lt;br&gt;
Standardised folder names&lt;br&gt;
Email addresses always being hidden&lt;/p&gt;
	&lt;p&gt;Added:&lt;br&gt;
Icons for MSN/AOL/Register etc&lt;/p&gt;
	&lt;p&gt;Known bugs:&lt;br&gt;
Picture association with even/match incorrect&lt;br&gt;
Profile picture upload not being available to everyone&lt;/p&gt;
	&lt;p&gt;Scheduled additions in v3.02&lt;br&gt;
Tutorials&lt;br&gt;
"Who is in picture" to be displayed with each picture&lt;br&gt;
Rotate pictures in the edit picture menu&lt;br&gt;
Alternate profile picture upload&lt;/p&gt;
	&lt;p&gt;The reason for all these new icons is that in the v3.1 update the website will be completely modular, split into Basic, Standard, Full and an additional module known as Fantasy Hockey, available for Standard and Full packages. The website has been renamed 'USE' for University Sports Engine. Therefore, the packages are named: USE-less (basic), USE (standard), USE-Full (Full) with Fantasy appended onto either of the latter two.&lt;/p&gt;
	&lt;p&gt;Next week I shall be registering &lt;a href="http://www.uni-sport.org"&gt;www.uni-sport.org&lt;/a&gt; and &lt;a href="http://www.steel-software.com"&gt;www.steel-software.com&lt;/a&gt; and moving hosts to &lt;a href="http://www.dreamhost.com"&gt;Dreamhost&lt;/a&gt; which gives me a bucketload more space and bandwidth. From then, any uni who wants a sports website, just has to ask! They'll be limited with the choice of template at first, but that's a story for another day.&lt;/p&gt;
	&lt;p&gt;v3.02 is scheduled for late next week. However, some of the changelist may be subject to change.&lt;/p&gt;
	&lt;p&gt;&lt;img src="/img/smilies/icon_wave.gif" alt=":wave:" class="middle" border="0"&gt;&lt;br&gt;
Steve&lt;/p&gt;
	&lt;p&gt;Currently Listening To: Belle &amp; Sebastian&lt;br&gt;
Currenlty Eating: Very little, on a diet&lt;br&gt;
Currently Watching: Grey's Anatomy&lt;br&gt;
Currenty Reading: The Times (sudoku)&lt;br&gt;
Minutes Left at current job: 68
&lt;/p&gt;
&lt;p&gt; &lt;small&gt; &lt;a href="http://steelsoftware.blog.co.uk/2006/08/25/v3~1068736/#comments"&gt;Comments&lt;/a&gt; &lt;/small&gt; &lt;/p&gt;</default:description><content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[	<p>I've a feeling that I really should update this more often. Ah well, here goes:</p>
	<p>USE (University Sports Engine) v3.01<br>
Fixed:<br>
Lop-sided forums<br>
Standardised folder names<br>
Email addresses always being hidden</p>
	<p>Added:<br>
Icons for MSN/AOL/Register etc</p>
	<p>Known bugs:<br>
Picture association with even/match incorrect<br>
Profile picture upload not being available to everyone</p>
	<p>Scheduled additions in v3.02<br>
Tutorials<br>
"Who is in picture" to be displayed with each picture<br>
Rotate pictures in the edit picture menu<br>
Alternate profile picture upload</p>
	<p>The reason for all these new icons is that in the v3.1 update the website will be completely modular, split into Basic, Standard, Full and an additional module known as Fantasy Hockey, available for Standard and Full packages. The website has been renamed 'USE' for University Sports Engine. Therefore, the packages are named: USE-less (basic), USE (standard), USE-Full (Full) with Fantasy appended onto either of the latter two.</p>
	<p>Next week I shall be registering <a href="http://www.uni-sport.org">www.uni-sport.org</a> and <a href="http://www.steel-software.com">www.steel-software.com</a> and moving hosts to <a href="http://www.dreamhost.com">Dreamhost</a> which gives me a bucketload more space and bandwidth. From then, any uni who wants a sports website, just has to ask! They'll be limited with the choice of template at first, but that's a story for another day.</p>
	<p>v3.02 is scheduled for late next week. However, some of the changelist may be subject to change.</p>
	<p><img src="/img/smilies/icon_wave.gif" alt=":wave:" class="middle" border="0"><br>
Steve</p>
	<p>Currently Listening To: Belle & Sebastian<br>
Currenlty Eating: Very little, on a diet<br>
Currently Watching: Grey's Anatomy<br>
Currenty Reading: The Times (sudoku)<br>
Minutes Left at current job: 68
</p>
<p> <small> <a href="http://steelsoftware.blog.co.uk/2006/08/25/v3~1068736/#comments">Comments</a> </small> </p>]]></content:encoded></default:item><default:item xmlns:default="http://purl.org/rss/1.0/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" rdf:about="http://steelsoftware.blog.co.uk/2006/06/24/website_changes~906659/"><default:title>Website Changes</default:title><default:link>http://steelsoftware.blog.co.uk/2006/06/24/website_changes~906659/</default:link><dc:date xmlns:dc="http://purl.org/dc/elements/1.1/">2006-06-24T00:57:40+02:00</dc:date><default:description>	&lt;p&gt;Well, I've been hard at for for 2 weeks now and I've kinda ignored this blog, so, I thought I'd do a bit of an update. I'm not going to dump the changelog on here cos it's a few miles long, this "update" has become much more of a major change than I thought.&lt;/p&gt;
	&lt;p&gt;Last year, there were no real functions for looking through previous years' data, or even separating it from the current year. Therefore, on this new version, users, matches, events and pictures now have an 'archived' field. There are now search facilities all over the site, all of which work on AJAX technology which makes things all nice and pretty. Therefore, the major changes are:&lt;br&gt;
Integrated PhpBB2 (single login, single database)&lt;br&gt;
Archive Support&lt;br&gt;
Added user details&lt;br&gt;
AJAX search across the site&lt;br&gt;
Fantasy Hockey online (currently not implemented)&lt;br&gt;
Added admin features including full user control, security log and information pages and adverts in the db&lt;br&gt;
Picture enhancements including better gallery, re-arranged directory structure and a "who is in this picture" aka 'facebook' functions.&lt;br&gt;
Additional squad filters by users' preferred playing position&lt;br&gt;
More user preferences and attributes.&lt;br&gt;
More match statistics including cards and a friendly option.&lt;br&gt;
and so on....&lt;/p&gt;
	&lt;p&gt;Most of this is now done and can be seen at &lt;a href="http://www.sheffieldhockey.com/beta"&gt;www.sheffieldhockey.com/beta&lt;/a&gt;&lt;/p&gt;
	&lt;p&gt;It's fucking hard work. It'll all be done soon though, nearly there&lt;/p&gt;
	&lt;p&gt;&lt;img src="/img/smilies/icon_wave.gif" alt=":wave:" class="middle" border="0"&gt;&lt;br&gt;
Steve&lt;/p&gt;
	&lt;p&gt;Currently Watching: Green Wing&lt;br&gt;
Currently Eating: very little, damn bank manager&lt;br&gt;
Currently Listening To: Pink Floyd&lt;br&gt;
Currently Reading: A Scanner Darkly
&lt;/p&gt;
&lt;p&gt; &lt;small&gt; &lt;a href="http://steelsoftware.blog.co.uk/2006/06/24/website_changes~906659/#comments"&gt;Comments&lt;/a&gt; &lt;/small&gt; &lt;/p&gt;</default:description><content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[	<p>Well, I've been hard at for for 2 weeks now and I've kinda ignored this blog, so, I thought I'd do a bit of an update. I'm not going to dump the changelog on here cos it's a few miles long, this "update" has become much more of a major change than I thought.</p>
	<p>Last year, there were no real functions for looking through previous years' data, or even separating it from the current year. Therefore, on this new version, users, matches, events and pictures now have an 'archived' field. There are now search facilities all over the site, all of which work on AJAX technology which makes things all nice and pretty. Therefore, the major changes are:<br>
Integrated PhpBB2 (single login, single database)<br>
Archive Support<br>
Added user details<br>
AJAX search across the site<br>
Fantasy Hockey online (currently not implemented)<br>
Added admin features including full user control, security log and information pages and adverts in the db<br>
Picture enhancements including better gallery, re-arranged directory structure and a "who is in this picture" aka 'facebook' functions.<br>
Additional squad filters by users' preferred playing position<br>
More user preferences and attributes.<br>
More match statistics including cards and a friendly option.<br>
and so on....</p>
	<p>Most of this is now done and can be seen at <a href="http://www.sheffieldhockey.com/beta">www.sheffieldhockey.com/beta</a></p>
	<p>It's fucking hard work. It'll all be done soon though, nearly there</p>
	<p><img src="/img/smilies/icon_wave.gif" alt=":wave:" class="middle" border="0"><br>
Steve</p>
	<p>Currently Watching: Green Wing<br>
Currently Eating: very little, damn bank manager<br>
Currently Listening To: Pink Floyd<br>
Currently Reading: A Scanner Darkly
</p>
<p> <small> <a href="http://steelsoftware.blog.co.uk/2006/06/24/website_changes~906659/#comments">Comments</a> </small> </p>]]></content:encoded></default:item><default:item xmlns:default="http://purl.org/rss/1.0/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" rdf:about="http://steelsoftware.blog.co.uk/2006/05/23/wrap_up~821464/"><default:title>Wrap-Up</default:title><default:link>http://steelsoftware.blog.co.uk/2006/05/23/wrap_up~821464/</default:link><dc:date xmlns:dc="http://purl.org/dc/elements/1.1/">2006-05-23T01:02:59+02:00</dc:date><default:description>	&lt;p&gt;Ok, it's now been 3 weeks since I handed in my dissertation report and now is the time to share what I've found with you lot. First things first:&lt;/p&gt;
	&lt;p&gt;&lt;a href="http://www.dcs.shef.ac.uk/~aca03sw/report.pdf"&gt;Dissertation Report Document (3MB ) &lt;/a&gt;&lt;br&gt;
&lt;a href="http://www.dcs.shef.ac.uk/~aca03sw/Video.mov"&gt;Demonstration Video (HD, Quicktime 7 required, 295MB ) &lt;/a&gt; UPDATE: the link now works, sorry guys &lt;img src="/img/smilies/icon_biggrin.gif" alt=":D" class="middle" border="0"&gt;&lt;br&gt;
&lt;a href="http://www.dcs.shef.ac.uk/~aca03sw/poster.png"&gt;Dissertation Poster (20MB PNG file, 10k*7K full resolution ) &lt;/a&gt;&lt;/p&gt;
	&lt;p&gt;I'm now going to shamelessly cut and paste from the report itself giving the conclusion for the project.&lt;/p&gt;
	&lt;p&gt;This project set out to create a method of realistically destroying or fracturing 3D polygonal objects in real-time. This technique was targeted for use in computer games to produce better interactive environments for the latest games.&lt;/p&gt;
	&lt;p&gt;Research for this system came from variety of sources. The project was most heavily influenced by Fox [2] and Miller [3] yet the base for this entire project was the work by O’Brien [10]. Additional influence came from attempts to simulate this in commercial computer games such as Red Faction [13].&lt;/p&gt;
	&lt;p&gt;It became clear early on that in order to maintain the real-time aspect of this system there would have to be an offline process to generate crack patterns. The Fracture generator created patterns in a way that could be directly influenced by an artist with the use of an alpha texture. This gave the artist much more control over how the crack pattern would look so that objects in the real-time environment would fracture in different ways dependent upon their material strength set out by the artist. However, due to difficulty with the implementation of the volumization algorithm, this module of the system was unable to output crack patterns in the desired format. If further work was to be carried out in this area, the modular design of the real-time and offline systems means that the real-time program does not have to be rebuilt as it will accept crack patterns created with any generator.&lt;/p&gt;
	&lt;p&gt;With a manually created crack pattern, the real-time aspect of the system, the fracture viewer, was able to successfully crack objects in to the volumes set out in the crack pattern. The performance of this system was good; however, the time to complete the cracking process was noticeable in models with more than 1000 polygons. Using this technique on low-polygon objects such as walls, glass and small to medium sized household objects would be an excellent way to simulate a dynamic environment. That said, improvements to the cracking algorithm could be made.  Using a high-performance programming language i.e. C++, would improve the speed of the algorithm so that this polygon limit may be increased; however, the choice of C# as the programming language was the best language for the rapid development of the project at the time. An optimized sealing algorithm would decrease the number of polygons to be rendered in the resultant pieces, thereby increasing rendering speeds. The use of a bounding sphere test with each volume in the crack pattern could also increase performance. With the advent of multiple processor desktop computers this process could be threaded and performed in parallel so that the performance of this process is increased significantly.&lt;/p&gt;
	&lt;p&gt;The quality of the resultant pieces was generally good. As described in section 6.4, problems were encountered re-meshing the pieces. Whilst this caused problems with more complex crack patterns, figure 6.7 showed that the re-meshing process could work successfully. The quality of the sealing algorithm was acceptable but further work into this area of the algorithm should be performed.&lt;/p&gt;
	&lt;p&gt;If this system was added to a physically based environment (by the inclusion of a physics engine in the computer game) the resultant pieces of a cracked mesh would be animated in a realistic manner. This would make the destruction of each 3D object look realistic and therefore suitable for a commercial product.&lt;/p&gt;
	&lt;p&gt;Quite simply, with a bit more work on the re-meshing (using multiple clipping planes to seal the mesh, a better algorithm than the naive one to create continuous meshes that normals could be created from) and getting a bit of shading on it and it'd look much better. But, the potential is there.&lt;/p&gt;
	&lt;p&gt;Finally, a bit about MDX. Personally, I've loved working with the API. It's been simple to do even the more complex stuff with it and I've been learning 3D programming for less than 8 months. However, one or two little things bug me, like how much difference having the MeshFlags as Dynamic instead of Managed or SystemMemory makes (gave me a whole week of headaches). I would recommend it to the industry.... but not for commercial games. Use it for concept prototypes where the time you have to build something does matter or for a throw-away part of the game. MDX code takes an awful lot less time to write than UnMDX and is a lot less prone to niggly stupid bugs that pointers tend to introduce. MDX is just not fast enough for commercial development. 20% of your framerate is a lot to lose!&lt;/p&gt;
	&lt;p&gt;So, what next for me...&lt;br&gt;
Back to website development really. I've got 3 on the go. Sheffield Uni Rowing Club want in on the squad system so they're getting a cut n past job of the hockey website, &lt;a href="http://tsc.union.shef.ac.uk"&gt;TSC&lt;/a&gt; needs an update and the &lt;a href="http://www.sheffieldhockey.com/beta"&gt;hockey site itself&lt;/a&gt; is getting the works, including integrated PHPBB and my own fantasy league online that's integrated into the user database and match reports system. That's gonna take a looooong time to do.&lt;/p&gt;
	&lt;p&gt;I'll keep y'all up to date with that over the summer&lt;br&gt;
&lt;img src="/img/smilies/icon_wave.gif" alt=":wave:" class="middle" border="0"&gt;&lt;br&gt;
Steve&lt;/p&gt;
	&lt;p&gt;Currently Listening to: &lt;a href="http://www.myspace.com/guillemotsmusic"&gt;Guillemots&lt;/a&gt; - Best live band EVER&lt;br&gt;
Currently Reading: 1001 Albums you must listen to before you die&lt;br&gt;
Currently Eating: Birthday Cake - (I was 21 yesterday)&lt;br&gt;
Currently Drinking: Champagne (see above)&lt;br&gt;
Days until my one and only exam: 7
&lt;/p&gt;
&lt;p&gt; &lt;small&gt; &lt;a href="http://steelsoftware.blog.co.uk/2006/05/23/wrap_up~821464/#comments"&gt;Comments&lt;/a&gt; &lt;/small&gt; &lt;/p&gt;</default:description><content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[	<p>Ok, it's now been 3 weeks since I handed in my dissertation report and now is the time to share what I've found with you lot. First things first:</p>
	<p><a href="http://www.dcs.shef.ac.uk/~aca03sw/report.pdf">Dissertation Report Document (3MB ) </a><br>
<a href="http://www.dcs.shef.ac.uk/~aca03sw/Video.mov">Demonstration Video (HD, Quicktime 7 required, 295MB ) </a> UPDATE: the link now works, sorry guys <img src="/img/smilies/icon_biggrin.gif" alt=":D" class="middle" border="0"><br>
<a href="http://www.dcs.shef.ac.uk/~aca03sw/poster.png">Dissertation Poster (20MB PNG file, 10k*7K full resolution ) </a></p>
	<p>I'm now going to shamelessly cut and paste from the report itself giving the conclusion for the project.</p>
	<p>This project set out to create a method of realistically destroying or fracturing 3D polygonal objects in real-time. This technique was targeted for use in computer games to produce better interactive environments for the latest games.</p>
	<p>Research for this system came from variety of sources. The project was most heavily influenced by Fox [2] and Miller [3] yet the base for this entire project was the work by O’Brien [10]. Additional influence came from attempts to simulate this in commercial computer games such as Red Faction [13].</p>
	<p>It became clear early on that in order to maintain the real-time aspect of this system there would have to be an offline process to generate crack patterns. The Fracture generator created patterns in a way that could be directly influenced by an artist with the use of an alpha texture. This gave the artist much more control over how the crack pattern would look so that objects in the real-time environment would fracture in different ways dependent upon their material strength set out by the artist. However, due to difficulty with the implementation of the volumization algorithm, this module of the system was unable to output crack patterns in the desired format. If further work was to be carried out in this area, the modular design of the real-time and offline systems means that the real-time program does not have to be rebuilt as it will accept crack patterns created with any generator.</p>
	<p>With a manually created crack pattern, the real-time aspect of the system, the fracture viewer, was able to successfully crack objects in to the volumes set out in the crack pattern. The performance of this system was good; however, the time to complete the cracking process was noticeable in models with more than 1000 polygons. Using this technique on low-polygon objects such as walls, glass and small to medium sized household objects would be an excellent way to simulate a dynamic environment. That said, improvements to the cracking algorithm could be made.  Using a high-performance programming language i.e. C++, would improve the speed of the algorithm so that this polygon limit may be increased; however, the choice of C# as the programming language was the best language for the rapid development of the project at the time. An optimized sealing algorithm would decrease the number of polygons to be rendered in the resultant pieces, thereby increasing rendering speeds. The use of a bounding sphere test with each volume in the crack pattern could also increase performance. With the advent of multiple processor desktop computers this process could be threaded and performed in parallel so that the performance of this process is increased significantly.</p>
	<p>The quality of the resultant pieces was generally good. As described in section 6.4, problems were encountered re-meshing the pieces. Whilst this caused problems with more complex crack patterns, figure 6.7 showed that the re-meshing process could work successfully. The quality of the sealing algorithm was acceptable but further work into this area of the algorithm should be performed.</p>
	<p>If this system was added to a physically based environment (by the inclusion of a physics engine in the computer game) the resultant pieces of a cracked mesh would be animated in a realistic manner. This would make the destruction of each 3D object look realistic and therefore suitable for a commercial product.</p>
	<p>Quite simply, with a bit more work on the re-meshing (using multiple clipping planes to seal the mesh, a better algorithm than the naive one to create continuous meshes that normals could be created from) and getting a bit of shading on it and it'd look much better. But, the potential is there.</p>
	<p>Finally, a bit about MDX. Personally, I've loved working with the API. It's been simple to do even the more complex stuff with it and I've been learning 3D programming for less than 8 months. However, one or two little things bug me, like how much difference having the MeshFlags as Dynamic instead of Managed or SystemMemory makes (gave me a whole week of headaches). I would recommend it to the industry.... but not for commercial games. Use it for concept prototypes where the time you have to build something does matter or for a throw-away part of the game. MDX code takes an awful lot less time to write than UnMDX and is a lot less prone to niggly stupid bugs that pointers tend to introduce. MDX is just not fast enough for commercial development. 20% of your framerate is a lot to lose!</p>
	<p>So, what next for me...<br>
Back to website development really. I've got 3 on the go. Sheffield Uni Rowing Club want in on the squad system so they're getting a cut n past job of the hockey website, <a href="http://tsc.union.shef.ac.uk">TSC</a> needs an update and the <a href="http://www.sheffieldhockey.com/beta">hockey site itself</a> is getting the works, including integrated PHPBB and my own fantasy league online that's integrated into the user database and match reports system. That's gonna take a looooong time to do.</p>
	<p>I'll keep y'all up to date with that over the summer<br>
<img src="/img/smilies/icon_wave.gif" alt=":wave:" class="middle" border="0"><br>
Steve</p>
	<p>Currently Listening to: <a href="http://www.myspace.com/guillemotsmusic">Guillemots</a> - Best live band EVER<br>
Currently Reading: 1001 Albums you must listen to before you die<br>
Currently Eating: Birthday Cake - (I was 21 yesterday)<br>
Currently Drinking: Champagne (see above)<br>
Days until my one and only exam: 7
</p>
<p> <small> <a href="http://steelsoftware.blog.co.uk/2006/05/23/wrap_up~821464/#comments">Comments</a> </small> </p>]]></content:encoded></default:item><default:item xmlns:default="http://purl.org/rss/1.0/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" rdf:about="http://steelsoftware.blog.co.uk/2006/04/21/done~745981/"><default:title>Done</default:title><default:link>http://steelsoftware.blog.co.uk/2006/04/21/done~745981/</default:link><dc:date xmlns:dc="http://purl.org/dc/elements/1.1/">2006-04-21T23:03:20+02:00</dc:date><default:description>	&lt;p&gt;Whilst I write this I'm feeling like one very happy bunny. I've finished writing the first draft of my dissertation, it's only a casual &lt;strong&gt;18,100&lt;/strong&gt; words long, 69 pages, easy peasy. If you want to have a look: &lt;a href="http://www.dcs.shef.ac.uk/~u3sw/"&gt;My webspace&lt;/a&gt; contains a PDF (2M&lt;img src="/img/smilies/icon_cool.gif" alt="B)" class="middle" border="0"&gt; and a DOC (Word 00-03 compatible) file (9M&lt;img src="/img/smilies/icon_cool.gif" alt="B)" class="middle" border="0"&gt;. Zip file in that folder contains old code but the movie shows a cracking process happening.&lt;/p&gt;
	&lt;p&gt;I'm going to bring attention to one very important part of the evaluation, the performance tests. The image below is the performance graph that's in my dissertation&lt;/p&gt;
	&lt;p&gt;&lt;a href="http://www.blog.co.uk/srv/media/media_item.php?item_ID=495464"&gt;&lt;img src="http://data1.blog.de/media/464/495464_83865f4f51_m.png" align="" alt="performance chart" vspace="5" hspace="5"&gt;&lt;/a&gt;&lt;/p&gt;
	&lt;p&gt;Look at the polygon count along the bottom and then the time taken up the left. Put simply, for integration into a game, the process must take less than 0.1-0.2 seconds (there are performance improvements to be added, one of them being writing it in C++ and the other being working directly with the Vertex and Index buffers instead of writing to memory first). This limits you to a polygon count of around 600 for a crackable object. Think about it, that's not too much, but it's enough, probably more than enough for most scene objects (look at Unreal Engine 3, most of the detail is in Normal and Relief maps, the actual polygon count hasn't risen much at all). Basically, this can be put in to a game, quite easily too, and it'd look very good and be very effective. Now all that needs to be done is for the right people to listen!&lt;/p&gt;
	&lt;p&gt;I've actually had a lot of fun doing this project in the last few days. Seeing it all come together is a fantastic feeling which is almost rivalled by the fact that it WORKS!!! (something I still can't believe really). I've learned so much about graphics, game programming design and how object-oriented languages are simply better than anything else. Visual Studio 2005 has been a pleasure to work with and MDX just makes things simple. Something in C++ like optimizing a mesh would involve a whole lot of pointers and guff, in MDX it's just Mesh.Clean(...). Why can't people see that for prototypes and technique tesiting like a project such as this is it's just perfect. If industry prototyped ideas often they should do it in MDX. No arguements.&lt;/p&gt;
	&lt;p&gt;Ah well, I'll let you know how the final version comes out when it's handed in in 12 days time &lt;img src="/img/smilies/icon_biggrin.gif" alt=":D" class="middle" border="0"&gt; Unfortunatley I now have to work on my other projects that I've ignored (1x concurrent systems, 2x programming language semantics and 1x computer games tech which is implementing an edge collapse algorithm... yay)&lt;/p&gt;
	&lt;p&gt;&lt;img src="/img/smilies/icon_wave.gif" alt=":wave:" class="middle" border="0"&gt;&lt;br&gt;
Steve&lt;/p&gt;
	&lt;p&gt;Currently Listening To: Hot Hot Heat&lt;br&gt;
Currently Reading: ... through my dissertation&lt;br&gt;
Currently Watching: Green Wing&lt;br&gt;
Currently Eating: Bananas&lt;br&gt;
Days until deadline: 12
&lt;/p&gt;
&lt;p&gt; &lt;small&gt; &lt;a href="http://steelsoftware.blog.co.uk/2006/04/21/done~745981/#comments"&gt;Comments&lt;/a&gt; &lt;/small&gt; &lt;/p&gt;</default:description><content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[	<p>Whilst I write this I'm feeling like one very happy bunny. I've finished writing the first draft of my dissertation, it's only a casual <strong>18,100</strong> words long, 69 pages, easy peasy. If you want to have a look: <a href="http://www.dcs.shef.ac.uk/~u3sw/">My webspace</a> contains a PDF (2M<img src="/img/smilies/icon_cool.gif" alt="B)" class="middle" border="0"> and a DOC (Word 00-03 compatible) file (9M<img src="/img/smilies/icon_cool.gif" alt="B)" class="middle" border="0">. Zip file in that folder contains old code but the movie shows a cracking process happening.</p>
	<p>I'm going to bring attention to one very important part of the evaluation, the performance tests. The image below is the performance graph that's in my dissertation</p>
	<p><a href="http://www.blog.co.uk/srv/media/media_item.php?item_ID=495464"><img src="http://data1.blog.de/media/464/495464_83865f4f51_m.png" align="" alt="performance chart" vspace="5" hspace="5"></a></p>
	<p>Look at the polygon count along the bottom and then the time taken up the left. Put simply, for integration into a game, the process must take less than 0.1-0.2 seconds (there are performance improvements to be added, one of them being writing it in C++ and the other being working directly with the Vertex and Index buffers instead of writing to memory first). This limits you to a polygon count of around 600 for a crackable object. Think about it, that's not too much, but it's enough, probably more than enough for most scene objects (look at Unreal Engine 3, most of the detail is in Normal and Relief maps, the actual polygon count hasn't risen much at all). Basically, this can be put in to a game, quite easily too, and it'd look very good and be very effective. Now all that needs to be done is for the right people to listen!</p>
	<p>I've actually had a lot of fun doing this project in the last few days. Seeing it all come together is a fantastic feeling which is almost rivalled by the fact that it WORKS!!! (something I still can't believe really). I've learned so much about graphics, game programming design and how object-oriented languages are simply better than anything else. Visual Studio 2005 has been a pleasure to work with and MDX just makes things simple. Something in C++ like optimizing a mesh would involve a whole lot of pointers and guff, in MDX it's just Mesh.Clean(...). Why can't people see that for prototypes and technique tesiting like a project such as this is it's just perfect. If industry prototyped ideas often they should do it in MDX. No arguements.</p>
	<p>Ah well, I'll let you know how the final version comes out when it's handed in in 12 days time <img src="/img/smilies/icon_biggrin.gif" alt=":D" class="middle" border="0"> Unfortunatley I now have to work on my other projects that I've ignored (1x concurrent systems, 2x programming language semantics and 1x computer games tech which is implementing an edge collapse algorithm... yay)</p>
	<p><img src="/img/smilies/icon_wave.gif" alt=":wave:" class="middle" border="0"><br>
Steve</p>
	<p>Currently Listening To: Hot Hot Heat<br>
Currently Reading: ... through my dissertation<br>
Currently Watching: Green Wing<br>
Currently Eating: Bananas<br>
Days until deadline: 12
</p>
<p> <small> <a href="http://steelsoftware.blog.co.uk/2006/04/21/done~745981/#comments">Comments</a> </small> </p>]]></content:encoded></default:item><default:item xmlns:default="http://purl.org/rss/1.0/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" rdf:about="http://steelsoftware.blog.co.uk/2006/04/05/don_t_let_it_get_to_you~704992/"><default:title>Don't Let It Get To You</default:title><default:link>http://steelsoftware.blog.co.uk/2006/04/05/don_t_let_it_get_to_you~704992/</default:link><dc:date xmlns:dc="http://purl.org/dc/elements/1.1/">2006-04-05T17:43:24+02:00</dc:date><default:description>	&lt;p&gt;Well, last week was a lot of fun, the second half especially (the first half of the week was rubbish, as explained in my last post). However, it's over now and I've gotta concentrate on writing up my dissertation.&lt;/p&gt;
	&lt;p&gt;This task is unfortunatly being hampered by my body. Yes, that's right, I've got a throat infection and since I went to the doc's on Monday to get some antibiotics I've been feeling rubbish. Constant headache kinda thing, not sleeping well and generally not being able to concentrate. Nor does it help that there's no one in my house but me, or that it's suddenly turned really sunny outside and I don't have a laptop. I've just gotta not let it get to me &lt;img src="/img/smilies/icon_smile.gif" alt=":)" class="middle" border="0"&gt;&lt;/p&gt;
	&lt;p&gt;However, some really good news:&lt;br&gt;
&lt;strong&gt;The Project WORKS!!&lt;/strong&gt;&lt;br&gt;
After discovering my rather mickey-mouse error of giving a 16-bit IndexBuffer a 32-bit integer stream everything suddenly started working. Clipping works very well too and I appear to have gotten Clip3 to work too (Clip3 is a clipping case where all of the vertices of a triangle are considered to have been clipped by different polygons but there is infact still data inside the volume).&lt;br&gt;
Here's a picture to show you:&lt;/p&gt;
	&lt;p&gt;&lt;a href="http://www.blog.co.uk/srv/media/media_item.php?item_ID=461770"&gt;&lt;img src="http://data1.blog.de/media/770/461770_39b3835b9c_s.jpeg" align="" alt="tinyb4" vspace="5" hspace="5"&gt;&lt;/a&gt;&lt;/p&gt;
	&lt;p&gt;&lt;a href="http://www.blog.co.uk/srv/media/media_item.php?item_ID=461772"&gt;&lt;img src="http://data1.blog.de/media/772/461772_5b83ba1905_s.jpeg" align="" alt="tinysplit" vspace="5" hspace="5"&gt;&lt;/a&gt;&lt;/p&gt;
	&lt;p&gt;This model is the 4000+ polygon model "tiny" supplied with the DirectX SDK. Some things of note. Currently, not all polygons are correctly wound. I need to get it to look at which way the original triangle's normal is facing and then wind it in the correct direction. Also, the mesh does not retain any texture data. This is quite simply because I'm not giving it any. For polygons totally inside a volume this would be easy to implement, however, for clipped polygons this would just be another thing to work out and it's quite tricky. This process also occurs in noticable time i.e. about half a second. With larger models this would be more noticable, with models of around 1000 polygons it may not be noticable.&lt;/p&gt;
	&lt;p&gt;To improve the performance of this method, I plan to multi-thread it to make use of my dual-core processor. Am I cheating? Not really. Basically I want it to have the initial intersection in the main thread and then each call to clip is in another thread. To avoid any indexing screwups the main thread will have to wait for the clip to join before it calls another clip or adds to the vertices itself. I'll have to run that past my tutor though, just to make sure it's not going to ruin everything or that there isn't a better way.&lt;/p&gt;
	&lt;p&gt;One final thing. It should be noted that I'm not cut out for 3D modelling. Since the generator didn't work and I'm having to manually make each crack pattern, then manually edit the .X file so that each polygon is double-sided and that it is indexed in such a way that each volume goes from one series of indices to another before describing any other part of the model. When you've just finished making a 200 polygon model, you know that's when it's going to get tedious and in my current mental state I'm just not feeling the love. As this entry title says, don't let it get to you.&lt;/p&gt;
	&lt;p&gt;&lt;img src="/img/smilies/icon_wave.gif" alt=":wave:" class="middle" border="0"&gt;&lt;br&gt;
Steve&lt;/p&gt;
	&lt;p&gt;Currently Listening To: M83, Pure Reason Revolution, The Infadels, The Raconteurs. 4 bands that I've only just started to listen to but all of them are utterly amazing.&lt;br&gt;
Currently Eating: Amoxicillin&lt;br&gt;
Currently Drinking: Masses of tea&lt;br&gt;
Currently Watching: Deal or No Deal (UK version, infinitly better than any other)&lt;br&gt;
Words in dissertation: 9,200
&lt;/p&gt;
&lt;p&gt; &lt;small&gt; &lt;a href="http://steelsoftware.blog.co.uk/2006/04/05/don_t_let_it_get_to_you~704992/#comments"&gt;Comments&lt;/a&gt; &lt;/small&gt; &lt;/p&gt;</default:description><content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[	<p>Well, last week was a lot of fun, the second half especially (the first half of the week was rubbish, as explained in my last post). However, it's over now and I've gotta concentrate on writing up my dissertation.</p>
	<p>This task is unfortunatly being hampered by my body. Yes, that's right, I've got a throat infection and since I went to the doc's on Monday to get some antibiotics I've been feeling rubbish. Constant headache kinda thing, not sleeping well and generally not being able to concentrate. Nor does it help that there's no one in my house but me, or that it's suddenly turned really sunny outside and I don't have a laptop. I've just gotta not let it get to me <img src="/img/smilies/icon_smile.gif" alt=":)" class="middle" border="0"></p>
	<p>However, some really good news:<br>
<strong>The Project WORKS!!</strong><br>
After discovering my rather mickey-mouse error of giving a 16-bit IndexBuffer a 32-bit integer stream everything suddenly started working. Clipping works very well too and I appear to have gotten Clip3 to work too (Clip3 is a clipping case where all of the vertices of a triangle are considered to have been clipped by different polygons but there is infact still data inside the volume).<br>
Here's a picture to show you:</p>
	<p><a href="http://www.blog.co.uk/srv/media/media_item.php?item_ID=461770"><img src="http://data1.blog.de/media/770/461770_39b3835b9c_s.jpeg" align="" alt="tinyb4" vspace="5" hspace="5"></a></p>
	<p><a href="http://www.blog.co.uk/srv/media/media_item.php?item_ID=461772"><img src="http://data1.blog.de/media/772/461772_5b83ba1905_s.jpeg" align="" alt="tinysplit" vspace="5" hspace="5"></a></p>
	<p>This model is the 4000+ polygon model "tiny" supplied with the DirectX SDK. Some things of note. Currently, not all polygons are correctly wound. I need to get it to look at which way the original triangle's normal is facing and then wind it in the correct direction. Also, the mesh does not retain any texture data. This is quite simply because I'm not giving it any. For polygons totally inside a volume this would be easy to implement, however, for clipped polygons this would just be another thing to work out and it's quite tricky. This process also occurs in noticable time i.e. about half a second. With larger models this would be more noticable, with models of around 1000 polygons it may not be noticable.</p>
	<p>To improve the performance of this method, I plan to multi-thread it to make use of my dual-core processor. Am I cheating? Not really. Basically I want it to have the initial intersection in the main thread and then each call to clip is in another thread. To avoid any indexing screwups the main thread will have to wait for the clip to join before it calls another clip or adds to the vertices itself. I'll have to run that past my tutor though, just to make sure it's not going to ruin everything or that there isn't a better way.</p>
	<p>One final thing. It should be noted that I'm not cut out for 3D modelling. Since the generator didn't work and I'm having to manually make each crack pattern, then manually edit the .X file so that each polygon is double-sided and that it is indexed in such a way that each volume goes from one series of indices to another before describing any other part of the model. When you've just finished making a 200 polygon model, you know that's when it's going to get tedious and in my current mental state I'm just not feeling the love. As this entry title says, don't let it get to you.</p>
	<p><img src="/img/smilies/icon_wave.gif" alt=":wave:" class="middle" border="0"><br>
Steve</p>
	<p>Currently Listening To: M83, Pure Reason Revolution, The Infadels, The Raconteurs. 4 bands that I've only just started to listen to but all of them are utterly amazing.<br>
Currently Eating: Amoxicillin<br>
Currently Drinking: Masses of tea<br>
Currently Watching: Deal or No Deal (UK version, infinitly better than any other)<br>
Words in dissertation: 9,200
</p>
<p> <small> <a href="http://steelsoftware.blog.co.uk/2006/04/05/don_t_let_it_get_to_you~704992/#comments">Comments</a> </small> </p>]]></content:encoded></default:item><default:item xmlns:default="http://purl.org/rss/1.0/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" rdf:about="http://steelsoftware.blog.co.uk/2006/03/29/a_vision_of_the_future~683954/"><default:title>A Vision Of The Future</default:title><default:link>http://steelsoftware.blog.co.uk/2006/03/29/a_vision_of_the_future~683954/</default:link><dc:date xmlns:dc="http://purl.org/dc/elements/1.1/">2006-03-29T20:25:20+02:00</dc:date><default:description>	&lt;p&gt;&lt;strong&gt;Disclaimer&lt;/strong&gt;: This blog post is on the subject of the hockey website &lt;a href="http://www.sheffieldhockey.com"&gt;www.sheffieldhockey.com&lt;/a&gt; and has nothing to do with my 3D graphics project. For more info on that, click the "dissertation" tag on the right.&lt;/p&gt;
	&lt;p&gt;Right, this week hasn't gone so well so far. I've got far too much work and nothing seems to be going my way. Yesterday I lost the vote to get me elected for the hockey club's secretary position to a fresher who didn't really want it anyway. Very pissed off at him. This also means that I won't be on committee next year (as I don't intend to keep up my captaincy and the job of webmaster was given to a 6th teamer so that I could get secretary). So, in an act of foolhardy defiance, I announce the features for the next version of the hockey website.&lt;/p&gt;
	&lt;p&gt;Mission Statement:&lt;br&gt;
To provide the members of the hockey club with an online portal for all their hockey related needs. At the moment it's a glorified message board, the next version will be a community (just thought, that'd be a cool dev codename). I want people to use it for all their activities and spend more time on the website. So, I want to open up everyone's profiles, give people so much more information about people in the club. Lots more comedy needed and little competitions off the main website. Everyone will WANT to visit the website.&lt;/p&gt;
	&lt;p&gt;Features:&lt;br&gt;
The usual - events, news, matches, squads, pictures, newsletters, email sending&lt;br&gt;
The new - Integrate PHPBB into it, merge their users data with ours and create almost a double profile, controllable from within the website. Message centers will have squad data in it too as well as PMs&lt;br&gt;
More user data, squeeze every last ounce out of the website space.&lt;br&gt;
Games - Fantasy Hockey Online, using the data from the match reports create an automatic fantasy hockey system&lt;br&gt;
Re-work the CSS, give the user more control over the way they view the page&lt;/p&gt;
	&lt;p&gt;This work will take all summer in my spare time but the groundwork has been done in january. Integrating PHPBB will be the hardest part but I'm confident that it can be done.&lt;/p&gt;
	&lt;p&gt;Fat chance that anyone will read this so it'll be my little secret until the next committee meeting. yay!&lt;/p&gt;
	&lt;p&gt;Steve&lt;br&gt;
Currently Listening To: Sum41&lt;br&gt;
Currently Watching: 24&lt;br&gt;
Currently Reading: Sheets and sheets of vertex data&lt;br&gt;
Currently Eating: the same stuff every night&lt;br&gt;
Average hours sleep a night: 5
&lt;/p&gt;
&lt;p&gt; &lt;small&gt; &lt;a href="http://steelsoftware.blog.co.uk/2006/03/29/a_vision_of_the_future~683954/#comments"&gt;Comments&lt;/a&gt; &lt;/small&gt; &lt;/p&gt;</default:description><content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[	<p><strong>Disclaimer</strong>: This blog post is on the subject of the hockey website <a href="http://www.sheffieldhockey.com">www.sheffieldhockey.com</a> and has nothing to do with my 3D graphics project. For more info on that, click the "dissertation" tag on the right.</p>
	<p>Right, this week hasn't gone so well so far. I've got far too much work and nothing seems to be going my way. Yesterday I lost the vote to get me elected for the hockey club's secretary position to a fresher who didn't really want it anyway. Very pissed off at him. This also means that I won't be on committee next year (as I don't intend to keep up my captaincy and the job of webmaster was given to a 6th teamer so that I could get secretary). So, in an act of foolhardy defiance, I announce the features for the next version of the hockey website.</p>
	<p>Mission Statement:<br>
To provide the members of the hockey club with an online portal for all their hockey related needs. At the moment it's a glorified message board, the next version will be a community (just thought, that'd be a cool dev codename). I want people to use it for all their activities and spend more time on the website. So, I want to open up everyone's profiles, give people so much more information about people in the club. Lots more comedy needed and little competitions off the main website. Everyone will WANT to visit the website.</p>
	<p>Features:<br>
The usual - events, news, matches, squads, pictures, newsletters, email sending<br>
The new - Integrate PHPBB into it, merge their users data with ours and create almost a double profile, controllable from within the website. Message centers will have squad data in it too as well as PMs<br>
More user data, squeeze every last ounce out of the website space.<br>
Games - Fantasy Hockey Online, using the data from the match reports create an automatic fantasy hockey system<br>
Re-work the CSS, give the user more control over the way they view the page</p>
	<p>This work will take all summer in my spare time but the groundwork has been done in january. Integrating PHPBB will be the hardest part but I'm confident that it can be done.</p>
	<p>Fat chance that anyone will read this so it'll be my little secret until the next committee meeting. yay!</p>
	<p>Steve<br>
Currently Listening To: Sum41<br>
Currently Watching: 24<br>
Currently Reading: Sheets and sheets of vertex data<br>
Currently Eating: the same stuff every night<br>
Average hours sleep a night: 5
</p>
<p> <small> <a href="http://steelsoftware.blog.co.uk/2006/03/29/a_vision_of_the_future~683954/#comments">Comments</a> </small> </p>]]></content:encoded></default:item><default:item xmlns:default="http://purl.org/rss/1.0/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" rdf:about="http://steelsoftware.blog.co.uk/2006/03/25/splitting_hairs~672697/"><default:title>Splitting Hairs</default:title><default:link>http://steelsoftware.blog.co.uk/2006/03/25/splitting_hairs~672697/</default:link><dc:date xmlns:dc="http://purl.org/dc/elements/1.1/">2006-03-25T00:00:11+01:00</dc:date><default:description>	&lt;p&gt;A more productive week this week. Project-wise things have gone better, but at the same time they've gotten worse.&lt;/p&gt;
	&lt;p&gt;This week was spent on the splitting part of my algorithm. Since I was unable to make a mesh out of my crack patterns I'm stuck with trying to disect a box with a plane. Shouldn't be too hard really but if I set it up right there shouldn't be any difference between splitting this and a proper crack pattern. However, most of my week was spent wondering why I was getting squiggly lines. The answer was that I was getting a CustomVertex.PositionNormal when I was meant to be getting a CustomVertex.PositionNormalTextured. The extra information was throwing everything off. Once I had that I discovered another thing. Each mesh has it's vertices "welded" i.e. for each normal of a vertex there is a separate vertex. This shouldn't cause me problems but may make normal computation difficult (however, i believe that I can perform this welding operation as a post-process and then calculate the normals again).&lt;/p&gt;
	&lt;p&gt;The next part of my week was spent wondering why I wasn't getting any triangles on one side. After discussion with my tutor I finally got the correct algorithm. This algorithm basically is joining a vertex in the target mesh to one in the plane's vertices. Perform a dot product on that vector and the normal of the triangle. However, this still didn't work as each vertex in the target was always over 90 degrees to the normal of the triangle at least once. I managed to get it to give out some vertices by changing the algorithm slightly (connect each vertex in the target to a different one in plane each time) but these positions appeared incorrect. After determining that they were incorrectly wound I re-wound them and tried again. Same problem.&lt;br&gt;
It is at this point that I remain. I do not know why my program wants to make a triangle through my box when none of the triangles given to it do this.&lt;/p&gt;
	&lt;p&gt;Whilst I tried to figure out this problem I continued with my clipping algorithm. It is currently set up so that if one of the vertices on the correct side of the plane's triangle then it will perform a plane intersect with one of the two polygons and make 2 new vertices. The version for 2 vertices on the correct side will be similar but will create 2 triangles instead of just 1 (this bit hasn't been implemented yet).&lt;/p&gt;
	&lt;p&gt;If you'd like to have a look at this thing run you're more than welcome to it. It'll need .NET 2.0 and DX9 Feb06 to run but if you want to compile it you'll need VS2005 and the DX SDK. You shouldn't need a fast computer. Running the release .exe I got a frame-rate of 2000fps+&lt;br&gt;
&lt;a href="http://www.dcs.shef.ac.uk/~u3sw/FractureViewer.zip"&gt;Current Project Source&lt;/a&gt;&lt;/p&gt;
	&lt;p&gt;As a bonus, if anyone can work out why this isn't working I'll be extraordinarily grateful.&lt;br&gt;
What annoys me most of all about this is that I know I'm so close but I lack the other people in my department who know enought about 3D graphics to help me (and it doesn't help that my deparment's lab computers still run Win2000 so I can't install the DX SDK, nor do I have a laptop).&lt;/p&gt;
	&lt;p&gt;On a slightly happier note, the university's rowing club has asked to use the hockey website's teamsheet system for sorting their boats and crews. I've agreed to meet with them after my dissertation has been handed in but it's all looking good there.&lt;/p&gt;
	&lt;p&gt;I've got myself a job interview for the summer, working at the uni's IT center writing report forms for a new Oracle database..... fun fun (pay is half decent tho).&lt;/p&gt;
	&lt;p&gt;Extra-curricular activities (i.e. hockey) brings some good news too. The saturday hockey team (Sheffield Uni Bankers 9s) are currently top of the league and a win tomorrow will pretty much guarentee promotion, though full points from both of the final matches is needed to make sure we finish top.&lt;/p&gt;
	&lt;p&gt;Finally, I'm off home home this weekend to relax for once.&lt;/p&gt;
	&lt;p&gt;Steve&lt;/p&gt;
	&lt;p&gt;Currently Listening To: Gnarls Barkley - Crazy&lt;br&gt;
Currently Watching: Maid Marian and her Merry Men (early 90s kids tv, effin awesome)&lt;br&gt;
Currently Reading: Anything I can find on intersection&lt;br&gt;
Currently Eating: Pringles&lt;br&gt;
Weeks of coding left: 1
&lt;/p&gt;
&lt;p&gt; &lt;small&gt; &lt;a href="http://steelsoftware.blog.co.uk/2006/03/25/splitting_hairs~672697/#comments"&gt;Comments&lt;/a&gt; &lt;/small&gt; &lt;/p&gt;</default:description><content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[	<p>A more productive week this week. Project-wise things have gone better, but at the same time they've gotten worse.</p>
	<p>This week was spent on the splitting part of my algorithm. Since I was unable to make a mesh out of my crack patterns I'm stuck with trying to disect a box with a plane. Shouldn't be too hard really but if I set it up right there shouldn't be any difference between splitting this and a proper crack pattern. However, most of my week was spent wondering why I was getting squiggly lines. The answer was that I was getting a CustomVertex.PositionNormal when I was meant to be getting a CustomVertex.PositionNormalTextured. The extra information was throwing everything off. Once I had that I discovered another thing. Each mesh has it's vertices "welded" i.e. for each normal of a vertex there is a separate vertex. This shouldn't cause me problems but may make normal computation difficult (however, i believe that I can perform this welding operation as a post-process and then calculate the normals again).</p>
	<p>The next part of my week was spent wondering why I wasn't getting any triangles on one side. After discussion with my tutor I finally got the correct algorithm. This algorithm basically is joining a vertex in the target mesh to one in the plane's vertices. Perform a dot product on that vector and the normal of the triangle. However, this still didn't work as each vertex in the target was always over 90 degrees to the normal of the triangle at least once. I managed to get it to give out some vertices by changing the algorithm slightly (connect each vertex in the target to a different one in plane each time) but these positions appeared incorrect. After determining that they were incorrectly wound I re-wound them and tried again. Same problem.<br>
It is at this point that I remain. I do not know why my program wants to make a triangle through my box when none of the triangles given to it do this.</p>
	<p>Whilst I tried to figure out this problem I continued with my clipping algorithm. It is currently set up so that if one of the vertices on the correct side of the plane's triangle then it will perform a plane intersect with one of the two polygons and make 2 new vertices. The version for 2 vertices on the correct side will be similar but will create 2 triangles instead of just 1 (this bit hasn't been implemented yet).</p>
	<p>If you'd like to have a look at this thing run you're more than welcome to it. It'll need .NET 2.0 and DX9 Feb06 to run but if you want to compile it you'll need VS2005 and the DX SDK. You shouldn't need a fast computer. Running the release .exe I got a frame-rate of 2000fps+<br>
<a href="http://www.dcs.shef.ac.uk/~u3sw/FractureViewer.zip">Current Project Source</a></p>
	<p>As a bonus, if anyone can work out why this isn't working I'll be extraordinarily grateful.<br>
What annoys me most of all about this is that I know I'm so close but I lack the other people in my department who know enought about 3D graphics to help me (and it doesn't help that my deparment's lab computers still run Win2000 so I can't install the DX SDK, nor do I have a laptop).</p>
	<p>On a slightly happier note, the university's rowing club has asked to use the hockey website's teamsheet system for sorting their boats and crews. I've agreed to meet with them after my dissertation has been handed in but it's all looking good there.</p>
	<p>I've got myself a job interview for the summer, working at the uni's IT center writing report forms for a new Oracle database..... fun fun (pay is half decent tho).</p>
	<p>Extra-curricular activities (i.e. hockey) brings some good news too. The saturday hockey team (Sheffield Uni Bankers 9s) are currently top of the league and a win tomorrow will pretty much guarentee promotion, though full points from both of the final matches is needed to make sure we finish top.</p>
	<p>Finally, I'm off home home this weekend to relax for once.</p>
	<p>Steve</p>
	<p>Currently Listening To: Gnarls Barkley - Crazy<br>
Currently Watching: Maid Marian and her Merry Men (early 90s kids tv, effin awesome)<br>
Currently Reading: Anything I can find on intersection<br>
Currently Eating: Pringles<br>
Weeks of coding left: 1
</p>
<p> <small> <a href="http://steelsoftware.blog.co.uk/2006/03/25/splitting_hairs~672697/#comments">Comments</a> </small> </p>]]></content:encoded></default:item><default:item xmlns:default="http://purl.org/rss/1.0/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" rdf:about="http://steelsoftware.blog.co.uk/2006/03/17/time_ticking_away~653441/"><default:title>Time Ticking Away</default:title><default:link>http://steelsoftware.blog.co.uk/2006/03/17/time_ticking_away~653441/</default:link><dc:date xmlns:dc="http://purl.org/dc/elements/1.1/">2006-03-17T23:08:16+01:00</dc:date><default:description>	&lt;p&gt;This week hasn't been too fantastic really. After being casually informed that I had until easter (2 weeks) to finish the programming for this project, I went to work on the final algorithms that had to be created. There are two main ones, volumization and mesh creation, and the splitting algorithm. Of course, the splitting algorithm relies on the mesh creation so I went to work on that (based upon the details I wrote about in my last entry).&lt;/p&gt;
	&lt;p&gt;It's now the end of the week and I'd like to officially announce that this algorithm is failing. I implemented the algorithm from the last entry but that did not produce the correct result. Implementing a directional component to the path choice (when multiple paths are on offer) had some positive effect. The actual problem came from when there was only 1 choice and the general direction was not the correct one. Making it naiively always follow collisions produced infinite loops, allowing it the choice still produced infinite loops. I'm actually at a loss as to how to do this.&lt;/p&gt;
	&lt;p&gt;However, my tutor suggested another method for volumization, a grid based sweeping method that detects each "volume" from the endpoints on the left and then sweeps across until it finds a vertical edge in the paths. once it's found this vertical edge it records it and carries on sweeping until the end. This is much more difficult to implement than the tracing algorithm, but I don't actually have a choice at this moment in time.&lt;/p&gt;
	&lt;p&gt;It's not looking too good &lt;img src="/img/smilies/icon_sad.gif" alt=":(" class="middle" border="0"&gt;&lt;/p&gt;
	&lt;p&gt;Steve&lt;/p&gt;
	&lt;p&gt;Currently Listening To: Yeah Yeah Yeahs - Show Your Bones&lt;br&gt;
Currently Reading: C# books of course!&lt;br&gt;
Currently Eating: Toast&lt;br&gt;
Currently Watching: The Commonwealth Games&lt;br&gt;
Days until code is supposedly finished: 14
&lt;/p&gt;
&lt;p&gt; &lt;small&gt; &lt;a href="http://steelsoftware.blog.co.uk/2006/03/17/time_ticking_away~653441/#comments"&gt;Comments&lt;/a&gt; &lt;/small&gt; &lt;/p&gt;</default:description><content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[	<p>This week hasn't been too fantastic really. After being casually informed that I had until easter (2 weeks) to finish the programming for this project, I went to work on the final algorithms that had to be created. There are two main ones, volumization and mesh creation, and the splitting algorithm. Of course, the splitting algorithm relies on the mesh creation so I went to work on that (based upon the details I wrote about in my last entry).</p>
	<p>It's now the end of the week and I'd like to officially announce that this algorithm is failing. I implemented the algorithm from the last entry but that did not produce the correct result. Implementing a directional component to the path choice (when multiple paths are on offer) had some positive effect. The actual problem came from when there was only 1 choice and the general direction was not the correct one. Making it naiively always follow collisions produced infinite loops, allowing it the choice still produced infinite loops. I'm actually at a loss as to how to do this.</p>
	<p>However, my tutor suggested another method for volumization, a grid based sweeping method that detects each "volume" from the endpoints on the left and then sweeps across until it finds a vertical edge in the paths. once it's found this vertical edge it records it and carries on sweeping until the end. This is much more difficult to implement than the tracing algorithm, but I don't actually have a choice at this moment in time.</p>
	<p>It's not looking too good <img src="/img/smilies/icon_sad.gif" alt=":(" class="middle" border="0"></p>
	<p>Steve</p>
	<p>Currently Listening To: Yeah Yeah Yeahs - Show Your Bones<br>
Currently Reading: C# books of course!<br>
Currently Eating: Toast<br>
Currently Watching: The Commonwealth Games<br>
Days until code is supposedly finished: 14
</p>
<p> <small> <a href="http://steelsoftware.blog.co.uk/2006/03/17/time_ticking_away~653441/#comments">Comments</a> </small> </p>]]></content:encoded></default:item><default:item xmlns:default="http://purl.org/rss/1.0/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" rdf:about="http://steelsoftware.blog.co.uk/2006/03/01/troublesome_volume_tracing~603683/"><default:title>Troublesome Volume Tracing</default:title><default:link>http://steelsoftware.blog.co.uk/2006/03/01/troublesome_volume_tracing~603683/</default:link><dc:date xmlns:dc="http://purl.org/dc/elements/1.1/">2006-03-01T15:43:39+01:00</dc:date><default:description>	&lt;p&gt;It's been two weeks since my almost "apocalyptic" mesh mayhem post that seemed to spell the end for my current line of thought. That, along with Federico's suggestion of a new way to approach the project (more on that later), seemed to toll the end for this way of generating crack patterns. However, all is not lost.&lt;/p&gt;
	&lt;p&gt;After a discussion with my tutor, a few methods of enclosing the crack patterns were suggested:&lt;br&gt;
&lt;strong&gt;Endpoint-Distance Method&lt;/strong&gt;&lt;br&gt;
For each layer, take all the end points of the crack branches that did not collide with another branch.&lt;br&gt;
For each end point, perform a trigg distance calculation to every other end point and join to the nearest end point.&lt;/p&gt;
	&lt;p&gt;This method did not work at all. After initial tests and a few attempts to fix it, the problem of two endpoints being exactly the same distance apart meant that my SortedDictionary (a sorted HashMap for any Java coders reading this) wouldn't accept the key every time due to duplication. Endpoints were also joining themselves to the wrong endpoints. The image below shows this method and its failings.&lt;/p&gt;
	&lt;p&gt;&lt;a href="http://www.blog.co.uk/srv/media/media_item.php?item_ID=392540"&gt;&lt;img src="http://data1.blog.de/media/540/392540_37d51b44dd_s.jpeg" align="" alt="convert2mesh1" vspace="5" hspace="5"&gt;&lt;/a&gt;&lt;/p&gt;
	&lt;p&gt;&lt;strong&gt;Shrinkwrap Method&lt;/strong&gt;&lt;br&gt;
This method was suggested by Steve Maddock, my supervisor. Making use of the fact that the crack pattern is grid-based, Steve suggested that I test every row/column from each side to find the point that is furthest out and then join those to make a shrink-wrapped outline of the mesh. However, whilst this will work every time, it doesn't produce the volumes that are needed for meshing, it instead produces a thin skeleton-like model of the crack pattern. So, not very good really. Picture below (please note, the problem with patterns not going to the end points has been fixed, but it still doesn't look much better):&lt;/p&gt;
	&lt;p&gt;&lt;a href="http://www.blog.co.uk/srv/media/media_item.php?item_ID=392567"&gt;&lt;img src="http://data1.blog.de/media/567/392567_5738c10934_s.jpeg" align="" alt="shrinkwrapmeshing" vspace="5" hspace="5"&gt;&lt;/a&gt;&lt;/p&gt;
	&lt;p&gt;&lt;strong&gt;Clockwise Endpoint Method&lt;/strong&gt;&lt;br&gt;
This method, suggested by my good self, is another method that is very similar to endpoint meshing but uses the angle from the point of impact to the endpoint as its key. It then joins the end points in the order of the angle they come out at. This method works very very well, it produces proper volumes and in pretty much the correct order too. This series of screenshots show front, 3d front and 3d perspective views of a crack pattern joined in this way (note that the pattern in these shots does not join back to itself, the pattern has been modified to do that since):&lt;/p&gt;
	&lt;p&gt;&lt;a href="http://www.blog.co.uk/srv/media/media_item.php?item_ID=392576"&gt;&lt;img src="http://data1.blog.de/media/576/392576_f9f9140c1b_s.jpeg" align="" alt="clockwise" vspace="5" hspace="5"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="http://www.blog.co.uk/srv/media/media_item.php?item_ID=392577"&gt;&lt;img src="http://data1.blog.de/media/577/392577_cb5811fe81_s.jpeg" align="" alt="clockwise3dfrontview" vspace="5" hspace="5"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="http://www.blog.co.uk/srv/media/media_item.php?item_ID=392578"&gt;&lt;img src="http://data1.blog.de/media/578/392578_abc8ef1f9f_s.jpeg" align="" alt="clockwise3dview" vspace="5" hspace="5"&gt;&lt;/a&gt;&lt;/p&gt;
	&lt;p&gt;So, we've got to this stage. Now, for yet another tricky bit:&lt;/p&gt;
	&lt;p&gt;&lt;strong&gt;Volumisation of the areas&lt;/strong&gt;&lt;br&gt;
So that these enclosed areas can be put into a mesh, they have to be triangulated (and then the adjacency information for each triangle has to be calculated but thankfully that'll be easier). There are a few triangulation algorithms out there (Delauny, Seidel) so my main problem will actually be finding out which area is which! Below is the diagram I've currently got drawn on my white board (taken with phone camera &lt;img src="/img/smilies/icon_sad.gif" alt=":(" class="middle" border="0"&gt;):&lt;br&gt;
&lt;a href="http://www.blog.co.uk/srv/media/media_item.php?item_ID=392907"&gt;&lt;img src="http://data1.blog.de/media/907/392907_755d6f22be_s.jpeg" align="" alt="board" vspace="5" hspace="5"&gt;&lt;/a&gt;&lt;br&gt;
The black lines from the center point are the 'roots' of the crack pattern. All of the blue lines are 'branches' that have spawned during the process. The green lines are the borders of the crack pattern after it has been enclosed. The blue x's are the start points of the branches and the red x's are the end points of all of the branches or roots. Each volume has been labelled 1-12.&lt;/p&gt;
	&lt;p&gt;My idea for finding the volumes is a kind of 'tracing' algorithm:&lt;br&gt;
Start with root 0; check each point on its path, see if a collision or start point occurred; If that happens then find out which branch/root it was and follow it back to its start/end (dependent on what you found), along the way checking for any other collisions/start points. If found, repeat the above step. Keep doing this until you reach the point on the root where you started tracing from. Take this path, it's one of your volumes. Keep doing this for each start/collision point on the root.&lt;br&gt;
There are a few problems with this, there's no guarentee you'll get all of the volumes (as some don't contain root parts) and also, what happens when you find the edge?! There are also problems with coming back to the root as 4 cracks start at that point. Special cases will be created for all of these points, however, I think in general the algorithm will work. If anyone has a better solution please contact me (as I can't see any other way about it really).&lt;/p&gt;
	&lt;p&gt;After I've found the volumes I'm going to take a break from working on the fracture generator. I'm going to try and get the actual cracking process working with a simple manually made mesh (two planes in a cross shape). I hope to have some early results from that next week &lt;img src="/img/smilies/icon_biggrin.gif" alt=":D" class="middle" border="0"&gt;&lt;/p&gt;
	&lt;p&gt;That's all for now&lt;br&gt;
&lt;img src="/img/smilies/icon_wave.gif" alt=":wave:" class="middle" border="0"&gt;&lt;br&gt;
Steve&lt;/p&gt;
	&lt;p&gt;Currently Listening To: Feeder&lt;br&gt;
Currently Reading: Practical Algorithms for 3D Computer Graphics&lt;br&gt;
Currently Watching: 24 season 5&lt;br&gt;
Currently Eating: pancakes!!!&lt;br&gt;
Score the mens 1s just beat Aberdeen by: 4-1 congrats!
&lt;/p&gt;
&lt;p&gt; &lt;small&gt; &lt;a href="http://steelsoftware.blog.co.uk/2006/03/01/troublesome_volume_tracing~603683/#comments"&gt;Comments&lt;/a&gt; &lt;/small&gt; &lt;/p&gt;</default:description><content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[	<p>It's been two weeks since my almost "apocalyptic" mesh mayhem post that seemed to spell the end for my current line of thought. That, along with Federico's suggestion of a new way to approach the project (more on that later), seemed to toll the end for this way of generating crack patterns. However, all is not lost.</p>
	<p>After a discussion with my tutor, a few methods of enclosing the crack patterns were suggested:<br>
<strong>Endpoint-Distance Method</strong><br>
For each layer, take all the end points of the crack branches that did not collide with another branch.<br>
For each end point, perform a trigg distance calculation to every other end point and join to the nearest end point.</p>
	<p>This method did not work at all. After initial tests and a few attempts to fix it, the problem of two endpoints being exactly the same distance apart meant that my SortedDictionary (a sorted HashMap for any Java coders reading this) wouldn't accept the key every time due to duplication. Endpoints were also joining themselves to the wrong endpoints. The image below shows this method and its failings.</p>
	<p><a href="http://www.blog.co.uk/srv/media/media_item.php?item_ID=392540"><img src="http://data1.blog.de/media/540/392540_37d51b44dd_s.jpeg" align="" alt="convert2mesh1" vspace="5" hspace="5"></a></p>
	<p><strong>Shrinkwrap Method</strong><br>
This method was suggested by Steve Maddock, my supervisor. Making use of the fact that the crack pattern is grid-based, Steve suggested that I test every row/column from each side to find the point that is furthest out and then join those to make a shrink-wrapped outline of the mesh. However, whilst this will work every time, it doesn't produce the volumes that are needed for meshing, it instead produces a thin skeleton-like model of the crack pattern. So, not very good really. Picture below (please note, the problem with patterns not going to the end points has been fixed, but it still doesn't look much better):</p>
	<p><a href="http://www.blog.co.uk/srv/media/media_item.php?item_ID=392567"><img src="http://data1.blog.de/media/567/392567_5738c10934_s.jpeg" align="" alt="shrinkwrapmeshing" vspace="5" hspace="5"></a></p>
	<p><strong>Clockwise Endpoint Method</strong><br>
This method, suggested by my good self, is another method that is very similar to endpoint meshing but uses the angle from the point of impact to the endpoint as its key. It then joins the end points in the order of the angle they come out at. This method works very very well, it produces proper volumes and in pretty much the correct order too. This series of screenshots show front, 3d front and 3d perspective views of a crack pattern joined in this way (note that the pattern in these shots does not join back to itself, the pattern has been modified to do that since):</p>
	<p><a href="http://www.blog.co.uk/srv/media/media_item.php?item_ID=392576"><img src="http://data1.blog.de/media/576/392576_f9f9140c1b_s.jpeg" align="" alt="clockwise" vspace="5" hspace="5"></a><br>
<a href="http://www.blog.co.uk/srv/media/media_item.php?item_ID=392577"><img src="http://data1.blog.de/media/577/392577_cb5811fe81_s.jpeg" align="" alt="clockwise3dfrontview" vspace="5" hspace="5"></a><br>
<a href="http://www.blog.co.uk/srv/media/media_item.php?item_ID=392578"><img src="http://data1.blog.de/media/578/392578_abc8ef1f9f_s.jpeg" align="" alt="clockwise3dview" vspace="5" hspace="5"></a></p>
	<p>So, we've got to this stage. Now, for yet another tricky bit:</p>
	<p><strong>Volumisation of the areas</strong><br>
So that these enclosed areas can be put into a mesh, they have to be triangulated (and then the adjacency information for each triangle has to be calculated but thankfully that'll be easier). There are a few triangulation algorithms out there (Delauny, Seidel) so my main problem will actually be finding out which area is which! Below is the diagram I've currently got drawn on my white board (taken with phone camera <img src="/img/smilies/icon_sad.gif" alt=":(" class="middle" border="0">):<br>
<a href="http://www.blog.co.uk/srv/media/media_item.php?item_ID=392907"><img src="http://data1.blog.de/media/907/392907_755d6f22be_s.jpeg" align="" alt="board" vspace="5" hspace="5"></a><br>
The black lines from the center point are the 'roots' of the crack pattern. All of the blue lines are 'branches' that have spawned during the process. The green lines are the borders of the crack pattern after it has been enclosed. The blue x's are the start points of the branches and the red x's are the end points of all of the branches or roots. Each volume has been labelled 1-12.</p>
	<p>My idea for finding the volumes is a kind of 'tracing' algorithm:<br>
Start with root 0; check each point on its path, see if a collision or start point occurred; If that happens then find out which branch/root it was and follow it back to its start/end (dependent on what you found), along the way checking for any other collisions/start points. If found, repeat the above step. Keep doing this until you reach the point on the root where you started tracing from. Take this path, it's one of your volumes. Keep doing this for each start/collision point on the root.<br>
There are a few problems with this, there's no guarentee you'll get all of the volumes (as some don't contain root parts) and also, what happens when you find the edge?! There are also problems with coming back to the root as 4 cracks start at that point. Special cases will be created for all of these points, however, I think in general the algorithm will work. If anyone has a better solution please contact me (as I can't see any other way about it really).</p>
	<p>After I've found the volumes I'm going to take a break from working on the fracture generator. I'm going to try and get the actual cracking process working with a simple manually made mesh (two planes in a cross shape). I hope to have some early results from that next week <img src="/img/smilies/icon_biggrin.gif" alt=":D" class="middle" border="0"></p>
	<p>That's all for now<br>
<img src="/img/smilies/icon_wave.gif" alt=":wave:" class="middle" border="0"><br>
Steve</p>
	<p>Currently Listening To: Feeder<br>
Currently Reading: Practical Algorithms for 3D Computer Graphics<br>
Currently Watching: 24 season 5<br>
Currently Eating: pancakes!!!<br>
Score the mens 1s just beat Aberdeen by: 4-1 congrats!
</p>
<p> <small> <a href="http://steelsoftware.blog.co.uk/2006/03/01/troublesome_volume_tracing~603683/#comments">Comments</a> </small> </p>]]></content:encoded></default:item><default:item xmlns:default="http://purl.org/rss/1.0/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" rdf:about="http://steelsoftware.blog.co.uk/2006/02/12/mesh_mayhem~557532/"><default:title>Mesh Mayhem</default:title><default:link>http://steelsoftware.blog.co.uk/2006/02/12/mesh_mayhem~557532/</default:link><dc:date xmlns:dc="http://purl.org/dc/elements/1.1/">2006-02-12T20:59:46+01:00</dc:date><default:description>	&lt;p&gt;This is going to be a bit of a depressing entry in terms of the number of problems that have appeared in this stage of the project but I'm hoping that someone/anyone who reads this blog may be able to help. Here's to hope &lt;img src="/img/smilies/icon_biggrin.gif" alt=":D" class="middle" border="0"&gt;&lt;/p&gt;
	&lt;p&gt;After discussion with my tutor, there will now be a basic set of 10 different alpha textures, each with a number of crack patterns, all contained in a CrackLibrary. Each mesh that needs to be cracked will have a texture. Once the impact point is obtained, the program will read the location on the crack pattern that the impact occured and will then load the CrackPattern that originates closest to the location of impact. This pattern will then be translated/scaled/rotates based upon the force and direction of impact, then a Mesh/Mesh intersect method will be used to crack the object and many new Meshes will be created/cleaned/optimized and animated.&lt;/p&gt;
	&lt;p&gt;That doesn't really pose a huge problem at the moment. The thing proving difficult is actually converting my CrackPattern3D into a Mesh and saving it to the .X file format.&lt;br&gt;
The major problem is that the 2 previous projects' patterns all had boundaries or definitive  volumes meaning that when it came to intersect with the target, clear boundaries already existed. With my implementation, I'm growing a Crack sequentially from the impact point guided by a texture. &lt;em&gt;There is never any guarentee that boxes/volumes will be formed&lt;/em&gt;. I also have no idea where or when this branching will occur, nor when a crack will collide with another or come to a region it doesn't have enough force to breach.&lt;/p&gt;
	&lt;p&gt;It has also been noted that the .X file format wants my Mesh in the form of triangles, preferably with an IndexBuffer and it definitly requires adjacency information which I currently don't know how to create (and MDX only has a void method for generating adjacency information).&lt;/p&gt;
	&lt;p&gt;From my previous tests (see other entries) perhaps my main mistake has been to have a black background (which indicates impenetrable material i.e. steel) so that in general, cracks don't propagate properly and definitly not to the end of their life span (use up all their force). Adding a gray background has improved the situation yet I still have very little idea as to how to work out which vertices belong to which volume. I am also concerned that I'll have to be working with triangles, therefore every side of each volume will be a triangle fan with quite a few triangles in it. I somehow think that I'd be better off writing my own format that contains volumes and polygons with &gt;3 edges.&lt;/p&gt;
	&lt;p&gt;If anyone has some advice for me or can see a way around my problems please contact me. Leave a note here and I'll get back to you.&lt;/p&gt;
	&lt;p&gt;Steve&lt;/p&gt;
	&lt;p&gt;Currently Listening To: Oceansize - Everyone In To Position&lt;br&gt;
Currently Reading: C# 2.0 The Complete Reference, Schildt&lt;br&gt;
Currently Watching: The Constant Gardener, an excellent film.&lt;br&gt;
Currently Eating: BBQ pringles &lt;img src="/img/smilies/icon_biggrin.gif" alt=":D" class="middle" border="0"&gt;&lt;br&gt;
Amount of pain this problem is causing me: a lot
&lt;/p&gt;
&lt;p&gt; &lt;small&gt; &lt;a href="http://steelsoftware.blog.co.uk/2006/02/12/mesh_mayhem~557532/#comments"&gt;Comments&lt;/a&gt; &lt;/small&gt; &lt;/p&gt;</default:description><content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[	<p>This is going to be a bit of a depressing entry in terms of the number of problems that have appeared in this stage of the project but I'm hoping that someone/anyone who reads this blog may be able to help. Here's to hope <img src="/img/smilies/icon_biggrin.gif" alt=":D" class="middle" border="0"></p>
	<p>After discussion with my tutor, there will now be a basic set of 10 different alpha textures, each with a number of crack patterns, all contained in a CrackLibrary. Each mesh that needs to be cracked will have a texture. Once the impact point is obtained, the program will read the location on the crack pattern that the impact occured and will then load the CrackPattern that originates closest to the location of impact. This pattern will then be translated/scaled/rotates based upon the force and direction of impact, then a Mesh/Mesh intersect method will be used to crack the object and many new Meshes will be created/cleaned/optimized and animated.</p>
	<p>That doesn't really pose a huge problem at the moment. The thing proving difficult is actually converting my CrackPattern3D into a Mesh and saving it to the .X file format.<br>
The major problem is that the 2 previous projects' patterns all had boundaries or definitive  volumes meaning that when it came to intersect with the target, clear boundaries already existed. With my implementation, I'm growing a Crack sequentially from the impact point guided by a texture. <em>There is never any guarentee that boxes/volumes will be formed</em>. I also have no idea where or when this branching will occur, nor when a crack will collide with another or come to a region it doesn't have enough force to breach.</p>
	<p>It has also been noted that the .X file format wants my Mesh in the form of triangles, preferably with an IndexBuffer and it definitly requires adjacency information which I currently don't know how to create (and MDX only has a void method for generating adjacency information).</p>
	<p>From my previous tests (see other entries) perhaps my main mistake has been to have a black background (which indicates impenetrable material i.e. steel) so that in general, cracks don't propagate properly and definitly not to the end of their life span (use up all their force). Adding a gray background has improved the situation yet I still have very little idea as to how to work out which vertices belong to which volume. I am also concerned that I'll have to be working with triangles, therefore every side of each volume will be a triangle fan with quite a few triangles in it. I somehow think that I'd be better off writing my own format that contains volumes and polygons with >3 edges.</p>
	<p>If anyone has some advice for me or can see a way around my problems please contact me. Leave a note here and I'll get back to you.</p>
	<p>Steve</p>
	<p>Currently Listening To: Oceansize - Everyone In To Position<br>
Currently Reading: C# 2.0 The Complete Reference, Schildt<br>
Currently Watching: The Constant Gardener, an excellent film.<br>
Currently Eating: BBQ pringles <img src="/img/smilies/icon_biggrin.gif" alt=":D" class="middle" border="0"><br>
Amount of pain this problem is causing me: a lot
</p>
<p> <small> <a href="http://steelsoftware.blog.co.uk/2006/02/12/mesh_mayhem~557532/#comments">Comments</a> </small> </p>]]></content:encoded></default:item><default:item xmlns:default="http://purl.org/rss/1.0/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" rdf:about="http://steelsoftware.blog.co.uk/2006/01/26/stage~508823/"><default:title>Stage 2</default:title><default:link>http://steelsoftware.blog.co.uk/2006/01/26/stage~508823/</default:link><dc:date xmlns:dc="http://purl.org/dc/elements/1.1/">2006-01-26T21:08:09+01:00</dc:date><default:description>	&lt;p&gt;I've finished my exams, thank god for that! The 3D graphics exam was tough but never beyond me, and the information searching and retrieval exam was a race to walk out so you could be first to the bar. One of the quesitons was "How does a web search engine work? explain crawling and ranking". It's simply the easiest question they could ask!&lt;/p&gt;
	&lt;p&gt;Anyway, project work.&lt;br&gt;
Over the last week whilst I was avoiding revision I successfully abstracted the Crack class from the renderer. There are now 5 classes:&lt;br&gt;
abstract class Crack - contains the generic functionality of a crack (drawring, spawn branches, cloneing etc)&lt;br&gt;
class CrackRoot and class CrackBranch - use Crack as their base class and implement their own route finding algorithms. Branches now look for the second best node to go to, simply to stop the "boxing" problem. The cracks look really good now.&lt;br&gt;
class CrackPattern - holds properties for the crack pattern and a list of roots and branches.&lt;br&gt;
class CrackPattern3D - holds an array of CrackPattern classes. Also contains methods to join the layers and export the pattern (not yet implemented).&lt;/p&gt;
	&lt;p&gt;Update: JoinLayers() has now been implemented and so below I show you the fruits of my labour:&lt;/p&gt;
	&lt;p&gt;&lt;a href="http://www.blog.co.uk/srv/media/media_item.php?item_ID=61371"&gt;&lt;img src="http://data1.blog.de/media/371/61371_5d85a47928_s.jpeg" align="" alt="unboxed" vspace="5" hspace="5"&gt;&lt;/a&gt;&lt;br&gt;
A low-resolution crack pattern with the unboxing algorithm&lt;/p&gt;
	&lt;p&gt;&lt;a href="http://www.blog.co.uk/srv/media/media_item.php?item_ID=61372"&gt;&lt;img src="http://data1.blog.de/media/372/61372_557e71e486_s.jpeg" align="" alt="unboxedhires" vspace="5" hspace="5"&gt;&lt;/a&gt;&lt;br&gt;
A high-resolution crack pattern with the unboxing algorithm&lt;/p&gt;
	&lt;p&gt;&lt;a href="http://www.blog.co.uk/srv/media/media_item.php?item_ID=61373"&gt;&lt;img src="http://data1.blog.de/media/373/61373_518a4e0c94_s.jpeg" align="" alt="crackpattern1" vspace="5" hspace="5"&gt;&lt;/a&gt;&lt;br&gt;
My first 3D crack pattern.&lt;/p&gt;
	&lt;p&gt;From here, I can now progress to Stage 2&lt;br&gt;
This second program will be able to load .x files that have CrackPattern3Ds associated with them (I'll probably have to create a new file format or more simply, extend the .x format). You'll then be able to specify the location of impact and crack the object. This is going to be hard, really hard. Expect an update next week, possibly containing a picture of me crying over the problem. I'll get through it somehow.&lt;/p&gt;
	&lt;p&gt;I've been watching a Microsoft webcast by Digipen on 3D game development in C#/MDX9 and it's very very good. I asked a question to them the other day, "How easy would it be to multi-thread this game engine?". Their answer, "Dependent upon the part you're threading, very hard". Yet more good news for me and my dual core processor (which I was half relying on to make this run in real-time :s).&lt;/p&gt;
	&lt;p&gt;Outside of project space, the hockey website now has its third iteration of the picture gallery. Basically it categorises the pictures based on the associations in the database. I think it's what everyone wants and I've had no comments to the contrary yet so I'll assume that I can leave it now.&lt;/p&gt;
	&lt;p&gt;Back to work!&lt;br&gt;
Steve&lt;/p&gt;
	&lt;p&gt;Currently Listening To: The Strokes - First Impressions of Earth&lt;br&gt;
Currently Watching: Scrubs - 507 - My Way Home (homage to the wizard of oz, it's their best ever episode)&lt;br&gt;
Currently Eating: Home-made special fried rice (when i get it right it's the best food ever)&lt;br&gt;
Currently Reading: Does Anything Eat Wasps? - New Scientist&lt;br&gt;
Project Deadline: May 3rd
&lt;/p&gt;
&lt;p&gt; &lt;small&gt; &lt;a href="http://steelsoftware.blog.co.uk/2006/01/26/stage~508823/#comments"&gt;Comments&lt;/a&gt; &lt;/small&gt; &lt;/p&gt;</default:description><content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[	<p>I've finished my exams, thank god for that! The 3D graphics exam was tough but never beyond me, and the information searching and retrieval exam was a race to walk out so you could be first to the bar. One of the quesitons was "How does a web search engine work? explain crawling and ranking". It's simply the easiest question they could ask!</p>
	<p>Anyway, project work.<br>
Over the last week whilst I was avoiding revision I successfully abstracted the Crack class from the renderer. There are now 5 classes:<br>
abstract class Crack - contains the generic functionality of a crack (drawring, spawn branches, cloneing etc)<br>
class CrackRoot and class CrackBranch - use Crack as their base class and implement their own route finding algorithms. Branches now look for the second best node to go to, simply to stop the "boxing" problem. The cracks look really good now.<br>
class CrackPattern - holds properties for the crack pattern and a list of roots and branches.<br>
class CrackPattern3D - holds an array of CrackPattern classes. Also contains methods to join the layers and export the pattern (not yet implemented).</p>
	<p>Update: JoinLayers() has now been implemented and so below I show you the fruits of my labour:</p>
	<p><a href="http://www.blog.co.uk/srv/media/media_item.php?item_ID=61371"><img src="http://data1.blog.de/media/371/61371_5d85a47928_s.jpeg" align="" alt="unboxed" vspace="5" hspace="5"></a><br>
A low-resolution crack pattern with the unboxing algorithm</p>
	<p><a href="http://www.blog.co.uk/srv/media/media_item.php?item_ID=61372"><img src="http://data1.blog.de/media/372/61372_557e71e486_s.jpeg" align="" alt="unboxedhires" vspace="5" hspace="5"></a><br>
A high-resolution crack pattern with the unboxing algorithm</p>
	<p><a href="http://www.blog.co.uk/srv/media/media_item.php?item_ID=61373"><img src="http://data1.blog.de/media/373/61373_518a4e0c94_s.jpeg" align="" alt="crackpattern1" vspace="5" hspace="5"></a><br>
My first 3D crack pattern.</p>
	<p>From here, I can now progress to Stage 2<br>
This second program will be able to load .x files that have CrackPattern3Ds associated with them (I'll probably have to create a new file format or more simply, extend the .x format). You'll then be able to specify the location of impact and crack the object. This is going to be hard, really hard. Expect an update next week, possibly containing a picture of me crying over the problem. I'll get through it somehow.</p>
	<p>I've been watching a Microsoft webcast by Digipen on 3D game development in C#/MDX9 and it's very very good. I asked a question to them the other day, "How easy would it be to multi-thread this game engine?". Their answer, "Dependent upon the part you're threading, very hard". Yet more good news for me and my dual core processor (which I was half relying on to make this run in real-time :s).</p>
	<p>Outside of project space, the hockey website now has its third iteration of the picture gallery. Basically it categorises the pictures based on the associations in the database. I think it's what everyone wants and I've had no comments to the contrary yet so I'll assume that I can leave it now.</p>
	<p>Back to work!<br>
Steve</p>
	<p>Currently Listening To: The Strokes - First Impressions of Earth<br>
Currently Watching: Scrubs - 507 - My Way Home (homage to the wizard of oz, it's their best ever episode)<br>
Currently Eating: Home-made special fried rice (when i get it right it's the best food ever)<br>
Currently Reading: Does Anything Eat Wasps? - New Scientist<br>
Project Deadline: May 3rd
</p>
<p> <small> <a href="http://steelsoftware.blog.co.uk/2006/01/26/stage~508823/#comments">Comments</a> </small> </p>]]></content:encoded></default:item><default:item xmlns:default="http://purl.org/rss/1.0/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" rdf:about="http://steelsoftware.blog.co.uk/2006/01/17/game_engines_cheat~478454/"><default:title>Game Engines Cheat</default:title><default:link>http://steelsoftware.blog.co.uk/2006/01/17/game_engines_cheat~478454/</default:link><dc:date xmlns:dc="http://purl.org/dc/elements/1.1/">2006-01-17T01:44:49+01:00</dc:date><default:description>	&lt;p&gt;I'd like to have a little rant on here about what I've learned from my revision of 3D graphics theory. The exam is about a day away and I pretty much know it all now so hopefully I'm in for a nice ride, but I've started reading the text in more detail and have made connections between things I've seen in game engines or level editors and now I'm piecing it all together.&lt;/p&gt;
	&lt;p&gt;Firstly, a comment on how far away from "photo realistic real-time rendering" we are. Answer... an awful long way. I'm considering photo-realistic to be a rendering engine capable of "Monte-Carlo" rendering (that is, a mix of ray tracing and radiosity that renders a scene perfectly). Consider this: A ray tracer (with bounding-box collision speed-up) needs to perform R*N*X*M intersections simply to work out how many objects the rays initially hit per frame (where R is the number of rays fired, at least one per pixel i.e. 1024*768 = 786432; N is the number of objects, say 8; X is the number that are hit, say 10% = 0.1; M is the number of polygons in the scene, say 10000. Total calcluation = 6,291,456,000 intersections). That number only rises with each depth level (due to &gt;= 2 rays being produced for each hit). Try to do that at 60 frames per second and you'll need at least 50 billion intersection operations per second. That's just for the ray tracing. Radiosity method is an O(n^2) process. Even if each patch covers 10 polygons, that's still another 24,000,000 complex calculations every second. Such a method, even with all of the possible speed-up techniques would still require processors far far in excess of what we can manage today (ever wondered why a frame in Shrek takes 7 hours to render, even on their server farms? That's the answer).&lt;/p&gt;
	&lt;p&gt;So, how far have game engines come? Ignoring the perfection techniques of global illumination methods, how much can local methods do?&lt;/p&gt;
	&lt;p&gt;Well, there's the Phong reflection model. This allows you to calculate the intensity of light at any point on a model:&lt;br&gt;
I = ambient intensity + intensity of incident light*(vector to light source dot vertex normal + (vertex normal dot halfway vector)^n) The halfway vector is specified as (vector to light source plus viewing vector)/2 and n is the degree of imperfection in the surface. Performing this calculation at each vertex and interpolating the result across the polygon is known as Gouraud shading and is a fast and very common shading algorithm. Phong shading provides interpolates the vertex normal across the polygon and shades for every pixel, therefore providing a perfect specular highlight. Phong shading, however, is 3 times more expensive due to the additional vertex calculations and normalising the vectors at each step.&lt;/p&gt;
	&lt;p&gt;What does this mean though?&lt;br&gt;
Well, what I mean is that computer games don't use this method at all. Even calculating this algorithm in real time is too time consuming, even for today's processors (though there is an exception. See Doom 3 at the end).&lt;/p&gt;
	&lt;p&gt;So, how do graphics engines look so good?&lt;br&gt;
Well, lets start with the Unreal Engine, version 2.x (UT99-04). I did a few levels for UT99 and I always wondered why I had to perform "BSP calculations" before it would render the "light map". Well, now I know. A BSP (Binary Space Partitioning) tree is one that divides a scene up into segments (not necessarily evenly spaced) and in its tree structure assigns a data pointer to the object that occupies that space (the area is sub-divided until only 1 object exists inside each area). The engine will be doing this so that it's lighting calculations can be performed faster as the lighting will only have to navigate the tree to see if there's anything to shade in the place it's hitting.&lt;br&gt;
A light map is the ultimate way for a game engine to cheat. This same technique is used for drawring static shadows etc. Basically, a high-powered lighting technique is applied to every static object in the scene. This light map is then stored as a texture in memory and applied at game time. The Max Payne game engine used radiosity to perform this step (and back in 2001 it took aaages) and it gave some very impressive results.&lt;/p&gt;
	&lt;p&gt;So then, if all diffuse interactions are actually stored as a texture, how do they make things shiny?&lt;br&gt;
Well, these days that's done with pixel shader. The Phong reflection model is performed as a separate stage in the rendering pipeline and that produces specular highlights (Battlefield 2's water effects are an excellent example of this). Pixel shader can perform translucency effects too and High-Dynamic Range Lighting (HDR, the latest industry buzzword) can be simulated using pixel shader (but done properly, like in the Source engine, it requires a few more steps).&lt;/p&gt;
	&lt;p&gt;Still, all of that requires a lot of horse power. So, how do you keep polygon counts down?&lt;br&gt;
Answer: textures and bump mapping (displacement mapping requires extra polygons so isn't considered here). Textures provide much more detail for no additional polygon count. Bump mapping perturbs the polygon normals so as to produce raised/lowered sections when shaded by the pixel shader. The illusion of height is even more pronounced in parallax mapping (see the doom 3/quake 4 mod) and another type of mapping that is being used in Unreal Engine 3.0 (I don't know much about that, am interested to find out though).&lt;/p&gt;
	&lt;p&gt;So, all of this, combined with the standard viewpoint culling/clipping, Z-buffer hidden surface removal and distance fog provides a platform where good results can be obtained whilst actually doing very little in real-time.&lt;/p&gt;
	&lt;p&gt;So, what's the doom 3 engine then! Well, as far as I can tell, it performs Gouraud shading in real time. It uses no light maps, just an awful lot of pixel and vertex shader (which is why it requires a graphics card capable of DirectX 8 pixel shaders). It generates dynamic shadows in real-time (most likely with a shadow Z buffer but it may involve some other technique).&lt;/p&gt;
	&lt;p&gt;In conclusion, modern video games cheat. We don't have the processing power to produce real-time radiosity images so it all has to be an offline process. Maybe one day we'll be able to produce photo-realistic images in real-time, but that day is over 10 years away.&lt;/p&gt;
	&lt;p&gt;Hope you enjoyed my dissection of graphics engines. I hope that most of it is right! If anything needs more explaining just leave a comment.&lt;/p&gt;
	&lt;p&gt;Steve&lt;/p&gt;
	&lt;p&gt;Currently Listening To: We Are Scientists - With Love and Squalor&lt;br&gt;
Currently Watching: Scrubs - Season 5!&lt;br&gt;
Currently Reading: 3D Computer Graphics, Watt, Alan&lt;br&gt;
Currently Eating: Toast with apricot jam... ooh&lt;br&gt;
Hours till my exam: 30
&lt;/p&gt;
&lt;p&gt; &lt;small&gt; &lt;a href="http://steelsoftware.blog.co.uk/2006/01/17/game_engines_cheat~478454/#comments"&gt;Comments&lt;/a&gt; &lt;/small&gt; &lt;/p&gt;</default:description><content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[	<p>I'd like to have a little rant on here about what I've learned from my revision of 3D graphics theory. The exam is about a day away and I pretty much know it all now so hopefully I'm in for a nice ride, but I've started reading the text in more detail and have made connections between things I've seen in game engines or level editors and now I'm piecing it all together.</p>
	<p>Firstly, a comment on how far away from "photo realistic real-time rendering" we are. Answer... an awful long way. I'm considering photo-realistic to be a rendering engine capable of "Monte-Carlo" rendering (that is, a mix of ray tracing and radiosity that renders a scene perfectly). Consider this: A ray tracer (with bounding-box collision speed-up) needs to perform R*N*X*M intersections simply to work out how many objects the rays initially hit per frame (where R is the number of rays fired, at least one per pixel i.e. 1024*768 = 786432; N is the number of objects, say 8; X is the number that are hit, say 10% = 0.1; M is the number of polygons in the scene, say 10000. Total calcluation = 6,291,456,000 intersections). That number only rises with each depth level (due to >= 2 rays being produced for each hit). Try to do that at 60 frames per second and you'll need at least 50 billion intersection operations per second. That's just for the ray tracing. Radiosity method is an O(n^2) process. Even if each patch covers 10 polygons, that's still another 24,000,000 complex calculations every second. Such a method, even with all of the possible speed-up techniques would still require processors far far in excess of what we can manage today (ever wondered why a frame in Shrek takes 7 hours to render, even on their server farms? That's the answer).</p>
	<p>So, how far have game engines come? Ignoring the perfection techniques of global illumination methods, how much can local methods do?</p>
	<p>Well, there's the Phong reflection model. This allows you to calculate the intensity of light at any point on a model:<br>
I = ambient intensity + intensity of incident light*(vector to light source dot vertex normal + (vertex normal dot halfway vector)^n) The halfway vector is specified as (vector to light source plus viewing vector)/2 and n is the degree of imperfection in the surface. Performing this calculation at each vertex and interpolating the result across the polygon is known as Gouraud shading and is a fast and very common shading algorithm. Phong shading provides interpolates the vertex normal across the polygon and shades for every pixel, therefore providing a perfect specular highlight. Phong shading, however, is 3 times more expensive due to the additional vertex calculations and normalising the vectors at each step.</p>
	<p>What does this mean though?<br>
Well, what I mean is that computer games don't use this method at all. Even calculating this algorithm in real time is too time consuming, even for today's processors (though there is an exception. See Doom 3 at the end).</p>
	<p>So, how do graphics engines look so good?<br>
Well, lets start with the Unreal Engine, version 2.x (UT99-04). I did a few levels for UT99 and I always wondered why I had to perform "BSP calculations" before it would render the "light map". Well, now I know. A BSP (Binary Space Partitioning) tree is one that divides a scene up into segments (not necessarily evenly spaced) and in its tree structure assigns a data pointer to the object that occupies that space (the area is sub-divided until only 1 object exists inside each area). The engine will be doing this so that it's lighting calculations can be performed faster as the lighting will only have to navigate the tree to see if there's anything to shade in the place it's hitting.<br>
A light map is the ultimate way for a game engine to cheat. This same technique is used for drawring static shadows etc. Basically, a high-powered lighting technique is applied to every static object in the scene. This light map is then stored as a texture in memory and applied at game time. The Max Payne game engine used radiosity to perform this step (and back in 2001 it took aaages) and it gave some very impressive results.</p>
	<p>So then, if all diffuse interactions are actually stored as a texture, how do they make things shiny?<br>
Well, these days that's done with pixel shader. The Phong reflection model is performed as a separate stage in the rendering pipeline and that produces specular highlights (Battlefield 2's water effects are an excellent example of this). Pixel shader can perform translucency effects too and High-Dynamic Range Lighting (HDR, the latest industry buzzword) can be simulated using pixel shader (but done properly, like in the Source engine, it requires a few more steps).</p>
	<p>Still, all of that requires a lot of horse power. So, how do you keep polygon counts down?<br>
Answer: textures and bump mapping (displacement mapping requires extra polygons so isn't considered here). Textures provide much more detail for no additional polygon count. Bump mapping perturbs the polygon normals so as to produce raised/lowered sections when shaded by the pixel shader. The illusion of height is even more pronounced in parallax mapping (see the doom 3/quake 4 mod) and another type of mapping that is being used in Unreal Engine 3.0 (I don't know much about that, am interested to find out though).</p>
	<p>So, all of this, combined with the standard viewpoint culling/clipping, Z-buffer hidden surface removal and distance fog provides a platform where good results can be obtained whilst actually doing very little in real-time.</p>
	<p>So, what's the doom 3 engine then! Well, as far as I can tell, it performs Gouraud shading in real time. It uses no light maps, just an awful lot of pixel and vertex shader (which is why it requires a graphics card capable of DirectX 8 pixel shaders). It generates dynamic shadows in real-time (most likely with a shadow Z buffer but it may involve some other technique).</p>
	<p>In conclusion, modern video games cheat. We don't have the processing power to produce real-time radiosity images so it all has to be an offline process. Maybe one day we'll be able to produce photo-realistic images in real-time, but that day is over 10 years away.</p>
	<p>Hope you enjoyed my dissection of graphics engines. I hope that most of it is right! If anything needs more explaining just leave a comment.</p>
	<p>Steve</p>
	<p>Currently Listening To: We Are Scientists - With Love and Squalor<br>
Currently Watching: Scrubs - Season 5!<br>
Currently Reading: 3D Computer Graphics, Watt, Alan<br>
Currently Eating: Toast with apricot jam... ooh<br>
Hours till my exam: 30
</p>
<p> <small> <a href="http://steelsoftware.blog.co.uk/2006/01/17/game_engines_cheat~478454/#comments">Comments</a> </small> </p>]]></content:encoded></default:item><default:item xmlns:default="http://purl.org/rss/1.0/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" rdf:about="http://steelsoftware.blog.co.uk/2006/01/11/new_year_update~461197/"><default:title>New Year Update</default:title><default:link>http://steelsoftware.blog.co.uk/2006/01/11/new_year_update~461197/</default:link><dc:date xmlns:dc="http://purl.org/dc/elements/1.1/">2006-01-11T14:59:50+01:00</dc:date><default:description>	&lt;p&gt;Hello to you all,&lt;/p&gt;
	&lt;p&gt;Christmas has been a nice relaxing time for me and it's allowed me to completely forget about my project, however, it's also let me forget how to code (it happens to the best of us)! So, whilst I've been preparing for my exams (one of 3D Graphics theory and one on information searching and retrieval) I've not had much time to work on my project. I've also tried to work on the website code over Xmas as it needs some security stuff adding to it and a new gallery etc... However, the new menu system I've designed has lots of problems with the way security in the site works. So, until I can sit down and find a workaround I'm going to have to leave it as it is.&lt;/p&gt;
	&lt;p&gt;So, I've finally taken a break from revision and solved my "boxing" problem. A bit of heuristics and a fudged multi-dimensional sorting algorithm later and it all works very well. The next step is to put all that into 3D, firstly by just duplicating the pattern and extrapolating through the points. That's all that's going to be done for the moment as the actual fracturing stage is a lot more important than making the 3D crack look pretty. I do have to split my Crack class up though, too many things depend upon booleans and the file is now almost 1000 lines long. I'm thinking a simple Crack interface with a Root and a Branch crack (as these two have different node selection algorithms that are currently built into the one class).&lt;/p&gt;
	&lt;p&gt;So, I'll go and get on with that.&lt;/p&gt;
	&lt;p&gt;&lt;img src="/img/smilies/icon_wave.gif" alt=":wave:" class="middle" border="0"&gt;&lt;br&gt;
Steve&lt;/p&gt;
	&lt;p&gt;Currently Listening To: Sigur Ros - Takk&lt;br&gt;
Currently Watching: Peep Show (thanks Amy &lt;img src="/img/smilies/icon_biggrin.gif" alt=":D" class="middle" border="0"&gt;)&lt;br&gt;
Currently Eating: Chewing Gum (well, chewing, not eating)&lt;br&gt;
Currently Reading: Profanisaurus Rex&lt;br&gt;
Days till 3DGFX exam: 7
&lt;/p&gt;
&lt;p&gt; &lt;small&gt; &lt;a href="http://steelsoftware.blog.co.uk/2006/01/11/new_year_update~461197/#comments"&gt;Comments&lt;/a&gt; &lt;/small&gt; &lt;/p&gt;</default:description><content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[	<p>Hello to you all,</p>
	<p>Christmas has been a nice relaxing time for me and it's allowed me to completely forget about my project, however, it's also let me forget how to code (it happens to the best of us)! So, whilst I've been preparing for my exams (one of 3D Graphics theory and one on information searching and retrieval) I've not had much time to work on my project. I've also tried to work on the website code over Xmas as it needs some security stuff adding to it and a new gallery etc... However, the new menu system I've designed has lots of problems with the way security in the site works. So, until I can sit down and find a workaround I'm going to have to leave it as it is.</p>
	<p>So, I've finally taken a break from revision and solved my "boxing" problem. A bit of heuristics and a fudged multi-dimensional sorting algorithm later and it all works very well. The next step is to put all that into 3D, firstly by just duplicating the pattern and extrapolating through the points. That's all that's going to be done for the moment as the actual fracturing stage is a lot more important than making the 3D crack look pretty. I do have to split my Crack class up though, too many things depend upon booleans and the file is now almost 1000 lines long. I'm thinking a simple Crack interface with a Root and a Branch crack (as these two have different node selection algorithms that are currently built into the one class).</p>
	<p>So, I'll go and get on with that.</p>
	<p><img src="/img/smilies/icon_wave.gif" alt=":wave:" class="middle" border="0"><br>
Steve</p>
	<p>Currently Listening To: Sigur Ros - Takk<br>
Currently Watching: Peep Show (thanks Amy <img src="/img/smilies/icon_biggrin.gif" alt=":D" class="middle" border="0">)<br>
Currently Eating: Chewing Gum (well, chewing, not eating)<br>
Currently Reading: Profanisaurus Rex<br>
Days till 3DGFX exam: 7
</p>
<p> <small> <a href="http://steelsoftware.blog.co.uk/2006/01/11/new_year_update~461197/#comments">Comments</a> </small> </p>]]></content:encoded></default:item><default:item xmlns:default="http://purl.org/rss/1.0/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" rdf:about="http://steelsoftware.blog.co.uk/2005/12/21/xmas_update~403577/"><default:title>Xmas Update</default:title><default:link>http://steelsoftware.blog.co.uk/2005/12/21/xmas_update~403577/</default:link><dc:date xmlns:dc="http://purl.org/dc/elements/1.1/">2005-12-21T00:19:03+01:00</dc:date><default:description>	&lt;p&gt;Time for an update. This one is rather late in coming due to essay writing (more on that later) and xmas fun!&lt;/p&gt;
	&lt;p&gt;First: Project update&lt;br&gt;
I didn't think I was going to be able to do it but lo and behold I created a crack pattern that followed an alpha texture. The key was in this bit of code:&lt;/p&gt;
	
private void GetUVInfo(Texture t)&lt;br&gt;
        {&lt;br&gt;
            SurfaceDescription s = t.GetLevelDescription(0);&lt;br&gt;
            uint[,] data = (uint[,])t.LockRectangle(typeof(uint), 0, LockFlags.None, s.Width, s.Height);&lt;br&gt;
            t.UnlockRectangle(0);&lt;br&gt;
            texHeight = s.Height;&lt;br&gt;
            texWidth = s.Width;&lt;br&gt;
            wValues = data;&lt;br&gt;
        }
	
	&lt;p&gt;Locking the rectangle got the multidimensional array for the texture (one for each pixel of the texture). After that and a few refactors later (including one which reduced the processing time by a factor of 5) I came up with a pattern that looked like this:&lt;/p&gt;
	&lt;p&gt;&lt;a href="http://data1.blog.de/blog/s/steelsoftware/img/alphatexradialhires2.jpg" title="Alphatexureworking1"&gt;&lt;img src="http://data1.blog.de/blog/s/steelsoftware/img/alphatexradialhires2_small.jpg" border="0" alt="Alphatexureworking1"&gt;&lt;/a&gt;&lt;/p&gt;
	&lt;p&gt;So all looked good there.&lt;/p&gt;
	&lt;p&gt;At this point it was time for me to concentrate on my survey and analysis report (yes, this is a dissertation so I have to write lots of stuff) and 2 weeks without any improvement to the code later and I come up with an 8000 word report &lt;img src="/img/smilies/icon_smile.gif" alt=":)" class="middle" border="0"&gt; I'll upload it later as I don't have a broadband net connection at the minute and it's a rather large file (due to post-processing in adobe acrobat).&lt;/p&gt;
	&lt;p&gt;So, two weeks after that is handed in (today) I sit down with the new December SDK and try to put my code into a .NET 1.1 EmptyProject (not a .NET 2.0 project as the VertexBuffer class seems to have disappeared and I kinda need that. I think it's gone into the generic GraphicsBuffer class but there's no documentation so I'm not touching it yet). Can I do it? Can I hell! There's either something wrong with the way I'm lighting it or there's other things wrong because I can't see the nodes or the crack for the life of me. It also crashes spectacularly if I try to resize the window when I've implemented a VertexBuffer (the VertexBuffer of course being called inside the OnRecreateDevice method). So, I give up on that and go back to my own simple window.&lt;/p&gt;
	&lt;p&gt;For my report I created a test set of textures that my crack pattern should conform to if they are to pass as a realistic crack pattern. However, with one of them, I noticed that the pattern was going into areas of black. These areas I had set the pattern to stop as soon as it reached it.... Turns out that my visual representation of the crack pattern was out by 90 degrees... however, I'm wondering why. AFAIK (and from all the text books I've read), UV coordinates start in the top left hand corner, and that was where I was doing my  transformation to get the correct array index for the node. However, this rotation indicated that the UV coordinates infact start at the bottom left when the description is retrieved. If anyone can spread some light on this I'd be greatful.&lt;/p&gt;
	&lt;p&gt;So, with that worked out I produced a crack pattern like this:&lt;/p&gt;
	&lt;p&gt;&lt;a href="http://data1.blog.de/blog/s/steelsoftware/img/alphatex3correct.jpg" title="Alphatexureworking2"&gt;&lt;img src="http://data1.blog.de/blog/s/steelsoftware/img/alphatex3correct_small.jpg" border="0" alt="Alphatexureworking2"&gt;&lt;/a&gt;&lt;/p&gt;
	&lt;p&gt;It follows the lines very neatly and I was most impressed. However, there's one big problem.... little boxes. When it comes to re-meshing this, a small box like that (especially at high resolutions) will be a bitch to clip and re-mesh and will also increase the polygon count far too much. So, something had to be done.&lt;/p&gt;
	&lt;p&gt;Firstly, I stopped the branches from branching too often. Once it had branched a crack will not be able to branch until it has travelled a further 4 nodes. This eliminates some branching but does not stop the boxing (this is where because the root crack is following the line of most weakness, the crack travels one in its direction and then goes back one across and back to the root crack as that is the line of least resistence. Boxing will be solved by a different method alltogether.&lt;/p&gt;
	&lt;p&gt;The proposal of a heuristic search when the choosing algorithm doesn't know which direction any of the nodes it can choose from are travelling in is a tricky one. It gets ever more complicated if you want to look at the next node straight after that one to find out the sum of the two white values. I worked it out that it would take 16 if statements to properly work out that algorithm, and therefore it's a bit of a bitch so I won't be taking that option.&lt;br&gt;
Instead, I'll be creating the getNextNodesHeuristic and chooseNextNodeHeuristic methods where the getNextNodes method chooses the nodes in a 2D array with the next node then its next one along as its pair. This will lead to a much faster chooseNextNode method, however, it does lead to some code duplication. These methods are only applied to cracks which are branches. These are denoted by a isBranch boolean value.&lt;/p&gt;
	&lt;p&gt;That's about it for the project so far. The above should produce some really good results which I'll then be able to take on to the 3D level.&lt;/p&gt;
	&lt;p&gt;The hockey website:&lt;br&gt;
Well, I'm making some quite significant changes over xmas including:&lt;/p&gt;
	&lt;p&gt;New member properties (playing positions and other random things)&lt;br&gt;
Staying logged in (cookies)&lt;br&gt;
A new picture gallery (at last)&lt;br&gt;
A new menu layout (no more disappearing login box)&lt;br&gt;
Properly working email thing (FireFox compatible)&lt;br&gt;
Text area formatting (so you can make news posts look pretty without knowing anything!)&lt;br&gt;
New Admin areas&lt;br&gt;
Security log&lt;br&gt;
Generics: i.e. the ability to add pages to the website at will and change the name of the club and CSS style too.&lt;/p&gt;
	&lt;p&gt;Cookies are done, as are playing positions. I've also fixed a load of minor bugs since the start and it's pretty bug-free at the moment. The reason this is happening now is that the univiersity netball club wants the website for their club. Me and Paddy (co-developer) haven't had a chance to meet with netball yet but these upgrades will all go onto the hockey website first.&lt;/p&gt;
	&lt;p&gt;Other than that, about a month ago I got a phone call from ABI Electronics (see summer blog entries) firstly to fix a bug with the website (integer limit reached, fixed within seconds) and secondly to report how they'd been doing since the site went live. Answer:&lt;/p&gt;
	&lt;blockquote&gt;&lt;p&gt;Traffic to the website has doubled and orders have also doubled&lt;/p&gt;&lt;/blockquote&gt;
	&lt;p&gt;For a company that has a turnover of over £1m that's excellent.... and they only paid me £1500...... I've been had!!!&lt;/p&gt;
	&lt;p&gt;Oh yeah, I've got exams in January, very boring.&lt;/p&gt;
	&lt;p&gt;Oh, and Merry Christmas to you all.&lt;/p&gt;
	&lt;p&gt;&lt;img src="/img/smilies/icon_wave.gif" alt=":wave:" class="middle" border="0"&gt;&lt;br&gt;
Steve&lt;/p&gt;
	&lt;p&gt;Currently Listening To: My old school's production of Little Shop of Horrors (I can't sing in an American accent)&lt;br&gt;
Currently Watching: Late night poker. Why not?&lt;br&gt;
Currently Eating: My mum's cooking &lt;img src="/img/smilies/icon_biggrin.gif" alt=":D" class="middle" border="0"&gt;&lt;br&gt;
Currently Reading: MSDN Documentation&lt;br&gt;
What Do I Think Of Office 12 Beta 1?: Signs of excellence, just get rid of the bugs!
&lt;/p&gt;
&lt;p&gt; &lt;small&gt; &lt;a href="http://steelsoftware.blog.co.uk/2005/12/21/xmas_update~403577/#comments"&gt;Comments&lt;/a&gt; &lt;/small&gt; &lt;/p&gt;</default:description><content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[	<p>Time for an update. This one is rather late in coming due to essay writing (more on that later) and xmas fun!</p>
	<p>First: Project update<br>
I didn't think I was going to be able to do it but lo and behold I created a crack pattern that followed an alpha texture. The key was in this bit of code:</p>
	
private void GetUVInfo(Texture t)<br>
        {<br>
            SurfaceDescription s = t.GetLevelDescription(0);<br>
            uint[,] data = (uint[,])t.LockRectangle(typeof(uint), 0, LockFlags.None, s.Width, s.Height);<br>
            t.UnlockRectangle(0);<br>
            texHeight = s.Height;<br>
            texWidth = s.Width;<br>
            wValues = data;<br>
        }
	
	<p>Locking the rectangle got the multidimensional array for the texture (one for each pixel of the texture). After that and a few refactors later (including one which reduced the processing time by a factor of 5) I came up with a pattern that looked like this:</p>
	<p><a href="http://data1.blog.de/blog/s/steelsoftware/img/alphatexradialhires2.jpg" title="Alphatexureworking1"><img src="http://data1.blog.de/blog/s/steelsoftware/img/alphatexradialhires2_small.jpg" border="0" alt="Alphatexureworking1"></a></p>
	<p>So all looked good there.</p>
	<p>At this point it was time for me to concentrate on my survey and analysis report (yes, this is a dissertation so I have to write lots of stuff) and 2 weeks without any improvement to the code later and I come up with an 8000 word report <img src="/img/smilies/icon_smile.gif" alt=":)" class="middle" border="0"> I'll upload it later as I don't have a broadband net connection at the minute and it's a rather large file (due to post-processing in adobe acrobat).</p>
	<p>So, two weeks after that is handed in (today) I sit down with the new December SDK and try to put my code into a .NET 1.1 EmptyProject (not a .NET 2.0 project as the VertexBuffer class seems to have disappeared and I kinda need that. I think it's gone into the generic GraphicsBuffer class but there's no documentation so I'm not touching it yet). Can I do it? Can I hell! There's either something wrong with the way I'm lighting it or there's other things wrong because I can't see the nodes or the crack for the life of me. It also crashes spectacularly if I try to resize the window when I've implemented a VertexBuffer (the VertexBuffer of course being called inside the OnRecreateDevice method). So, I give up on that and go back to my own simple window.</p>
	<p>For my report I created a test set of textures that my crack pattern should conform to if they are to pass as a realistic crack pattern. However, with one of them, I noticed that the pattern was going into areas of black. These areas I had set the pattern to stop as soon as it reached it.... Turns out that my visual representation of the crack pattern was out by 90 degrees... however, I'm wondering why. AFAIK (and from all the text books I've read), UV coordinates start in the top left hand corner, and that was where I was doing my  transformation to get the correct array index for the node. However, this rotation indicated that the UV coordinates infact start at the bottom left when the description is retrieved. If anyone can spread some light on this I'd be greatful.</p>
	<p>So, with that worked out I produced a crack pattern like this:</p>
	<p><a href="http://data1.blog.de/blog/s/steelsoftware/img/alphatex3correct.jpg" title="Alphatexureworking2"><img src="http://data1.blog.de/blog/s/steelsoftware/img/alphatex3correct_small.jpg" border="0" alt="Alphatexureworking2"></a></p>
	<p>It follows the lines very neatly and I was most impressed. However, there's one big problem.... little boxes. When it comes to re-meshing this, a small box like that (especially at high resolutions) will be a bitch to clip and re-mesh and will also increase the polygon count far too much. So, something had to be done.</p>
	<p>Firstly, I stopped the branches from branching too often. Once it had branched a crack will not be able to branch until it has travelled a further 4 nodes. This eliminates some branching but does not stop the boxing (this is where because the root crack is following the line of most weakness, the crack travels one in its direction and then goes back one across and back to the root crack as that is the line of least resistence. Boxing will be solved by a different method alltogether.</p>
	<p>The proposal of a heuristic search when the choosing algorithm doesn't know which direction any of the nodes it can choose from are travelling in is a tricky one. It gets ever more complicated if you want to look at the next node straight after that one to find out the sum of the two white values. I worked it out that it would take 16 if statements to properly work out that algorithm, and therefore it's a bit of a bitch so I won't be taking that option.<br>
Instead, I'll be creating the getNextNodesHeuristic and chooseNextNodeHeuristic methods where the getNextNodes method chooses the nodes in a 2D array with the next node then its next one along as its pair. This will lead to a much faster chooseNextNode method, however, it does lead to some code duplication. These methods are only applied to cracks which are branches. These are denoted by a isBranch boolean value.</p>
	<p>That's about it for the project so far. The above should produce some really good results which I'll then be able to take on to the 3D level.</p>
	<p>The hockey website:<br>
Well, I'm making some quite significant changes over xmas including:</p>
	<p>New member properties (playing positions and other random things)<br>
Staying logged in (cookies)<br>
A new picture gallery (at last)<br>
A new menu layout (no more disappearing login box)<br>
Properly working email thing (FireFox compatible)<br>
Text area formatting (so you can make news posts look pretty without knowing anything!)<br>
New Admin areas<br>
Security log<br>
Generics: i.e. the ability to add pages to the website at will and change the name of the club and CSS style too.</p>
	<p>Cookies are done, as are playing positions. I've also fixed a load of minor bugs since the start and it's pretty bug-free at the moment. The reason this is happening now is that the univiersity netball club wants the website for their club. Me and Paddy (co-developer) haven't had a chance to meet with netball yet but these upgrades will all go onto the hockey website first.</p>
	<p>Other than that, about a month ago I got a phone call from ABI Electronics (see summer blog entries) firstly to fix a bug with the website (integer limit reached, fixed within seconds) and secondly to report how they'd been doing since the site went live. Answer:</p>
	<blockquote><p>Traffic to the website has doubled and orders have also doubled</p></blockquote>
	<p>For a company that has a turnover of over £1m that's excellent.... and they only paid me £1500...... I've been had!!!</p>
	<p>Oh yeah, I've got exams in January, very boring.</p>
	<p>Oh, and Merry Christmas to you all.</p>
	<p><img src="/img/smilies/icon_wave.gif" alt=":wave:" class="middle" border="0"><br>
Steve</p>
	<p>Currently Listening To: My old school's production of Little Shop of Horrors (I can't sing in an American accent)<br>
Currently Watching: Late night poker. Why not?<br>
Currently Eating: My mum's cooking <img src="/img/smilies/icon_biggrin.gif" alt=":D" class="middle" border="0"><br>
Currently Reading: MSDN Documentation<br>
What Do I Think Of Office 12 Beta 1?: Signs of excellence, just get rid of the bugs!
</p>
<p> <small> <a href="http://steelsoftware.blog.co.uk/2005/12/21/xmas_update~403577/#comments">Comments</a> </small> </p>]]></content:encoded></default:item><default:item xmlns:default="http://purl.org/rss/1.0/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" rdf:about="http://steelsoftware.blog.co.uk/2005/11/11/a_full_description~298722/"><default:title>A Full Description</default:title><default:link>http://steelsoftware.blog.co.uk/2005/11/11/a_full_description~298722/</default:link><dc:date xmlns:dc="http://purl.org/dc/elements/1.1/">2005-11-11T01:41:55+01:00</dc:date><default:description>	&lt;p&gt;Firstly, woohoo! Linked to by the ZBuffer which is very good news indeed. Slightly &lt;img src="/img/smilies/icon_confused.gif" alt=":-/" class="middle" border="0"&gt;, ZMan wasn't sure what I was doing with this. So, a full explaination.&lt;/p&gt;
	&lt;p&gt;This is my third year dissertation project. I'm a student at the University of Sheffield studying computer science. The working title for this project is "A Cracking Algorithm for Destructible 3D Objects".&lt;/p&gt;
	&lt;p&gt;What I aim to do is damage/fracture/crack/split/shatter 3D objects realistically in real-time. Why is this important? Well, did anyone else feel let down by hitting a plank of wood at its end in Half-Life 2 only to see if break in the middle? Did you put a grenade next to it and all that happened was the plank split in two?&lt;/p&gt;
	&lt;p&gt;The way I'm going about it is to create library of crack patterns based upon the amount of force applied to an object and a strength texture (an alpha texture). The crack pattern is then applied to the object at runtime (the right size of crack is selected dependent upon the object and force). The crack pattern is then used as a guide for the mesh to be split and re-formed with the shards then animated away in the opposite direction to the direction of the force.&lt;/p&gt;
	&lt;p&gt;Sound complex? Too right.&lt;/p&gt;
	&lt;p&gt;I'm writing this program in C# and Managed DX9 because C# is a brilliant language and Managed DX9 is fantastic too. It means I can just write algorithms quickly without worrying about any memory leaks, pointers or any of that rubbish that comes with C++. DX9 is so much better than OpenGL (which my course is teaching me) as it's an actual API, not just a list of commands. Visual Studio 2005 is an infinitly better editor than say Eclipse. VS tells me exactly where I've gone wrong and often corrects it for me! Eclipse's debugger gives unclear error messages and knows very little about 3D development.&lt;/p&gt;
	&lt;p&gt;Right now, I'm writing up my literature report. Most of my research comes from these two past papers by &lt;a href="http://www.dcs.shef.ac.uk/intranet/teaching/projects/archive/ug2003/pdf/u0df2.pdf"&gt;Dan Fox (2003)&lt;/a&gt;and &lt;a href="http://www.dcs.shef.ac.uk/intranet/teaching/projects/archive/ug2004/pdf/u1am3.pdf"&gt;Adam Miller (2004)&lt;/a&gt;.&lt;br&gt;
My next stage of experimenting involves getting my crack pattern in to 3D from 2D. After that I'm going to get a simple crack successfully working, then make it work with an actual crack pattern. Implementation of the alpha texture will probably have to wait till next term.&lt;/p&gt;
	&lt;p&gt;If anyone has any comments or suggestions I'm all ears, just leave them at the bottom.&lt;/p&gt;
	&lt;p&gt;&lt;img src="/img/smilies/icon_wave.gif" alt=":wave:" class="middle" border="0"&gt;&lt;br&gt;
Steve&lt;/p&gt;
	&lt;p&gt;Currently Listening To: Feeder - Shatter&lt;br&gt;
Currently Watching: The Spongebob Squarepants Movie&lt;br&gt;
Currently Reading: My Own Work!!&lt;br&gt;
Currently Drinking: Tea from my &lt;a href="http://www.pgmoment.com/wallaceandgromit/"&gt;Gromit Mug&lt;/a&gt;&lt;br&gt;
Days Till 1st handin: 14!!
&lt;/p&gt;
&lt;p&gt; &lt;small&gt; &lt;a href="http://steelsoftware.blog.co.uk/2005/11/11/a_full_description~298722/#comments"&gt;Comments&lt;/a&gt; &lt;/small&gt; &lt;/p&gt;</default:description><content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[	<p>Firstly, woohoo! Linked to by the ZBuffer which is very good news indeed. Slightly <img src="/img/smilies/icon_confused.gif" alt=":-/" class="middle" border="0">, ZMan wasn't sure what I was doing with this. So, a full explaination.</p>
	<p>This is my third year dissertation project. I'm a student at the University of Sheffield studying computer science. The working title for this project is "A Cracking Algorithm for Destructible 3D Objects".</p>
	<p>What I aim to do is damage/fracture/crack/split/shatter 3D objects realistically in real-time. Why is this important? Well, did anyone else feel let down by hitting a plank of wood at its end in Half-Life 2 only to see if break in the middle? Did you put a grenade next to it and all that happened was the plank split in two?</p>
	<p>The way I'm going about it is to create library of crack patterns based upon the amount of force applied to an object and a strength texture (an alpha texture). The crack pattern is then applied to the object at runtime (the right size of crack is selected dependent upon the object and force). The crack pattern is then used as a guide for the mesh to be split and re-formed with the shards then animated away in the opposite direction to the direction of the force.</p>
	<p>Sound complex? Too right.</p>
	<p>I'm writing this program in C# and Managed DX9 because C# is a brilliant language and Managed DX9 is fantastic too. It means I can just write algorithms quickly without worrying about any memory leaks, pointers or any of that rubbish that comes with C++. DX9 is so much better than OpenGL (which my course is teaching me) as it's an actual API, not just a list of commands. Visual Studio 2005 is an infinitly better editor than say Eclipse. VS tells me exactly where I've gone wrong and often corrects it for me! Eclipse's debugger gives unclear error messages and knows very little about 3D development.</p>
	<p>Right now, I'm writing up my literature report. Most of my research comes from these two past papers by <a href="http://www.dcs.shef.ac.uk/intranet/teaching/projects/archive/ug2003/pdf/u0df2.pdf">Dan Fox (2003)</a>and <a href="http://www.dcs.shef.ac.uk/intranet/teaching/projects/archive/ug2004/pdf/u1am3.pdf">Adam Miller (2004)</a>.<br>
My next stage of experimenting involves getting my crack pattern in to 3D from 2D. After that I'm going to get a simple crack successfully working, then make it work with an actual crack pattern. Implementation of the alpha texture will probably have to wait till next term.</p>
	<p>If anyone has any comments or suggestions I'm all ears, just leave them at the bottom.</p>
	<p><img src="/img/smilies/icon_wave.gif" alt=":wave:" class="middle" border="0"><br>
Steve</p>
	<p>Currently Listening To: Feeder - Shatter<br>
Currently Watching: The Spongebob Squarepants Movie<br>
Currently Reading: My Own Work!!<br>
Currently Drinking: Tea from my <a href="http://www.pgmoment.com/wallaceandgromit/">Gromit Mug</a><br>
Days Till 1st handin: 14!!
</p>
<p> <small> <a href="http://steelsoftware.blog.co.uk/2005/11/11/a_full_description~298722/#comments">Comments</a> </small> </p>]]></content:encoded></default:item><default:item xmlns:default="http://purl.org/rss/1.0/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" rdf:about="http://steelsoftware.blog.co.uk/2005/11/08/week_5_update~292897/"><default:title>Week 5 Update</default:title><default:link>http://steelsoftware.blog.co.uk/2005/11/08/week_5_update~292897/</default:link><dc:date xmlns:dc="http://purl.org/dc/elements/1.1/">2005-11-08T22:29:44+01:00</dc:date><default:description>	&lt;p&gt;I've added in some nifty new features this week. The crack pattern looks a whole lot better now too. I've added branches and taken some screenshots at higher resolutions of crack pattern.&lt;/p&gt;
	&lt;p&gt;Hi-res image (0.5f between nodes, 61 rows and columns, threshold = 90%)&lt;br&gt;
&lt;a href="http://www.sheffieldhockey.com/yr3proj/hires.gif"&gt;&lt;img src="http://www.sheffieldhockey.com/yr3proj/hires.gif" border="0" height="350" width="400"&gt;&lt;/a&gt;&lt;/p&gt;
	&lt;p&gt;Hi-res image (0.5f between nodes, 61 rows and columns, threshold = 80%)&lt;br&gt;
&lt;a href="http://www.sheffieldhockey.com/yr3proj/lowerthreshold.gif"&gt;&lt;img src="http://www.sheffieldhockey.com/yr3proj/lowerthreshold.gif" border="0" height="350" width="400"&gt;&lt;/a&gt;&lt;/p&gt;
	&lt;p&gt;Hi-res image (0.5f between nodes, 61 rows and columns, threshold = 93%)&lt;br&gt;
&lt;a href="http://www.sheffieldhockey.com/yr3proj/higherthreshold.gif"&gt;&lt;img src="http://www.sheffieldhockey.com/yr3proj/higherthreshold.gif" border="0" height="350" width="400"&gt;&lt;/a&gt;&lt;/p&gt;
	&lt;p&gt;Lo-res image (1.0f between nodes, 41 rows and columns, threshold = 90%)&lt;br&gt;
&lt;a href="http://www.sheffieldhockey.com/yr3proj/loreshithreshold.gif"&gt;&lt;img src="http://www.sheffieldhockey.com/yr3proj/loreshithreshold.gif" border="0" height="350" width="400"&gt;&lt;/a&gt;&lt;/p&gt;
	&lt;p&gt;As you can see, a threshold of 80% (meaning a branch will occur 20% of the time) leads to the shattering of the object. A higher threshold leads to a much more realistic crack pattern. There is also the problem that most of the time, at least one of the cracks turn and hit another crack within 2 iterations. The only way of fixing this would be to check if the crack path is shorter than 3/4 nodes and if so, ignore lines meeting and accept them as possible nodes. However, this is a bit of a bodge.&lt;/p&gt;
	&lt;p&gt;When (read: if) I get the alpha texture implemented (really, if anyone has a clue how i'm gonna do this I'm all ears) the cracks will follow that texture, taking away some of the randomness (some will be left in however). For instance, branches will only occur when there's say a 0.75f white value or higher and even then it's still another 90% chance of it occuring then. Also, if the node is choosing high strength nodes (say anything less than 0.50f) the force will decrease at a higher rate proportional to the strength of the node it is going through.&lt;br&gt;
This is all great in theory, I just have to make it work!!&lt;/p&gt;
	&lt;p&gt;The next problem is then the 3D stuff. Creating realistic shards and such. If I have the alpha texture implemented, it would be possible to use the fracture generator to create similar fractures based upon lower resolution alpha textures. However, since I don't have that at the moment I'm down to my backup plan (which may prove to be a better implementation anyway).&lt;/p&gt;
	&lt;p&gt;The idea is to take the crack pattern as it is backwards on to the next layer. Then, you start looking up a crack's path, finding simpler ways to get to that point. Say you looked 5 nodes ahead (on a low resolution model of course) and it zig-zagged from (0,0) to (2,2). The simpler way to that would be one vertex at (2,0) or (0,2) depending on the crack's direction. Higher resolution grids would need to read further ahead to be able to simplify patterns further. It would also deal with cracks that are, say, less than 4 nodes long and simply remove them.&lt;/p&gt;
	&lt;p&gt;Now, I hope to have something like that done for next week (all it really needs is a few hours of solid coding). I've got lots of other stuff to do, like write this whole thing up! I've got 25 pages to write for my literature review, thankfully most of it will be pictures &lt;img src="/img/smilies/icon_biggrin.gif" alt=":D" class="middle" border="0"&gt;&lt;/p&gt;
	&lt;p&gt;Right, gonna get back to it&lt;/p&gt;
	&lt;p&gt;&lt;img src="/img/smilies/icon_wave.gif" alt=":wave:" class="middle" border="0"&gt;&lt;br&gt;
Steve&lt;/p&gt;
	&lt;p&gt;Currently Listening To: The Divine Comedy - Regeneration&lt;br&gt;
Currently Eating: Apples&lt;br&gt;
Currently Watching: Doom, the movie (a bit rubbish really)&lt;br&gt;
Currently Reading: APIs&lt;br&gt;
Weeks Until 1st Handin: 3!!!
&lt;/p&gt;
&lt;p&gt; &lt;small&gt; &lt;a href="http://steelsoftware.blog.co.uk/2005/11/08/week_5_update~292897/#comments"&gt;Comments&lt;/a&gt; &lt;/small&gt; &lt;/p&gt;</default:description><content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[	<p>I've added in some nifty new features this week. The crack pattern looks a whole lot better now too. I've added branches and taken some screenshots at higher resolutions of crack pattern.</p>
	<p>Hi-res image (0.5f between nodes, 61 rows and columns, threshold = 90%)<br>
<a href="http://www.sheffieldhockey.com/yr3proj/hires.gif"><img src="http://www.sheffieldhockey.com/yr3proj/hires.gif" border="0" height="350" width="400"></a></p>
	<p>Hi-res image (0.5f between nodes, 61 rows and columns, threshold = 80%)<br>
<a href="http://www.sheffieldhockey.com/yr3proj/lowerthreshold.gif"><img src="http://www.sheffieldhockey.com/yr3proj/lowerthreshold.gif" border="0" height="350" width="400"></a></p>
	<p>Hi-res image (0.5f between nodes, 61 rows and columns, threshold = 93%)<br>
<a href="http://www.sheffieldhockey.com/yr3proj/higherthreshold.gif"><img src="http://www.sheffieldhockey.com/yr3proj/higherthreshold.gif" border="0" height="350" width="400"></a></p>
	<p>Lo-res image (1.0f between nodes, 41 rows and columns, threshold = 90%)<br>
<a href="http://www.sheffieldhockey.com/yr3proj/loreshithreshold.gif"><img src="http://www.sheffieldhockey.com/yr3proj/loreshithreshold.gif" border="0" height="350" width="400"></a></p>
	<p>As you can see, a threshold of 80% (meaning a branch will occur 20% of the time) leads to the shattering of the object. A higher threshold leads to a much more realistic crack pattern. There is also the problem that most of the time, at least one of the cracks turn and hit another crack within 2 iterations. The only way of fixing this would be to check if the crack path is shorter than 3/4 nodes and if so, ignore lines meeting and accept them as possible nodes. However, this is a bit of a bodge.</p>
	<p>When (read: if) I get the alpha texture implemented (really, if anyone has a clue how i'm gonna do this I'm all ears) the cracks will follow that texture, taking away some of the randomness (some will be left in however). For instance, branches will only occur when there's say a 0.75f white value or higher and even then it's still another 90% chance of it occuring then. Also, if the node is choosing high strength nodes (say anything less than 0.50f) the force will decrease at a higher rate proportional to the strength of the node it is going through.<br>
This is all great in theory, I just have to make it work!!</p>
	<p>The next problem is then the 3D stuff. Creating realistic shards and such. If I have the alpha texture implemented, it would be possible to use the fracture generator to create similar fractures based upon lower resolution alpha textures. However, since I don't have that at the moment I'm down to my backup plan (which may prove to be a better implementation anyway).</p>
	<p>The idea is to take the crack pattern as it is backwards on to the next layer. Then, you start looking up a crack's path, finding simpler ways to get to that point. Say you looked 5 nodes ahead (on a low resolution model of course) and it zig-zagged from (0,0) to (2,2). The simpler way to that would be one vertex at (2,0) or (0,2) depending on the crack's direction. Higher resolution grids would need to read further ahead to be able to simplify patterns further. It would also deal with cracks that are, say, less than 4 nodes long and simply remove them.</p>
	<p>Now, I hope to have something like that done for next week (all it really needs is a few hours of solid coding). I've got lots of other stuff to do, like write this whole thing up! I've got 25 pages to write for my literature review, thankfully most of it will be pictures <img src="/img/smilies/icon_biggrin.gif" alt=":D" class="middle" border="0"></p>
	<p>Right, gonna get back to it</p>
	<p><img src="/img/smilies/icon_wave.gif" alt=":wave:" class="middle" border="0"><br>
Steve</p>
	<p>Currently Listening To: The Divine Comedy - Regeneration<br>
Currently Eating: Apples<br>
Currently Watching: Doom, the movie (a bit rubbish really)<br>
Currently Reading: APIs<br>
Weeks Until 1st Handin: 3!!!
</p>
<p> <small> <a href="http://steelsoftware.blog.co.uk/2005/11/08/week_5_update~292897/#comments">Comments</a> </small> </p>]]></content:encoded></default:item><default:item xmlns:default="http://purl.org/rss/1.0/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" rdf:about="http://steelsoftware.blog.co.uk/2005/11/04/cracked~281842/"><default:title>Cracked</default:title><default:link>http://steelsoftware.blog.co.uk/2005/11/04/cracked~281842/</default:link><dc:date xmlns:dc="http://purl.org/dc/elements/1.1/">2005-11-04T00:42:17+01:00</dc:date><default:description>	&lt;p&gt;Well, I've solved my problems and have a half-decent crack pattern.&lt;br&gt;
The artifact problem was solved by removing the last element from the VertexBuffer (it's a bodge but it works) and moving the device.Transform.World to only run once.&lt;br&gt;
I've used a CrackDirection enumeration to give each Crack a direction so it doesn't go back on itself.&lt;br&gt;
I've changed it so that each crack picks a node and then it moves on to the next one.&lt;br&gt;
I've fed it a list of all the nodes that have already been visited therefore lines now meet and stop.&lt;br&gt;
10% of the time a branch will be created from a Crack and that crack will then be iterated through next time.&lt;br&gt;
All of these changes now form lovely patterns like this:&lt;/p&gt;
	&lt;p&gt;&lt;a href="http://data1.blog.de/blog/s/steelsoftware/img/no-artifacts-.JPG" title="No Artifacts!"&gt;&lt;img src="http://data1.blog.de/blog/s/steelsoftware/img/no-artifacts-_small.jpg" border="0" alt="No Artifacts!"&gt;&lt;/a&gt;&lt;/p&gt;
	&lt;p&gt;The next thing to do is to make the pattern more accurate. I'm doing this with an alpha texture of strength. This is going to be tricky for me as I'm not rendering to a surface, i'm just creating primitives in world space. To get the appropriate pixel i will firstly have to translate the co-ordinates of the texture into world space. Then I'll have to index the texture by node (possible by creating a node class). That would possibly be the best answer (by requiring fewer calls to the texture). This bit is going to be extremely tricky for me cos I have very little clue about texturing etc.&lt;/p&gt;
	&lt;p&gt;After that I then have to make the whole thing 3D and create a 3D texture from it. My first attempt at this will simply be to extrude the pattern backwards. After that it gets more complex. However, that'll come after xmas as the next thing that I want to do is to actually look at a polygon/polygon intersection from this 3D texture space. If I could actually get something to have cracked by christmas I'd be extatic because after that it's all bells n whistles, improving the crack, adding features and proper animations etc. If I can get these basic algorithms working properly in C# I might try and port the code to C++ for performance sakes. But that's a last thing to do kinda thing.&lt;/p&gt;
	&lt;p&gt;Steve&lt;/p&gt;
	&lt;p&gt;Currently Listening To: The Arcade Fire - Funeral&lt;br&gt;
Currently Watching: Lost&lt;br&gt;
Currently Eating: Chocolate covered hobnobs&lt;br&gt;
Currently Reading: DX9 API&lt;br&gt;
Currently Downloading: FEAR (can't wait)
&lt;/p&gt;
&lt;p&gt; &lt;small&gt; &lt;a href="http://steelsoftware.blog.co.uk/2005/11/04/cracked~281842/#comments"&gt;Comments&lt;/a&gt; &lt;/small&gt; &lt;/p&gt;</default:description><content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[	<p>Well, I've solved my problems and have a half-decent crack pattern.<br>
The artifact problem was solved by removing the last element from the VertexBuffer (it's a bodge but it works) and moving the device.Transform.World to only run once.<br>
I've used a CrackDirection enumeration to give each Crack a direction so it doesn't go back on itself.<br>
I've changed it so that each crack picks a node and then it moves on to the next one.<br>
I've fed it a list of all the nodes that have already been visited therefore lines now meet and stop.<br>
10% of the time a branch will be created from a Crack and that crack will then be iterated through next time.<br>
All of these changes now form lovely patterns like this:</p>
	<p><a href="http://data1.blog.de/blog/s/steelsoftware/img/no-artifacts-.JPG" title="No Artifacts!"><img src="http://data1.blog.de/blog/s/steelsoftware/img/no-artifacts-_small.jpg" border="0" alt="No Artifacts!"></a></p>
	<p>The next thing to do is to make the pattern more accurate. I'm doing this with an alpha texture of strength. This is going to be tricky for me as I'm not rendering to a surface, i'm just creating primitives in world space. To get the appropriate pixel i will firstly have to translate the co-ordinates of the texture into world space. Then I'll have to index the texture by node (possible by creating a node class). That would possibly be the best answer (by requiring fewer calls to the texture). This bit is going to be extremely tricky for me cos I have very little clue about texturing etc.</p>
	<p>After that I then have to make the whole thing 3D and create a 3D texture from it. My first attempt at this will simply be to extrude the pattern backwards. After that it gets more complex. However, that'll come after xmas as the next thing that I want to do is to actually look at a polygon/polygon intersection from this 3D texture space. If I could actually get something to have cracked by christmas I'd be extatic because after that it's all bells n whistles, improving the crack, adding features and proper animations etc. If I can get these basic algorithms working properly in C# I might try and port the code to C++ for performance sakes. But that's a last thing to do kinda thing.</p>
	<p>Steve</p>
	<p>Currently Listening To: The Arcade Fire - Funeral<br>
Currently Watching: Lost<br>
Currently Eating: Chocolate covered hobnobs<br>
Currently Reading: DX9 API<br>
Currently Downloading: FEAR (can't wait)
</p>
<p> <small> <a href="http://steelsoftware.blog.co.uk/2005/11/04/cracked~281842/#comments">Comments</a> </small> </p>]]></content:encoded></default:item><default:item xmlns:default="http://purl.org/rss/1.0/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" rdf:about="http://steelsoftware.blog.co.uk/2005/10/29/cracking_the_algorithm~269707/"><default:title>Cracking the Algorithm</default:title><default:link>http://steelsoftware.blog.co.uk/2005/10/29/cracking_the_algorithm~269707/</default:link><dc:date xmlns:dc="http://purl.org/dc/elements/1.1/">2005-10-29T21:19:02+02:00</dc:date><default:description>	&lt;p&gt;Hello there!&lt;/p&gt;
	&lt;p&gt;This update is showing off my first attempts at the cracking algorithm.&lt;/p&gt;
	&lt;p&gt;After quite a bit of trouble with getting DirectX running and getting it to display lines on the screen (instead of the Line class I had to use DrawPrimitives as the Line class worked in screen space not world space) I produced my first crack pattern. That said, it was very poor:&lt;br&gt;
&lt;a href="http://data1.blog.de/blog/s/steelsoftware/img/crack-1st-attempt.JPG" title="1st attempt at crack pattern"&gt;&lt;img src="http://data1.blog.de/blog/s/steelsoftware/img/crack-1st-attempt_small.jpg" border="0" alt="1st attempt at crack pattern"&gt;&lt;/a&gt;&lt;/p&gt;
	&lt;p&gt;After that, I added a few things. The pattern is now based upon the amount of force I give it (currently at 20, reduced by 1 after every node). It halts when it reaches the bounds of the grid and whenever it hits a node already visited by a different crack it stops:&lt;/p&gt;
	&lt;p&gt;&lt;a href="http://data1.blog.de/blog/s/steelsoftware/img/stopatmeetinlines.JPG" title="Updated algorithm"&gt;&lt;img src="http://data1.blog.de/blog/s/steelsoftware/img/stopatmeetinlines_small.jpg" border="0" alt="Updated algorithm"&gt;&lt;/a&gt;&lt;/p&gt;
	&lt;p&gt;You can see that the algorithm isn't particluarly crack-like. The randomness of the node choosing tends to either go in very long straight lines or double back on itself. Also, since one branch of the crack is done at a time you will get one long crack and three other smaller ones as they might collide with each other's paths.&lt;/p&gt;
	&lt;p&gt;There's also the giant problem of artifacts! Those diagonal lines from the ends of the crack to the point of impact should not be there! If anyone knows how to solve this problem I'd be greatful. This is what I'm doing.&lt;/p&gt;
	&lt;p&gt;Each Crack (crack is a class) has its own path (array of co-ordinates) and for each of those I call its DrawCrack method. This method creates a VertexBuffer for that crack, sets the stream to that VertexBuffer, translates the start to (0,0,0) and then uses DrawPrimitives(PrimitiveType.LineStrip) to draw the line, after which it disposes of the VertexBuffer. However, the program seems to be treating it as one big vertexbuffer. I've tried applying each vertexbuffer to a different stream but that doesn't work. I'm quite lost on this one!&lt;/p&gt;
	&lt;p&gt;The other problems will be solved by firstly supplying a node I'd like the crack to reach and it has to get there by any route of its pleasing. The problem of creating all the crack simultaneously may be a little more difficult to solve. It may be possible with a cascading switch but those won't lend themselves well to creating new cracks on the fly.&lt;/p&gt;
	&lt;p&gt;Other than that it runs really really quickly. The fps counter I'm using is actually limited by my screen refresh rate (need to fix that). In conculsion, a rather successful experiment!&lt;/p&gt;
	&lt;p&gt;&lt;img src="/img/smilies/icon_wave.gif" alt=":wave:" class="middle" border="0"&gt;&lt;br&gt;
Steve&lt;/p&gt;
	&lt;p&gt;Currently Listening To: Starsailor - On The Outside (great album)&lt;br&gt;
Currently Watching: Pulp Fiction cos I've never seen it!&lt;br&gt;
Currently Reading: Journals :s&lt;br&gt;
Currently Eating: Anything that hasn't gone off&lt;br&gt;
Currently Playing Hockey: up to 5 times a week!
&lt;/p&gt;
&lt;p&gt; &lt;small&gt; &lt;a href="http://steelsoftware.blog.co.uk/2005/10/29/cracking_the_algorithm~269707/#comments"&gt;Comments&lt;/a&gt; &lt;/small&gt; &lt;/p&gt;</default:description><content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[	<p>Hello there!</p>
	<p>This update is showing off my first attempts at the cracking algorithm.</p>
	<p>After quite a bit of trouble with getting DirectX running and getting it to display lines on the screen (instead of the Line class I had to use DrawPrimitives as the Line class worked in screen space not world space) I produced my first crack pattern. That said, it was very poor:<br>
<a href="http://data1.blog.de/blog/s/steelsoftware/img/crack-1st-attempt.JPG" title="1st attempt at crack pattern"><img src="http://data1.blog.de/blog/s/steelsoftware/img/crack-1st-attempt_small.jpg" border="0" alt="1st attempt at crack pattern"></a></p>
	<p>After that, I added a few things. The pattern is now based upon the amount of force I give it (currently at 20, reduced by 1 after every node). It halts when it reaches the bounds of the grid and whenever it hits a node already visited by a different crack it stops:</p>
	<p><a href="http://data1.blog.de/blog/s/steelsoftware/img/stopatmeetinlines.JPG" title="Updated algorithm"><img src="http://data1.blog.de/blog/s/steelsoftware/img/stopatmeetinlines_small.jpg" border="0" alt="Updated algorithm"></a></p>
	<p>You can see that the algorithm isn't particluarly crack-like. The randomness of the node choosing tends to either go in very long straight lines or double back on itself. Also, since one branch of the crack is done at a time you will get one long crack and three other smaller ones as they might collide with each other's paths.</p>
	<p>There's also the giant problem of artifacts! Those diagonal lines from the ends of the crack to the point of impact should not be there! If anyone knows how to solve this problem I'd be greatful. This is what I'm doing.</p>
	<p>Each Crack (crack is a class) has its own path (array of co-ordinates) and for each of those I call its DrawCrack method. This method creates a VertexBuffer for that crack, sets the stream to that VertexBuffer, translates the start to (0,0,0) and then uses DrawPrimitives(PrimitiveType.LineStrip) to draw the line, after which it disposes of the VertexBuffer. However, the program seems to be treating it as one big vertexbuffer. I've tried applying each vertexbuffer to a different stream but that doesn't work. I'm quite lost on this one!</p>
	<p>The other problems will be solved by firstly supplying a node I'd like the crack to reach and it has to get there by any route of its pleasing. The problem of creating all the crack simultaneously may be a little more difficult to solve. It may be possible with a cascading switch but those won't lend themselves well to creating new cracks on the fly.</p>
	<p>Other than that it runs really really quickly. The fps counter I'm using is actually limited by my screen refresh rate (need to fix that). In conculsion, a rather successful experiment!</p>
	<p><img src="/img/smilies/icon_wave.gif" alt=":wave:" class="middle" border="0"><br>
Steve</p>
	<p>Currently Listening To: Starsailor - On The Outside (great album)<br>
Currently Watching: Pulp Fiction cos I've never seen it!<br>
Currently Reading: Journals :s<br>
Currently Eating: Anything that hasn't gone off<br>
Currently Playing Hockey: up to 5 times a week!
</p>
<p> <small> <a href="http://steelsoftware.blog.co.uk/2005/10/29/cracking_the_algorithm~269707/#comments">Comments</a> </small> </p>]]></content:encoded></default:item><default:item xmlns:default="http://purl.org/rss/1.0/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" rdf:about="http://steelsoftware.blog.co.uk/2005/10/26/the_cracking_algorithm~261876/"><default:title>The Cracking Algorithm</default:title><default:link>http://steelsoftware.blog.co.uk/2005/10/26/the_cracking_algorithm~261876/</default:link><dc:date xmlns:dc="http://purl.org/dc/elements/1.1/">2005-10-26T02:01:05+02:00</dc:date><default:description>	&lt;p&gt;Ok, this one is gonna be a little bit technical, bear with me.&lt;/p&gt;
	&lt;p&gt;Looking at the previous dissertations by Dan Fox and Adam Miller, and by looking at professional attempts at the same task, I've decided that they all have flaws in their projects. The professional ones don't run in real time because they attempt to model the literal interactions between molecules (modelled as verticies inside of an object) based upon very complex physics.&lt;br&gt;
Dan got it wrong by firstly, using Java, secondly, taking a 2D pattern and just extruding it.&lt;br&gt;
Adam got it wrong by attempting a continuous crack pattern in 2D many times and joining them up. This joining of the 2D patterns to make the shards was very complex to do and only ran at 10-12fps.&lt;br&gt;
I'm doing it differently. The technique is a mixture of Dan's and Adam's. It uses Adam's 2.5D approach yet does it discretely like Dan. By this I mean the pattern starts at an impact point and grows in 4 directions towards nodes then grows the patterns out along the nodes depending upon the alpha texture (for strength) at that node.&lt;/p&gt;
	&lt;p&gt;So, how am I generating this pattern?&lt;br&gt;
Well, I can't do it by modelling complex fracture mechanics because that wouldn't be achieveable in real time, nor does it lend itself to standard hollow polygon meshes in normal 3D computer games. Therefore, I have to produce something that looks like a fast fracture crack.&lt;/p&gt;
	&lt;p&gt;In general, a fast fracture follows the path of least resistence in the object. I am modelling the strength of the object as an "alpha texture" so I can measure the amount of white (weakness) at the adjacent nodes and the crack will follow to the node with the greatest amount of white.&lt;br&gt;
To generate the crack splitting and forming new lines, I'm adding a randomness factor in to the algorithm. Therfore, every now and again, perhaps when an area is particularly weak, a new crack path will form.&lt;br&gt;
As my research into crack patterns continues and my testing goes on the crack pattern will become more complex and give a better looking crack pattern.&lt;br&gt;
The question that should come to mind is "But Steve, using a discrete model will give jagged crack patterns and no diagonal lines!" and my reply to that is: With a high density node grid, it is quite possible that the jaggies won't be noticed and diagonal cracks will form. Also, it may be possible later to incorporate diagonal lines into my cracking algorithm as long as they go to a node i'm not sure that it'd matter for the joining of the layers.&lt;/p&gt;
	&lt;p&gt;These additional layers could be produced in a number of ways. It could simply be another crack pattern generated from the first one with lines removed, or the crack pattern could be generated from the simplest one first. It could also be generated using a lower resolution alpha texture.&lt;/p&gt;
	&lt;p&gt;I should have a working crack pattern model by next week. It'll be quite simple at first. What I want is a full program working with a really simple model and then I can get on with improving it, optimizing it and all that other stuff.&lt;/p&gt;
	&lt;p&gt;My current quandry with DirectX is how to get information about the alpha texture back! Looking through the API it would seem that the TextureState.AlphaColor is my best bet, but how do I know exactly where the TextureStateManager is looking? I'll get something done for next week though.&lt;/p&gt;
	&lt;p&gt;Steve&lt;/p&gt;
	&lt;p&gt;Currently Listening To: Ministry Chillout Session 8&lt;br&gt;
Currently Watching: Who's Line is it Anyway&lt;br&gt;
Currently Reading: Journals&lt;br&gt;
Currently Eating: Whatever hasn't gone off&lt;br&gt;
Days I spent playing hockey last week: 5
&lt;/p&gt;
&lt;p&gt; &lt;small&gt; &lt;a href="http://steelsoftware.blog.co.uk/2005/10/26/the_cracking_algorithm~261876/#comments"&gt;Comments&lt;/a&gt; &lt;/small&gt; &lt;/p&gt;</default:description><content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[	<p>Ok, this one is gonna be a little bit technical, bear with me.</p>
	<p>Looking at the previous dissertations by Dan Fox and Adam Miller, and by looking at professional attempts at the same task, I've decided that they all have flaws in their projects. The professional ones don't run in real time because they attempt to model the literal interactions between molecules (modelled as verticies inside of an object) based upon very complex physics.<br>
Dan got it wrong by firstly, using Java, secondly, taking a 2D pattern and just extruding it.<br>
Adam got it wrong by attempting a continuous crack pattern in 2D many times and joining them up. This joining of the 2D patterns to make the shards was very complex to do and only ran at 10-12fps.<br>
I'm doing it differently. The technique is a mixture of Dan's and Adam's. It uses Adam's 2.5D approach yet does it discretely like Dan. By this I mean the pattern starts at an impact point and grows in 4 directions towards nodes then grows the patterns out along the nodes depending upon the alpha texture (for strength) at that node.</p>
	<p>So, how am I generating this pattern?<br>
Well, I can't do it by modelling complex fracture mechanics because that wouldn't be achieveable in real time, nor does it lend itself to standard hollow polygon meshes in normal 3D computer games. Therefore, I have to produce something that looks like a fast fracture crack.</p>
	<p>In general, a fast fracture follows the path of least resistence in the object. I am modelling the strength of the object as an "alpha texture" so I can measure the amount of white (weakness) at the adjacent nodes and the crack will follow to the node with the greatest amount of white.<br>
To generate the crack splitting and forming new lines, I'm adding a randomness factor in to the algorithm. Therfore, every now and again, perhaps when an area is particularly weak, a new crack path will form.<br>
As my research into crack patterns continues and my testing goes on the crack pattern will become more complex and give a better looking crack pattern.<br>
The question that should come to mind is "But Steve, using a discrete model will give jagged crack patterns and no diagonal lines!" and my reply to that is: With a high density node grid, it is quite possible that the jaggies won't be noticed and diagonal cracks will form. Also, it may be possible later to incorporate diagonal lines into my cracking algorithm as long as they go to a node i'm not sure that it'd matter for the joining of the layers.</p>
	<p>These additional layers could be produced in a number of ways. It could simply be another crack pattern generated from the first one with lines removed, or the crack pattern could be generated from the simplest one first. It could also be generated using a lower resolution alpha texture.</p>
	<p>I should have a working crack pattern model by next week. It'll be quite simple at first. What I want is a full program working with a really simple model and then I can get on with improving it, optimizing it and all that other stuff.</p>
	<p>My current quandry with DirectX is how to get information about the alpha texture back! Looking through the API it would seem that the TextureState.AlphaColor is my best bet, but how do I know exactly where the TextureStateManager is looking? I'll get something done for next week though.</p>
	<p>Steve</p>
	<p>Currently Listening To: Ministry Chillout Session 8<br>
Currently Watching: Who's Line is it Anyway<br>
Currently Reading: Journals<br>
Currently Eating: Whatever hasn't gone off<br>
Days I spent playing hockey last week: 5
</p>
<p> <small> <a href="http://steelsoftware.blog.co.uk/2005/10/26/the_cracking_algorithm~261876/#comments">Comments</a> </small> </p>]]></content:encoded></default:item><default:item xmlns:default="http://purl.org/rss/1.0/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" rdf:about="http://steelsoftware.blog.co.uk/2005/10/18/week_3_and_a_website_milestone~242977/"><default:title>Week 3 and a website milestone</default:title><default:link>http://steelsoftware.blog.co.uk/2005/10/18/week_3_and_a_website_milestone~242977/</default:link><dc:date xmlns:dc="http://purl.org/dc/elements/1.1/">2005-10-18T19:02:32+02:00</dc:date><default:description>	&lt;p&gt;SHOE v2.0.0&lt;br&gt;
Added - Email system&lt;br&gt;
Added - Distribution lists&lt;br&gt;
Fixed - Editing fixture details deleting squad availability&lt;br&gt;
Fixed - Numerous strip/addslashes&lt;br&gt;
Fixed - Initial bugs with the email system!&lt;/p&gt;
	&lt;p&gt;The next thing to change is to move the login box, add cookies and more user details. The gallery is the next most important thing, then admin menus, new archives and member lists. I don't have a timeframe for these features, just when I get bored with my dissertation.&lt;/p&gt;
	&lt;p&gt;Dissertation&lt;br&gt;
Well, I've been doing more DirectX stuff, I've got meshes imported, even got a small 'dodger' game going. I've also decided that DX9 was definitly the right way to go. Going through my OpenGL lab classes at uni I've discovered the following things.&lt;br&gt;
OpenGl has no "Vector3" object meaning that co-ordinates need to be inputted manually or multi-dimensional arrays have to be used&lt;br&gt;
OpenGL has no "Mesh" object&lt;br&gt;
OpenGL's way of handling lighting, whilst being similar to DirectX, runs it a lot slower&lt;br&gt;
Now, this last problem may be because of JOGL (Java OpenGL) but the first two aren't. It just seems wrong.&lt;br&gt;
I've finally bought my own copy of the course text book which I have to read religiously. I've been told by next week or at the latest the week after I should have a 2D crack pattern generated. I've got an awful lot of work to do. Hopefully, from now on, whenever I have done some work or discovered a problem, I'll update my blog with some discussion on it.&lt;/p&gt;
	&lt;p&gt;Steve&lt;/p&gt;
	&lt;p&gt;Currently Listening To: Radiohead - Hail To The Thief&lt;br&gt;
Currently Reading: 3D Computer Graphics - Alan Watt&lt;br&gt;
Currently Eating: Bananas&lt;br&gt;
Currently Watching: Superted (did u know that all of the main characters are gay?)&lt;br&gt;
Hours a week I'm supposed to be working on my dissertation: 30-ish
&lt;/p&gt;
&lt;p&gt; &lt;small&gt; &lt;a href="http://steelsoftware.blog.co.uk/2005/10/18/week_3_and_a_website_milestone~242977/#comments"&gt;Comments&lt;/a&gt; &lt;/small&gt; &lt;/p&gt;</default:description><content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[	<p>SHOE v2.0.0<br>
Added - Email system<br>
Added - Distribution lists<br>
Fixed - Editing fixture details deleting squad availability<br>
Fixed - Numerous strip/addslashes<br>
Fixed - Initial bugs with the email system!</p>
	<p>The next thing to change is to move the login box, add cookies and more user details. The gallery is the next most important thing, then admin menus, new archives and member lists. I don't have a timeframe for these features, just when I get bored with my dissertation.</p>
	<p>Dissertation<br>
Well, I've been doing more DirectX stuff, I've got meshes imported, even got a small 'dodger' game going. I've also decided that DX9 was definitly the right way to go. Going through my OpenGL lab classes at uni I've discovered the following things.<br>
OpenGl has no "Vector3" object meaning that co-ordinates need to be inputted manually or multi-dimensional arrays have to be used<br>
OpenGL has no "Mesh" object<br>
OpenGL's way of handling lighting, whilst being similar to DirectX, runs it a lot slower<br>
Now, this last problem may be because of JOGL (Java OpenGL) but the first two aren't. It just seems wrong.<br>
I've finally bought my own copy of the course text book which I have to read religiously. I've been told by next week or at the latest the week after I should have a 2D crack pattern generated. I've got an awful lot of work to do. Hopefully, from now on, whenever I have done some work or discovered a problem, I'll update my blog with some discussion on it.</p>
	<p>Steve</p>
	<p>Currently Listening To: Radiohead - Hail To The Thief<br>
Currently Reading: 3D Computer Graphics - Alan Watt<br>
Currently Eating: Bananas<br>
Currently Watching: Superted (did u know that all of the main characters are gay?)<br>
Hours a week I'm supposed to be working on my dissertation: 30-ish
</p>
<p> <small> <a href="http://steelsoftware.blog.co.uk/2005/10/18/week_3_and_a_website_milestone~242977/#comments">Comments</a> </small> </p>]]></content:encoded></default:item><default:item xmlns:default="http://purl.org/rss/1.0/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" rdf:about="http://steelsoftware.blog.co.uk/2005/10/03/second_week~214268/"><default:title>Second week</default:title><default:link>http://steelsoftware.blog.co.uk/2005/10/03/second_week~214268/</default:link><dc:date xmlns:dc="http://purl.org/dc/elements/1.1/">2005-10-03T16:38:39+02:00</dc:date><default:description>	&lt;p&gt;The Shoe v 1.9.13&lt;br&gt;
&lt;em&gt;The Shoe is the name for the hockey website engine. It stands for Sheffield Hockey Online Extravagence&lt;/em&gt;&lt;br&gt;
Fixed: add/strip slashes and nl2br/br2nl for matches and match reports&lt;br&gt;
Fixed: upcoming fixtures now displays all in the next 7 days, not just the top 3&lt;br&gt;
Changed: You can now change your availability after you have declared it. This also allows you to see the squad status after declaring your availability.&lt;/p&gt;
	&lt;p&gt;The email system &lt;em&gt;is&lt;/em&gt; coming, honest. It's just taking time as we have a few problems to work out.&lt;/p&gt;
	&lt;p&gt;Dissertation&lt;br&gt;
I've written a short description of my project which can be found &lt;a href="http://www.dcs.shef.ac.uk/~u3sw/Project%20Description.doc"&gt;here&lt;/a&gt;. I think I've confused myself here, but the project does sound feasible. I can see it working in my head. However, I've just been to the library to get some books on fracture mechanics (as recommended by the guy who did the last similar project to this) and these books look really horrible. The real problem at the moment is that I've got too much on my plate and I don't know what to tackle first. Do I focus on the DirectX/OpenGL stuff (my lectures use Java/OpenGL) or do I start reading fracture mechanics books?&lt;br&gt;
Personally, I feel that getting an engine running is top priority. I'm currently learning stuff in OpenGL, then trying to replicate that in DX9. I've got my first lab class tomorrow, so after that, I'm gonna try and replicate it. That sounds like a plan!&lt;/p&gt;
	&lt;p&gt;That's about it for now. I've got a new phone, same as the last one but in a much sexier black. Tho I only have this one cos I threw the last one at the wall..... oops!&lt;/p&gt;
	&lt;p&gt;&lt;img src="/img/smilies/icon_wave.gif" alt=":wave:" class="middle" border="0"&gt;&lt;br&gt;
Steve&lt;/p&gt;
	&lt;p&gt;Currently Listening To: Oceansize - Everyone Into Position&lt;br&gt;
Currently Watching: triangles move around a screen&lt;br&gt;
Currently Eating: Varsity burgers... mmmm.....&lt;br&gt;
Currently Reading: Deformation and Fracture Mechanics 4th Edition - Hertzberg
&lt;/p&gt;
&lt;p&gt; &lt;small&gt; &lt;a href="http://steelsoftware.blog.co.uk/2005/10/03/second_week~214268/#comments"&gt;Comments&lt;/a&gt; &lt;/small&gt; &lt;/p&gt;</default:description><content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[	<p>The Shoe v 1.9.13<br>
<em>The Shoe is the name for the hockey website engine. It stands for Sheffield Hockey Online Extravagence</em><br>
Fixed: add/strip slashes and nl2br/br2nl for matches and match reports<br>
Fixed: upcoming fixtures now displays all in the next 7 days, not just the top 3<br>
Changed: You can now change your availability after you have declared it. This also allows you to see the squad status after declaring your availability.</p>
	<p>The email system <em>is</em> coming, honest. It's just taking time as we have a few problems to work out.</p>
	<p>Dissertation<br>
I've written a short description of my project which can be found <a href="http://www.dcs.shef.ac.uk/~u3sw/Project%20Description.doc">here</a>. I think I've confused myself here, but the project does sound feasible. I can see it working in my head. However, I've just been to the library to get some books on fracture mechanics (as recommended by the guy who did the last similar project to this) and these books look really horrible. The real problem at the moment is that I've got too much on my plate and I don't know what to tackle first. Do I focus on the DirectX/OpenGL stuff (my lectures use Java/OpenGL) or do I start reading fracture mechanics books?<br>
Personally, I feel that getting an engine running is top priority. I'm currently learning stuff in OpenGL, then trying to replicate that in DX9. I've got my first lab class tomorrow, so after that, I'm gonna try and replicate it. That sounds like a plan!</p>
	<p>That's about it for now. I've got a new phone, same as the last one but in a much sexier black. Tho I only have this one cos I threw the last one at the wall..... oops!</p>
	<p><img src="/img/smilies/icon_wave.gif" alt=":wave:" class="middle" border="0"><br>
Steve</p>
	<p>Currently Listening To: Oceansize - Everyone Into Position<br>
Currently Watching: triangles move around a screen<br>
Currently Eating: Varsity burgers... mmmm.....<br>
Currently Reading: Deformation and Fracture Mechanics 4th Edition - Hertzberg
</p>
<p> <small> <a href="http://steelsoftware.blog.co.uk/2005/10/03/second_week~214268/#comments">Comments</a> </small> </p>]]></content:encoded></default:item><default:item xmlns:default="http://purl.org/rss/1.0/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" rdf:about="http://steelsoftware.blog.co.uk/2005/09/27/update~203231/"><default:title>Update</default:title><default:link>http://steelsoftware.blog.co.uk/2005/09/27/update~203231/</default:link><dc:date xmlns:dc="http://purl.org/dc/elements/1.1/">2005-09-27T02:27:44+02:00</dc:date><default:description>	&lt;p&gt;Lost&lt;br&gt;
Firstly, I'd like to talk about a little known tv show called "Lost". Some of you may have heard of it. It's the best show I've seen in years. Never has a show kept me guessing as much as this one has. Not since 24 have I been so addicted to tv that I've stayed up till 4 in the morning (and not under the influence of alcohol). I've just finished watching the first series and I've still not had any questions answered. The following paragraph contains many many spoilers and should not be read by the faint hearted.&lt;/p&gt;
	&lt;p&gt;Who the fuck is Lock really? Is he a psychic? Did a few weekends with his "father" really teach him to hunt like that? Is he so utterly wrong about everything that he's going to get everyone killed? The "Others", real people. The island is HUGE, there are going to be others. What do they want with Walt? Why did Ethan take Claire if Walt was the one they wanted. What was Danielle doing with Ethan so that Claire scratched her arm whilst escaping? What do the numbers mean? What is down that hatch? Is there a huge tunnel system? Why has the Black Rock not rotted away like its occupants? Why is there an elaborate mechanical security system which would seem to run all the way round the island. When Lock "saw into the eye of the island" (early episode) why did he not tell them what it looked like? Why did he not tell them it was mechanical? Where is this transmitter if it was apparently inside the Black Rock? Why are there 17th century explosives inside a 15th century ship?&lt;/p&gt;
	&lt;p&gt;I'm getting the first episode of the next series now, apparently it reveals nothing more. They're just teasing us!&lt;/p&gt;
	&lt;p&gt;Sheffieldhockey.com&lt;br&gt;
Today it's had its first really big test. This morning I loaded it up with 400 members and it's coping well. The proper stats aren't in yet but google adsense impressions shows 3700 hits, the day before was 600 and the one before that was 300. I'm so happy that it's working well (though it has taken a full day of admin work to get it right). I've had a chat to my co-developer and we want to make this into a commercial product, however, the "portal" idea will take a substantial user base and currently, licensing the site to every uni in the country is a better idea. The code will take a lot of work, the whole thing needs generalising so that features can be turned on and off at will. It's gonna be hard but they payoff could be massive.&lt;/p&gt;
	&lt;p&gt;New PC&lt;br&gt;
I've got my new computer now, absolute beast of a machine. My old pc, I was running Battlefield 2 on medium/low settings and it was going at about 25fps. This one, running at full detail, will be pushing 50-60fps. Windows hasn't given me any jib at all and it's gone so smoothly that I'm absolutely loving it. My old pc is being retired and sold on. Don't know who to tho. I'll advertise it in the uni. If anyone wants it, £250.&lt;/p&gt;
	&lt;p&gt;Uni&lt;br&gt;
I've only got 4 hours of lectures a week, the rest of it is spent on my dissertation. This will take me all year, so I've gotta learn fast. I've got a book that I'll start reading tomorrow.&lt;/p&gt;
	&lt;p&gt;&lt;img src="/img/smilies/icon_wave.gif" alt=":wave:" class="middle" border="0"&gt;&lt;br&gt;
Steve&lt;/p&gt;
	&lt;p&gt;Currently Listening To: Hot Hot Heat - Elevator&lt;br&gt;
Currently Watching: Lost&lt;br&gt;
Currently Reading: Kick Start Managed DirectX 9 - Tom Miller&lt;br&gt;
Currently Eating: Curry, again and again and again.&lt;br&gt;
Amount of Free Time: Possibly too much!
&lt;/p&gt;
&lt;p&gt; &lt;small&gt; &lt;a href="http://steelsoftware.blog.co.uk/2005/09/27/update~203231/#comments"&gt;Comments&lt;/a&gt; &lt;/small&gt; &lt;/p&gt;</default:description><content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[	<p>Lost<br>
Firstly, I'd like to talk about a little known tv show called "Lost". Some of you may have heard of it. It's the best show I've seen in years. Never has a show kept me guessing as much as this one has. Not since 24 have I been so addicted to tv that I've stayed up till 4 in the morning (and not under the influence of alcohol). I've just finished watching the first series and I've still not had any questions answered. The following paragraph contains many many spoilers and should not be read by the faint hearted.</p>
	<p>Who the fuck is Lock really? Is he a psychic? Did a few weekends with his "father" really teach him to hunt like that? Is he so utterly wrong about everything that he's going to get everyone killed? The "Others", real people. The island is HUGE, there are going to be others. What do they want with Walt? Why did Ethan take Claire if Walt was the one they wanted. What was Danielle doing with Ethan so that Claire scratched her arm whilst escaping? What do the numbers mean? What is down that hatch? Is there a huge tunnel system? Why has the Black Rock not rotted away like its occupants? Why is there an elaborate mechanical security system which would seem to run all the way round the island. When Lock "saw into the eye of the island" (early episode) why did he not tell them what it looked like? Why did he not tell them it was mechanical? Where is this transmitter if it was apparently inside the Black Rock? Why are there 17th century explosives inside a 15th century ship?</p>
	<p>I'm getting the first episode of the next series now, apparently it reveals nothing more. They're just teasing us!</p>
	<p>Sheffieldhockey.com<br>
Today it's had its first really big test. This morning I loaded it up with 400 members and it's coping well. The proper stats aren't in yet but google adsense impressions shows 3700 hits, the day before was 600 and the one before that was 300. I'm so happy that it's working well (though it has taken a full day of admin work to get it right). I've had a chat to my co-developer and we want to make this into a commercial product, however, the "portal" idea will take a substantial user base and currently, licensing the site to every uni in the country is a better idea. The code will take a lot of work, the whole thing needs generalising so that features can be turned on and off at will. It's gonna be hard but they payoff could be massive.</p>
	<p>New PC<br>
I've got my new computer now, absolute beast of a machine. My old pc, I was running Battlefield 2 on medium/low settings and it was going at about 25fps. This one, running at full detail, will be pushing 50-60fps. Windows hasn't given me any jib at all and it's gone so smoothly that I'm absolutely loving it. My old pc is being retired and sold on. Don't know who to tho. I'll advertise it in the uni. If anyone wants it, £250.</p>
	<p>Uni<br>
I've only got 4 hours of lectures a week, the rest of it is spent on my dissertation. This will take me all year, so I've gotta learn fast. I've got a book that I'll start reading tomorrow.</p>
	<p><img src="/img/smilies/icon_wave.gif" alt=":wave:" class="middle" border="0"><br>
Steve</p>
	<p>Currently Listening To: Hot Hot Heat - Elevator<br>
Currently Watching: Lost<br>
Currently Reading: Kick Start Managed DirectX 9 - Tom Miller<br>
Currently Eating: Curry, again and again and again.<br>
Amount of Free Time: Possibly too much!
</p>
<p> <small> <a href="http://steelsoftware.blog.co.uk/2005/09/27/update~203231/#comments">Comments</a> </small> </p>]]></content:encoded></default:item><default:item xmlns:default="http://purl.org/rss/1.0/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" rdf:about="http://steelsoftware.blog.co.uk/2005/09/13/the_future_of_computers~178972/"><default:title>The Future of Computers</default:title><default:link>http://steelsoftware.blog.co.uk/2005/09/13/the_future_of_computers~178972/</default:link><dc:date xmlns:dc="http://purl.org/dc/elements/1.1/">2005-09-13T17:06:11+02:00</dc:date><default:description>	&lt;p&gt;This is a rather broad topic post, I just thought I'd add my two cents on the subject.&lt;/p&gt;
	&lt;p&gt;I've been watching the .net show, reading Meltdown 2005 presentations and generally thinking about where game development is going. The general concensus is that development time and cost is going up and up but sales are rising only a small amount. Only the big games get big sales, graphically beautiful games the same. Limitations on computer power are coming up fast, multi-core is coming along to try and take this problem away, but not everyone can afford it. So, what's Microsoft doing about it?&lt;/p&gt;
	&lt;p&gt;Well, DirectX 10 (shipping with Vista) is going to try and focus on multi-core development and managed code. Managed code, that being .net common language runtime code (develop your code in whatever language you like, the .net CLR transforms that into native code and runs it at about 95-98% efficiency). This means you can start writing in C#, saving you about half of the development time.&lt;/p&gt;
	&lt;p&gt;The multi-core stuff, well, at the moment, multi-core development involves multiple threads inside the same program, Windows of course assigning a different thread to a different CPU/GPU. However, its not just like "I'll put the AI in one thread and the audio in another" because its very likely that they both want to communicate with each other. This is rather difficult to do efficiently, so the workload for a developer increases a lot. DX10 makes this easier (I don't actually know how yet, I think that's undecided). DX10 and Vista (through the Avalon platform) will also be able to push graphical menus onto the GPU, saving the CPU valuable time to do other things. This firstly means that your graphical menus can get much more fancy (have you seen the crystal-like windows in Vista beta 1?) but also that they'll run much much faster. Some GPUs are getting almost as powerful as the CPU these days, especially with SLI/Crossfire solutions.&lt;/p&gt;
	&lt;p&gt;As far as I know, DX10 doesn't have any updates to the Pixel Shader model, or vertex shader, or anything else, it's almost wholly a functionality update, however, for game developers its essential.&lt;/p&gt;
	&lt;p&gt;That's just my 2 cents about what's going to happen. I think its all great! Bring it on!&lt;/p&gt;
	&lt;p&gt;Oh yeah, I've decided to do my 3D project in C#+Managed DX9. I've also started buying in parts for my new pc. This morning, my graphics card arrived... nVidia GeForce 6800GT 256MB... mmmhmmm. The final system (i'll buy the rest of it as soon as Athlon X2 3800+ prices come down a bit) will be:&lt;br&gt;
Athlon X2 3800+ (Dual Core)&lt;br&gt;
EpoX 9NPA+SLI Motherboard&lt;br&gt;
GeForce 6800GT 256MB&lt;br&gt;
250GB SATA2 HDD w/NCQ (recommended for Vista)&lt;br&gt;
1GB PC3200 DDR RAM&lt;br&gt;
New case with 500W PSU&lt;/p&gt;
	&lt;p&gt;It's a PC that'll last me quite a while (especially since I can add another gfx card later &lt;img src="/img/smilies/icon_biggrin.gif" alt=":D" class="middle" border="0"&gt;). It also means there's a pc for sale, athlon xp 2400+, Radeon 9800Pro 128MB, 512MB RAM, 40GB+80GB HDDs, case with 400W PSU, Gigabyte GA-7VRXP motherboard. Approx price, £250.&lt;/p&gt;
	&lt;p&gt;I'm such a geek, I know.&lt;br&gt;
&lt;img src="/img/smilies/icon_wave.gif" alt=":wave:" class="middle" border="0"&gt;&lt;br&gt;
Steve&lt;/p&gt;
	&lt;p&gt;Currently Listening To: David Gray (new alubm is v good)&lt;br&gt;
Currently Watching: The Island (Scarlett Johansson &lt;img src="/img/smilies/icon_biggrin.gif" alt=":D" class="middle" border="0"&gt;)&lt;br&gt;
Currently Reading: DX9 API&lt;br&gt;
Currently Eating: Apples&lt;br&gt;
Hours of sleep/night: Not enough
&lt;/p&gt;
&lt;p&gt; &lt;small&gt; &lt;a href="http://steelsoftware.blog.co.uk/2005/09/13/the_future_of_computers~178972/#comments"&gt;Comments&lt;/a&gt; &lt;/small&gt; &lt;/p&gt;</default:description><content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[	<p>This is a rather broad topic post, I just thought I'd add my two cents on the subject.</p>
	<p>I've been watching the .net show, reading Meltdown 2005 presentations and generally thinking about where game development is going. The general concensus is that development time and cost is going up and up but sales are rising only a small amount. Only the big games get big sales, graphically beautiful games the same. Limitations on computer power are coming up fast, multi-core is coming along to try and take this problem away, but not everyone can afford it. So, what's Microsoft doing about it?</p>
	<p>Well, DirectX 10 (shipping with Vista) is going to try and focus on multi-core development and managed code. Managed code, that being .net common language runtime code (develop your code in whatever language you like, the .net CLR transforms that into native code and runs it at about 95-98% efficiency). This means you can start writing in C#, saving you about half of the development time.</p>
	<p>The multi-core stuff, well, at the moment, multi-core development involves multiple threads inside the same program, Windows of course assigning a different thread to a different CPU/GPU. However, its not just like "I'll put the AI in one thread and the audio in another" because its very likely that they both want to communicate with each other. This is rather difficult to do efficiently, so the workload for a developer increases a lot. DX10 makes this easier (I don't actually know how yet, I think that's undecided). DX10 and Vista (through the Avalon platform) will also be able to push graphical menus onto the GPU, saving the CPU valuable time to do other things. This firstly means that your graphical menus can get much more fancy (have you seen the crystal-like windows in Vista beta 1?) but also that they'll run much much faster. Some GPUs are getting almost as powerful as the CPU these days, especially with SLI/Crossfire solutions.</p>
	<p>As far as I know, DX10 doesn't have any updates to the Pixel Shader model, or vertex shader, or anything else, it's almost wholly a functionality update, however, for game developers its essential.</p>
	<p>That's just my 2 cents about what's going to happen. I think its all great! Bring it on!</p>
	<p>Oh yeah, I've decided to do my 3D project in C#+Managed DX9. I've also started buying in parts for my new pc. This morning, my graphics card arrived... nVidia GeForce 6800GT 256MB... mmmhmmm. The final system (i'll buy the rest of it as soon as Athlon X2 3800+ prices come down a bit) will be:<br>
Athlon X2 3800+ (Dual Core)<br>
EpoX 9NPA+SLI Motherboard<br>
GeForce 6800GT 256MB<br>
250GB SATA2 HDD w/NCQ (recommended for Vista)<br>
1GB PC3200 DDR RAM<br>
New case with 500W PSU</p>
	<p>It's a PC that'll last me quite a while (especially since I can add another gfx card later <img src="/img/smilies/icon_biggrin.gif" alt=":D" class="middle" border="0">). It also means there's a pc for sale, athlon xp 2400+, Radeon 9800Pro 128MB, 512MB RAM, 40GB+80GB HDDs, case with 400W PSU, Gigabyte GA-7VRXP motherboard. Approx price, £250.</p>
	<p>I'm such a geek, I know.<br>
<img src="/img/smilies/icon_wave.gif" alt=":wave:" class="middle" border="0"><br>
Steve</p>
	<p>Currently Listening To: David Gray (new alubm is v good)<br>
Currently Watching: The Island (Scarlett Johansson <img src="/img/smilies/icon_biggrin.gif" alt=":D" class="middle" border="0">)<br>
Currently Reading: DX9 API<br>
Currently Eating: Apples<br>
Hours of sleep/night: Not enough
</p>
<p> <small> <a href="http://steelsoftware.blog.co.uk/2005/09/13/the_future_of_computers~178972/#comments">Comments</a> </small> </p>]]></content:encoded></default:item><default:item xmlns:default="http://purl.org/rss/1.0/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" rdf:about="http://steelsoftware.blog.co.uk/2005/09/05/dx9_or_opengl~164092/"><default:title>DX9 or OpenGL</default:title><default:link>http://steelsoftware.blog.co.uk/2005/09/05/dx9_or_opengl~164092/</default:link><dc:date xmlns:dc="http://purl.org/dc/elements/1.1/">2005-09-05T19:12:11+02:00</dc:date><default:description>	&lt;p&gt;I got an email back from my tutor in the response to "which programming language and renderer would you recommend?" I suggested that I use C# and OpenGL, the response I got back was:&lt;/p&gt;
	&lt;blockquote&gt;&lt;p&gt;C and OpenGL would be fine. And I'm sure C# and OpenGL will be fine too. As would C# and DX9. I don't mind what language combination you choose really. It will be the graphics ideas that are most important.&lt;br&gt;
Sumo would most probably prefer C, DX9 and HLSL &lt;em&gt;(High Level Shader Language - Steve)&lt;/em&gt;. But likewise the graphics ideas are what are important.&lt;/p&gt;&lt;/blockquote&gt;
	&lt;p&gt;Which is really noncommital. I have decided to go with C# because&lt;br&gt;
1. I know Java and C# is very similar&lt;br&gt;
2. You can import C and C++ libraries in if you need to&lt;br&gt;
3. Doing 3D work in C# is actually going to be quite experimental, almost making it more suitable for a dissertation!&lt;/p&gt;
	&lt;p&gt;However, I still don't know whether to go with OpenGL or DirectX 9. Since I'm going for C#, I'm more inclined to go for DX9 as they work together really well and there's a lot of support for it through the MSDN. OpenGL requires a small C++ class for it to work but from then it's easy. I'm also being taught OpenGL in lectures and there are far more resources for it in the university library (even if they are really old).&lt;/p&gt;
	&lt;p&gt;I've been informed by a coursemate who has dabbled with this stuff before that I should go DX9 cos of its ease of use with C#, and that OpenGL and DX9 can co-exist in my mind. Also, I'll only be doing manipulation of untextured objects so I don't need most of the advanced functions of the languages, but DX9 is better for what I want. I'm gonna try and contact my friend at Microsoft and see what his take is, and then get them to recommend a book for me. Gamedev.net recommends a book on managed DX9 which has 100% C# code. I need to start re-reading my C# book again I think.&lt;/p&gt;
	&lt;p&gt;Oh, I also made some minor CSS changes to the hockey site, not worthy of a version number.&lt;/p&gt;
	&lt;p&gt;&lt;img src="/img/smilies/icon_wave.gif" alt=":wave:" class="middle" border="0"&gt;&lt;br&gt;
Steve&lt;/p&gt;
	&lt;p&gt;Currently Listening To: Guillemots - Made Up Lovesong #43 (limited edition ep, bloody amazing)&lt;br&gt;
Currently Reading: "The Red Book" OpenGL Programming Guide&lt;br&gt;
Currently Watching: Spongebob Squarepants &lt;img src="/img/smilies/icon_biggrin.gif" alt=":D" class="middle" border="0"&gt;&lt;br&gt;
Currently Eating: Steak pie &lt;img src="/img/smilies/icon_surprised.gif" alt=":o" class="middle" border="0"&gt;&lt;br&gt;
Days Till Housemates and Therefore Sanity Returns: 2
&lt;/p&gt;
&lt;p&gt; &lt;small&gt; &lt;a href="http://steelsoftware.blog.co.uk/2005/09/05/dx9_or_opengl~164092/#comments"&gt;Comments&lt;/a&gt; &lt;/small&gt; &lt;/p&gt;</default:description><content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[	<p>I got an email back from my tutor in the response to "which programming language and renderer would you recommend?" I suggested that I use C# and OpenGL, the response I got back was:</p>
	<blockquote><p>C and OpenGL would be fine. And I'm sure C# and OpenGL will be fine too. As would C# and DX9. I don't mind what language combination you choose really. It will be the graphics ideas that are most important.<br>
Sumo would most probably prefer C, DX9 and HLSL <em>(High Level Shader Language - Steve)</em>. But likewise the graphics ideas are what are important.</p></blockquote>
	<p>Which is really noncommital. I have decided to go with C# because<br>
1. I know Java and C# is very similar<br>
2. You can import C and C++ libraries in if you need to<br>
3. Doing 3D work in C# is actually going to be quite experimental, almost making it more suitable for a dissertation!</p>
	<p>However, I still don't know whether to go with OpenGL or DirectX 9. Since I'm going for C#, I'm more inclined to go for DX9 as they work together really well and there's a lot of support for it through the MSDN. OpenGL requires a small C++ class for it to work but from then it's easy. I'm also being taught OpenGL in lectures and there are far more resources for it in the university library (even if they are really old).</p>
	<p>I've been informed by a coursemate who has dabbled with this stuff before that I should go DX9 cos of its ease of use with C#, and that OpenGL and DX9 can co-exist in my mind. Also, I'll only be doing manipulation of untextured objects so I don't need most of the advanced functions of the languages, but DX9 is better for what I want. I'm gonna try and contact my friend at Microsoft and see what his take is, and then get them to recommend a book for me. Gamedev.net recommends a book on managed DX9 which has 100% C# code. I need to start re-reading my C# book again I think.</p>
	<p>Oh, I also made some minor CSS changes to the hockey site, not worthy of a version number.</p>
	<p><img src="/img/smilies/icon_wave.gif" alt=":wave:" class="middle" border="0"><br>
Steve</p>
	<p>Currently Listening To: Guillemots - Made Up Lovesong #43 (limited edition ep, bloody amazing)<br>
Currently Reading: "The Red Book" OpenGL Programming Guide<br>
Currently Watching: Spongebob Squarepants <img src="/img/smilies/icon_biggrin.gif" alt=":D" class="middle" border="0"><br>
Currently Eating: Steak pie <img src="/img/smilies/icon_surprised.gif" alt=":o" class="middle" border="0"><br>
Days Till Housemates and Therefore Sanity Returns: 2
</p>
<p> <small> <a href="http://steelsoftware.blog.co.uk/2005/09/05/dx9_or_opengl~164092/#comments">Comments</a> </small> </p>]]></content:encoded></default:item><default:item xmlns:default="http://purl.org/rss/1.0/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" rdf:about="http://steelsoftware.blog.co.uk/2005/09/02/v1_9_11_and_opengl~158412/"><default:title>v1.9.11 and OpenGL</default:title><default:link>http://steelsoftware.blog.co.uk/2005/09/02/v1_9_11_and_opengl~158412/</default:link><dc:date xmlns:dc="http://purl.org/dc/elements/1.1/">2005-09-02T18:53:46+02:00</dc:date><default:description>	&lt;p&gt;v1.9.11&lt;br&gt;
Added: lost password feature&lt;br&gt;
Fixed: Minor CSS bugs&lt;br&gt;
Fixed: Features overrunning below the featured image&lt;/p&gt;
	&lt;p&gt;Step:&lt;br&gt;
Last time i'll talk about step. I did my presentation, everyone thought I did well, everyone except the judges. So, I didn't win jack squat so I'm even more pissed off at my payment for step. All over and done with though.&lt;/p&gt;
	&lt;p&gt;Dissertation:&lt;br&gt;
I've been investigating 3D renderers and all that, and have recently been put off by C++ (Windows Vista is mostly coded in C#, a much easier language). So, I went looking for the easiest option (I have so much to learn the easiest way will be the best cos I have to learn so much for all this). C# works very well with managed DirectX 9, it kinda works with OpenGL but there's a small workaround to get it started. C++ works very very well with either DX9 or OpenGL. DX9 is more complex than OpenGL as it's a Microsoft Language but it goes to a higher level, there's not a huge difference between them. However, at uni, we're taught OpenGL with Java (Java being criminally slow thanks to the Virtual Machine (VM)).&lt;br&gt;
I'd like to do it in C#, I'm gonna send an email stating my case. Also, I'd love to be able to all my coursework for that module in C# instead of Java. That might shake the department to finally moving to C# and away from Java.&lt;/p&gt;
	&lt;p&gt;I've gotten an OpenGL book out of the library to get me started. I'll try it their way to start with (C... urgh) and then try it out in C#. See how it goes.&lt;/p&gt;
	&lt;p&gt;Steve&lt;/p&gt;
	&lt;p&gt;Currently Listening To: Editors - The Back Room&lt;br&gt;
Currently Watching: High Fidelity&lt;br&gt;
Currently Reading: OpenGL Primer by Edward Angel&lt;br&gt;
Currently Eating: BBQ Pringles&lt;br&gt;
BitTorrent downloads currently running: 15&lt;/p&gt;
&lt;p&gt; &lt;small&gt; &lt;a href="http://steelsoftware.blog.co.uk/2005/09/02/v1_9_11_and_opengl~158412/#comments"&gt;Comments&lt;/a&gt; &lt;/small&gt; &lt;/p&gt;</default:description><content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[	<p>v1.9.11<br>
Added: lost password feature<br>
Fixed: Minor CSS bugs<br>
Fixed: Features overrunning below the featured image</p>
	<p>Step:<br>
Last time i'll talk about step. I did my presentation, everyone thought I did well, everyone except the judges. So, I didn't win jack squat so I'm even more pissed off at my payment for step. All over and done with though.</p>
	<p>Dissertation:<br>
I've been investigating 3D renderers and all that, and have recently been put off by C++ (Windows Vista is mostly coded in C#, a much easier language). So, I went looking for the easiest option (I have so much to learn the easiest way will be the best cos I have to learn so much for all this). C# works very well with managed DirectX 9, it kinda works with OpenGL but there's a small workaround to get it started. C++ works very very well with either DX9 or OpenGL. DX9 is more complex than OpenGL as it's a Microsoft Language but it goes to a higher level, there's not a huge difference between them. However, at uni, we're taught OpenGL with Java (Java being criminally slow thanks to the Virtual Machine (VM)).<br>
I'd like to do it in C#, I'm gonna send an email stating my case. Also, I'd love to be able to all my coursework for that module in C# instead of Java. That might shake the department to finally moving to C# and away from Java.</p>
	<p>I've gotten an OpenGL book out of the library to get me started. I'll try it their way to start with (C... urgh) and then try it out in C#. See how it goes.</p>
	<p>Steve</p>
	<p>Currently Listening To: Editors - The Back Room<br>
Currently Watching: High Fidelity<br>
Currently Reading: OpenGL Primer by Edward Angel<br>
Currently Eating: BBQ Pringles<br>
BitTorrent downloads currently running: 15</p>
<p> <small> <a href="http://steelsoftware.blog.co.uk/2005/09/02/v1_9_11_and_opengl~158412/#comments">Comments</a> </small> </p>]]></content:encoded></default:item><default:item xmlns:default="http://purl.org/rss/1.0/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" rdf:about="http://steelsoftware.blog.co.uk/2005/08/30/project_prioritisaiton~150664/"><default:title>Project prioritisaiton</default:title><default:link>http://steelsoftware.blog.co.uk/2005/08/30/project_prioritisaiton~150664/</default:link><dc:date xmlns:dc="http://purl.org/dc/elements/1.1/">2005-08-30T00:49:22+02:00</dc:date><default:description>	&lt;p&gt;Now that STEP has finished (only the presentation to present) I have to focus in on my other projects.&lt;/p&gt;
	&lt;p&gt;&lt;strong&gt;Hockey Website/Unisport&lt;/strong&gt;&lt;br&gt;
Firstly decided whether unisport will rear its head this year. If yes then a full roadmap will be drawn up and a rather relaxed timescale will be drawn up for site improvements so as not to clash with my dissertation. Things will follow that and everything will go along. Oh yeah, and I'll actually tell you what unisport is!&lt;/p&gt;
	&lt;p&gt;If no, then unisport will be postponed a year. Any additional features to the hockey site will be added at holiday times only and these will not be major features, just small things and bugfixes.&lt;/p&gt;
	&lt;p&gt;&lt;strong&gt;Dissertation&lt;/strong&gt;&lt;br&gt;
Well, I've gotta really start learning my stuff now. I think this is now my priority, especially since the hockey site is now stable. Such a shame that at the moment I don't really understand it. I'm sure i'll post my musings on it here later. I'm going to concentrate on C++ first, then do the 3D theory, mostly cos I'll be doing the theory inside uni modules. No need to do it twice, but I will have to stay ahead of everyone &lt;img src="/img/smilies/icon_smile.gif" alt=":)" class="middle" border="0"&gt;&lt;/p&gt;
	&lt;p&gt;It could be a really great year. I'll keep you posted&lt;/p&gt;
	&lt;p&gt;Steve&lt;/p&gt;
	&lt;p&gt;Currently Watching: Tarrant on TV&lt;br&gt;
Currently Listening To: Bloc Party (STILL)&lt;br&gt;
Currently Reading: 3D Graphics Theory&lt;br&gt;
Currently Eating: Picnic food&lt;br&gt;
Days till freshers week: 21
&lt;/p&gt;
&lt;p&gt; &lt;small&gt; &lt;a href="http://steelsoftware.blog.co.uk/2005/08/30/project_prioritisaiton~150664/#comments"&gt;Comments&lt;/a&gt; &lt;/small&gt; &lt;/p&gt;</default:description><content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[	<p>Now that STEP has finished (only the presentation to present) I have to focus in on my other projects.</p>
	<p><strong>Hockey Website/Unisport</strong><br>
Firstly decided whether unisport will rear its head this year. If yes then a full roadmap will be drawn up and a rather relaxed timescale will be drawn up for site improvements so as not to clash with my dissertation. Things will follow that and everything will go along. Oh yeah, and I'll actually tell you what unisport is!</p>
	<p>If no, then unisport will be postponed a year. Any additional features to the hockey site will be added at holiday times only and these will not be major features, just small things and bugfixes.</p>
	<p><strong>Dissertation</strong><br>
Well, I've gotta really start learning my stuff now. I think this is now my priority, especially since the hockey site is now stable. Such a shame that at the moment I don't really understand it. I'm sure i'll post my musings on it here later. I'm going to concentrate on C++ first, then do the 3D theory, mostly cos I'll be doing the theory inside uni modules. No need to do it twice, but I will have to stay ahead of everyone <img src="/img/smilies/icon_smile.gif" alt=":)" class="middle" border="0"></p>
	<p>It could be a really great year. I'll keep you posted</p>
	<p>Steve</p>
	<p>Currently Watching: Tarrant on TV<br>
Currently Listening To: Bloc Party (STILL)<br>
Currently Reading: 3D Graphics Theory<br>
Currently Eating: Picnic food<br>
Days till freshers week: 21
</p>
<p> <small> <a href="http://steelsoftware.blog.co.uk/2005/08/30/project_prioritisaiton~150664/#comments">Comments</a> </small> </p>]]></content:encoded></default:item><default:item xmlns:default="http://purl.org/rss/1.0/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" rdf:about="http://steelsoftware.blog.co.uk/2005/08/23/v1_9_10/"><default:title>V1.9.10</default:title><default:link>http://steelsoftware.blog.co.uk/2005/08/23/v1_9_10/</default:link><dc:date xmlns:dc="http://purl.org/dc/elements/1.1/">2005-08-23T18:33:23+02:00</dc:date><default:description>	&lt;p&gt;I've kinda overstepped the mark. Ah well,&lt;/p&gt;
	&lt;p&gt;SUHC v1.9.10&lt;br&gt;
Added: Thumbnails&lt;br&gt;
Fixed: RSS&lt;br&gt;
Fixed: Birthdays&lt;br&gt;
Changed: upcoming events are now the next 3 events no matter how far away they are&lt;/p&gt;
	&lt;p&gt;Thumbnails are working well, website traffic is up and yet bandwidth usage is down. A great result.&lt;/p&gt;
	&lt;p&gt;The picture gallery really really needs re-doing. It's very ugly and needs a good kick up the backside. Then it needs a full re-write. I might try and find some free gallery classes for now and then customise them to my own needs.&lt;/p&gt;
	&lt;p&gt;A new gallery is due in the v2.1.0 update.&lt;/p&gt;
	&lt;p&gt;STEP:&lt;br&gt;
My report and presentation are going well. I have got to finish them tonight. I've been doing press releases and brochures for the past few days, all good.&lt;/p&gt;
	&lt;p&gt;The website will FINALLY get launched tomorrow, pending press release acceptance and a final check.&lt;/p&gt;
	&lt;p&gt;I'd also like to wish my friend Emily a happy birthday &lt;img src="/img/smilies/icon_smile.gif" alt=":)" class="middle" border="0"&gt;&lt;/p&gt;
	&lt;p&gt;&lt;img src="/img/smilies/icon_wave.gif" alt=":wave:" class="middle" border="0"&gt;&lt;br&gt;
Steve&lt;/p&gt;
	&lt;p&gt;Currently Listening To: Editors - The Back Room&lt;br&gt;
Currently Watching: The Family Guy Movie&lt;br&gt;
Currently Reading: Press releases &lt;img src="/img/smilies/icon_sad.gif" alt=":(" class="middle" border="0"&gt;&lt;br&gt;
Currently Eating: spag bog&lt;br&gt;
Days until STEP finishes: 3 &lt;img src="/img/smilies/icon_biggrin.gif" alt=":D" class="middle" border="0"&gt;
&lt;/p&gt;
&lt;p&gt; &lt;small&gt; &lt;a href="http://steelsoftware.blog.co.uk/2005/08/23/v1_9_10/#comments"&gt;Comments&lt;/a&gt; &lt;/small&gt; &lt;/p&gt;</default:description><content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[	<p>I've kinda overstepped the mark. Ah well,</p>
	<p>SUHC v1.9.10<br>
Added: Thumbnails<br>
Fixed: RSS<br>
Fixed: Birthdays<br>
Changed: upcoming events are now the next 3 events no matter how far away they are</p>
	<p>Thumbnails are working well, website traffic is up and yet bandwidth usage is down. A great result.</p>
	<p>The picture gallery really really needs re-doing. It's very ugly and needs a good kick up the backside. Then it needs a full re-write. I might try and find some free gallery classes for now and then customise them to my own needs.</p>
	<p>A new gallery is due in the v2.1.0 update.</p>
	<p>STEP:<br>
My report and presentation are going well. I have got to finish them tonight. I've been doing press releases and brochures for the past few days, all good.</p>
	<p>The website will FINALLY get launched tomorrow, pending press release acceptance and a final check.</p>
	<p>I'd also like to wish my friend Emily a happy birthday <img src="/img/smilies/icon_smile.gif" alt=":)" class="middle" border="0"></p>
	<p><img src="/img/smilies/icon_wave.gif" alt=":wave:" class="middle" border="0"><br>
Steve</p>
	<p>Currently Listening To: Editors - The Back Room<br>
Currently Watching: The Family Guy Movie<br>
Currently Reading: Press releases <img src="/img/smilies/icon_sad.gif" alt=":(" class="middle" border="0"><br>
Currently Eating: spag bog<br>
Days until STEP finishes: 3 <img src="/img/smilies/icon_biggrin.gif" alt=":D" class="middle" border="0">
</p>
<p> <small> <a href="http://steelsoftware.blog.co.uk/2005/08/23/v1_9_10/#comments">Comments</a> </small> </p>]]></content:encoded></default:item><default:item xmlns:default="http://purl.org/rss/1.0/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" rdf:about="http://steelsoftware.blog.co.uk/2005/08/16/version_1_9_9/"><default:title>Version 1.9.9</default:title><default:link>http://steelsoftware.blog.co.uk/2005/08/16/version_1_9_9/</default:link><dc:date xmlns:dc="http://purl.org/dc/elements/1.1/">2005-08-16T18:33:23+02:00</dc:date><default:description>	&lt;p&gt;Okay, the reason for the huge version change is that the only thing left to do is fix the email system (Paddy's job) and do thumbnails (more on that later). Development accelerated very rapidly&lt;/p&gt;
	&lt;p&gt;SUHC v1.9.9&lt;br&gt;
Added: User birthdays back in&lt;br&gt;
Added: Poll using Advanced PHP Poll (free)&lt;br&gt;
Added: RSS feeds for News and Events&lt;br&gt;
Added: Message after login telling you that you've been selected for a match&lt;br&gt;
Fixed: CSS - background colour now closer to the gray of the navbars&lt;br&gt;
Fixed: News articles not updating&lt;/p&gt;
	&lt;p&gt;Regarding bandwidth usage:&lt;br&gt;
Looking at the &lt;a href="http://www.sheffieldhockey.com/webstat"&gt;hockey site's webstats&lt;/a&gt; you can see that we've used 80Mb of bandwidth in a little over a week. That's with an average of 30 users a day. What's gonna happen when 160 users look to see if they've been picked on a Monday morning. What about people uploading pictures from the socials on a Thursday? It's gonna use so much bandwidth and frankly, the site might not take it. I've located the main use of bandwidth and that is, of course, images. Currently, there are no thumbnail images for pre-viewing, slowing the site down and using huge amounts of bandwidth. Therefore, a thumbnail system has to be built.&lt;br&gt;
The way I'm gonna do it is simple, make a lower resoultion copy and put it in a folder called thumbs inside the user's img directory. The thumbnail path is simply the image path but with an additional thumb in it. However, I'll still have to ammend the database to make queries to it faster, but it's a small price to pay.&lt;/p&gt;
	&lt;p&gt;STEP:&lt;br&gt;
website nearly completed, was recently described as "so 1990s". Giant who cares.&lt;/p&gt;
	&lt;p&gt;Steve&lt;/p&gt;
	&lt;p&gt;Currently Listening To: Bloc Party&lt;br&gt;
Currently Watching: 24 Season 3&lt;br&gt;
Currently Reading: The newspaper&lt;br&gt;
Currently Eating: Whatever my housemate puts infront of me
&lt;/p&gt;
&lt;p&gt; &lt;small&gt; &lt;a href="http://steelsoftware.blog.co.uk/2005/08/16/version_1_9_9/#comments"&gt;Comments&lt;/a&gt; &lt;/small&gt; &lt;/p&gt;</default:description><content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[	<p>Okay, the reason for the huge version change is that the only thing left to do is fix the email system (Paddy's job) and do thumbnails (more on that later). Development accelerated very rapidly</p>
	<p>SUHC v1.9.9<br>
Added: User birthdays back in<br>
Added: Poll using Advanced PHP Poll (free)<br>
Added: RSS feeds for News and Events<br>
Added: Message after login telling you that you've been selected for a match<br>
Fixed: CSS - background colour now closer to the gray of the navbars<br>
Fixed: News articles not updating</p>
	<p>Regarding bandwidth usage:<br>
Looking at the <a href="http://www.sheffieldhockey.com/webstat">hockey site's webstats</a> you can see that we've used 80Mb of bandwidth in a little over a week. That's with an average of 30 users a day. What's gonna happen when 160 users look to see if they've been picked on a Monday morning. What about people uploading pictures from the socials on a Thursday? It's gonna use so much bandwidth and frankly, the site might not take it. I've located the main use of bandwidth and that is, of course, images. Currently, there are no thumbnail images for pre-viewing, slowing the site down and using huge amounts of bandwidth. Therefore, a thumbnail system has to be built.<br>
The way I'm gonna do it is simple, make a lower resoultion copy and put it in a folder called thumbs inside the user's img directory. The thumbnail path is simply the image path but with an additional thumb in it. However, I'll still have to ammend the database to make queries to it faster, but it's a small price to pay.</p>
	<p>STEP:<br>
website nearly completed, was recently described as "so 1990s". Giant who cares.</p>
	<p>Steve</p>
	<p>Currently Listening To: Bloc Party<br>
Currently Watching: 24 Season 3<br>
Currently Reading: The newspaper<br>
Currently Eating: Whatever my housemate puts infront of me
</p>
<p> <small> <a href="http://steelsoftware.blog.co.uk/2005/08/16/version_1_9_9/#comments">Comments</a> </small> </p>]]></content:encoded></default:item><default:item xmlns:default="http://purl.org/rss/1.0/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" rdf:about="http://steelsoftware.blog.co.uk/2005/08/12/v1_7_5/"><default:title>v1.7.5</default:title><default:link>http://steelsoftware.blog.co.uk/2005/08/12/v1_7_5/</default:link><dc:date xmlns:dc="http://purl.org/dc/elements/1.1/">2005-08-12T21:11:42+02:00</dc:date><default:description>	&lt;p&gt;SUHC v1.7.5&lt;br&gt;
ADDED: User account activation&lt;br&gt;
Fixed: Top Scorers&lt;/p&gt;
	&lt;p&gt;Yup, I'm running out of things to change! The jump in bugfix version reflect the major size of the account activation challenge (actually it went through first time but never mind). I've sent out emails to the whole club who are in the database (147 people so far) and only got 10 back from not having an email address or having an incorrect address.&lt;/p&gt;
	&lt;p&gt;I'm now playing with web polls. I've found a great set of scripts called PhpPoll so I'll be using that until I write my own (could be all year &lt;img src="/img/smilies/graylaugh.gif" alt=":))" class="middle" border="0"&gt;&lt;/p&gt;
	&lt;p&gt;One thing about the activation that did bother me though. The tutorial I found to help me do the en/decoding told me to use the md5 hash on the password and then use md5 again on the resulting hash to get the original back. This is clearly wrong as it just generates the hash of the hash string! Therefore base64 is used for each of the password and userid strings. If anyone knows why it was recommended that I md5 something twice I'd be greatful to know. The article i used can be found &lt;a href="http://www.olate.com/articles/232"&gt;here&lt;/a&gt;&lt;/p&gt;
	&lt;p&gt;&lt;img src="/img/smilies/icon_wave.gif" alt=":wave:" class="middle" border="0"&gt;&lt;br&gt;
Steve&lt;/p&gt;
	&lt;p&gt;Currently Listening To: Coldplay - Fix You&lt;br&gt;
Currently Watching: England beat Australia &lt;img src="/img/smilies/icon_biggrin.gif" alt=":D" class="middle" border="0"&gt;&lt;br&gt;
Currently Eating: leftovers (yes, still)&lt;br&gt;
Currently Reading: boring press releases and not much else&lt;br&gt;
Currently Bored at Work: 60% of the time
&lt;/p&gt;
&lt;p&gt; &lt;small&gt; &lt;a href="http://steelsoftware.blog.co.uk/2005/08/12/v1_7_5/#comments"&gt;Comments&lt;/a&gt; &lt;/small&gt; &lt;/p&gt;</default:description><content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[	<p>SUHC v1.7.5<br>
ADDED: User account activation<br>
Fixed: Top Scorers</p>
	<p>Yup, I'm running out of things to change! The jump in bugfix version reflect the major size of the account activation challenge (actually it went through first time but never mind). I've sent out emails to the whole club who are in the database (147 people so far) and only got 10 back from not having an email address or having an incorrect address.</p>
	<p>I'm now playing with web polls. I've found a great set of scripts called PhpPoll so I'll be using that until I write my own (could be all year <img src="/img/smilies/graylaugh.gif" alt=":))" class="middle" border="0"></p>
	<p>One thing about the activation that did bother me though. The tutorial I found to help me do the en/decoding told me to use the md5 hash on the password and then use md5 again on the resulting hash to get the original back. This is clearly wrong as it just generates the hash of the hash string! Therefore base64 is used for each of the password and userid strings. If anyone knows why it was recommended that I md5 something twice I'd be greatful to know. The article i used can be found <a href="http://www.olate.com/articles/232">here</a></p>
	<p><img src="/img/smilies/icon_wave.gif" alt=":wave:" class="middle" border="0"><br>
Steve</p>
	<p>Currently Listening To: Coldplay - Fix You<br>
Currently Watching: England beat Australia <img src="/img/smilies/icon_biggrin.gif" alt=":D" class="middle" border="0"><br>
Currently Eating: leftovers (yes, still)<br>
Currently Reading: boring press releases and not much else<br>
Currently Bored at Work: 60% of the time
</p>
<p> <small> <a href="http://steelsoftware.blog.co.uk/2005/08/12/v1_7_5/#comments">Comments</a> </small> </p>]]></content:encoded></default:item><default:item xmlns:default="http://purl.org/rss/1.0/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" rdf:about="http://steelsoftware.blog.co.uk/2005/08/10/v1_7_0/"><default:title>v1.7.0</default:title><default:link>http://steelsoftware.blog.co.uk/2005/08/10/v1_7_0/</default:link><dc:date xmlns:dc="http://purl.org/dc/elements/1.1/">2005-08-10T18:24:43+02:00</dc:date><default:description>	&lt;p&gt;SUHC v1.7.0&lt;br&gt;
Added: Scorers to match reports&lt;br&gt;
Added: Top Scorer appears on main page&lt;br&gt;
Added: Fixtures Secretary as new position so they can add fixtures themselves&lt;/p&gt;
	&lt;p&gt;Why the minor version jump?&lt;br&gt;
Although email is not finished it is not being developed by myself, other parts are. Therefore I'm gonna keep raising the minor version as features go in. Scorers is in 1.7.0 therefore it's jumped. Also, the top scorer is now on the front page, nice little feature I thought.&lt;/p&gt;
	&lt;p&gt;STEP:&lt;br&gt;
I chaired a meeting today. Showed the finished website to the boss, he liked it (i think). I've got lots of stuff to follow up on, will say more soon.&lt;/p&gt;
	&lt;p&gt;Finished Dan Brown's Digital Fortress today. I wasn't exactly disappointed, it was worse than Angels and Demons though, and I'm also shocked that none of the "greatest minds in the US" had never done chemistry. I guessed the final code within seconds, it took them 10 minutes!! Losers&lt;/p&gt;
	&lt;p&gt;Steve&lt;/p&gt;
	&lt;p&gt;Currently Listening To: Feeder - Echo Park&lt;br&gt;
Currently Watching: TV again!&lt;br&gt;
Currently Reading: Nothing&lt;br&gt;
Currently Eating: leftovers&lt;br&gt;
Final date on the SUHC Roadmap: - September 2007
&lt;/p&gt;
&lt;p&gt; &lt;small&gt; &lt;a href="http://steelsoftware.blog.co.uk/2005/08/10/v1_7_0/#comments"&gt;Comments&lt;/a&gt; &lt;/small&gt; &lt;/p&gt;</default:description><content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[	<p>SUHC v1.7.0<br>
Added: Scorers to match reports<br>
Added: Top Scorer appears on main page<br>
Added: Fixtures Secretary as new position so they can add fixtures themselves</p>
	<p>Why the minor version jump?<br>
Although email is not finished it is not being developed by myself, other parts are. Therefore I'm gonna keep raising the minor version as features go in. Scorers is in 1.7.0 therefore it's jumped. Also, the top scorer is now on the front page, nice little feature I thought.</p>
	<p>STEP:<br>
I chaired a meeting today. Showed the finished website to the boss, he liked it (i think). I've got lots of stuff to follow up on, will say more soon.</p>
	<p>Finished Dan Brown's Digital Fortress today. I wasn't exactly disappointed, it was worse than Angels and Demons though, and I'm also shocked that none of the "greatest minds in the US" had never done chemistry. I guessed the final code within seconds, it took them 10 minutes!! Losers</p>
	<p>Steve</p>
	<p>Currently Listening To: Feeder - Echo Park<br>
Currently Watching: TV again!<br>
Currently Reading: Nothing<br>
Currently Eating: leftovers<br>
Final date on the SUHC Roadmap: - September 2007
</p>
<p> <small> <a href="http://steelsoftware.blog.co.uk/2005/08/10/v1_7_0/#comments">Comments</a> </small> </p>]]></content:encoded></default:item></rdf:RDF>
