<?xml version="1.0" encoding="utf-8"?><?xml-stylesheet type='text/xsl' href='http://chayce-za.spaces.live.com/mmm2008-07-24_12.50/rsspretty.aspx?rssquery=en-US;http%3a%2f%2fchayce-za.spaces.live.com%2fcategory%2fPopulous__x3%2bBorn%2bAgain%2ffeed.rss' version='1.0'?><rss version="2.0" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:msn="http://schemas.microsoft.com/msn/spaces/2005/rss" xmlns:live="http://schemas.microsoft.com/live/spaces/2006/rss" xmlns:dcterms="http://purl.org/dc/terms/" xmlns:cf="http://www.microsoft.com/schemas/rss/core/2005" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Jonathan Chayce Dickinson: Populous: Born Again</title><description /><link>http://chayce-za.spaces.live.com/?_c11_BlogPart_BlogPart=blogview&amp;_c=BlogPart&amp;partqs=catPopulous__x3%2bBorn%2bAgain</link><language>en-US</language><pubDate>Tue, 27 May 2008 12:26:12 GMT</pubDate><lastBuildDate>Tue, 27 May 2008 12:26:12 GMT</lastBuildDate><generator>Microsoft Spaces v1.1</generator><docs>http://www.rssboard.org/rss-specification</docs><ttl>60</ttl><cf:parentRSS>http://chayce-za.spaces.live.com/blog/feed.rss</cf:parentRSS><live:type>blogcategory</live:type><live:identity><live:id>-5288244965216934031</live:id><live:alias>chayce-za</live:alias></live:identity><cf:listinfo><cf:group ns="http://schemas.microsoft.com/live/spaces/2006/rss" element="typelabel" label="Type" /><cf:group ns="http://schemas.microsoft.com/live/spaces/2006/rss" element="tag" label="Tag" /><cf:group element="category" label="Category" /><cf:sort element="pubDate" label="Date" data-type="date" default="true" /><cf:sort element="title" label="Title" data-type="string" /><cf:sort ns="http://purl.org/rss/1.0/modules/slash/" element="comments" label="Comments" data-type="number" /></cf:listinfo><item><title>Populous: Born Again</title><link>http://chayce-za.spaces.live.com/Blog/cns!B69C6138F2FF2771!196.entry</link><description>&lt;h1&gt;Introduction&lt;/h1&gt;
&lt;p&gt;I am writing a re-make of Populous: The Beginning. A legendary game that was years ahead of it's time (what more do you expect from Peter Molyneux?).

&lt;h2&gt;Initial Ideas&lt;/h2&gt;
&lt;p&gt;Populous is played on a height-mapped sphere, and I am not willing to fore-go that concept: but it does pose a few problems.

&lt;h3&gt;Singularity&lt;/h3&gt;
&lt;p&gt;This is what people call the convergence at the north and south poles of a sphere. There is a solution that is very effective, described by &lt;a target="_blank" href="http://ozviz.wasp.uwa.edu.au/~pbourke/texture_colour/spheremap/"&gt;Paul Borke&lt;/a&gt;. In his implementation he pre-treats the texture. I am going to derive these values at runtime, for both the heightmap and the texture. By doing this I will gain the advantage that the landscape can have a higher resolution than the actual heightmap used (important for my CLOD algorithm).

&lt;h3&gt;CLOD&lt;/h3&gt;
&lt;p&gt;All the CLOD algorithms (for landscapes) I have seen so far use Geospheres, which I am now certain are not nessecary. They use sub-divisions and are a nightmare to implement.
&lt;p&gt;The camera is on a fixed-orbit around the planet (maybe a zoom function would be present). Because of this we know what angle the camera is at (its position is derived from the angles, rather than the other way round). Thus we know at exactly which point we need greatest detail.

&lt;p&gt;How do we have a CLOD sphere? It is rather easy in fact. We specify how many vertices we want along each edge and by pre-treating that value with a sin/cos function we can have it tighten near the camera, while still keeping the number of target vertices. This is how we do it on one axis:

&lt;pre&gt;&lt;code&gt;input: float num;&lt;br&gt;input: float width;&lt;br&gt;const: PiO2 = Pi / 2;&lt;br&gt;&lt;br&gt;float widthMult = width / (numHoriz * PiO2);&lt;br&gt;float curX = 0;&lt;br&gt;&lt;br&gt;for(float vertX = 0; vertX &amp;lt; numHoriz; u++)&lt;br&gt;{&lt;br&gt;    float angle = Pi * vertX / numHoriz;&lt;br&gt;    float step = Sin(angle) * widthMult;&lt;br&gt;    curX = curX + step;&lt;br&gt;    // curX is in range 0:width&lt;br&gt;}&lt;br&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Take that curX and map it to a sphere and you will have a CLOD sphere.

&lt;h3&gt;Let's Go!!!&lt;/h3&gt;

&lt;p&gt;I am going to see if I can implement this beast using &lt;a target="_blank" href="http://axiomengine.sourceforge.net/wiki/index.php/Main_Page"&gt;Axiom &lt;/a&gt;(a C# engine that is a port from OGRE).&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=-5288244965216934031&amp;page=RSS%3a+Populous%3a+Born+Again&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=chayce-za.spaces.live.com&amp;amp;GT1=chayce-za"&gt;</description><comments>http://chayce-za.spaces.live.com/Blog/cns!B69C6138F2FF2771!196.entry#comment</comments><guid isPermaLink="true">http://chayce-za.spaces.live.com/Blog/cns!B69C6138F2FF2771!196.entry</guid><pubDate>Tue, 27 May 2008 09:01:58 GMT</pubDate><slash:comments>1</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://chayce-za.spaces.live.com/blog/cns!B69C6138F2FF2771!196/comments/feed.rss</wfw:commentRss><wfw:comment>http://chayce-za.spaces.live.com/Blog/cns!B69C6138F2FF2771!196.entry#comment</wfw:comment><dcterms:modified>2008-05-27T09:01:58Z</dcterms:modified></item></channel></rss>