Na het bouwen van globale planetaire ringen ga ik nu beginnen aan het maken van de ringen als je jezelf erin bevind. Dit alles alá Infinity: The Quest for Earth. Ik heb al het een en ander doorgedacht maar een aantal dingen kom ik niet aan uit:
De ringen hangen om een planeet in en bestaan uit een 2d disc-vormige mesh. De mesh heeft een start punt vanaf het centrum van de planeet en daarnaast een diameter van de ring. totale diameter van de ene naar de andere kant van de mesh is dus: (start + diameter) * 2.
Nu wil ik als LOD systeem gebruik maken van een octree, omdat het een 3d veld betreft. De 2d mesh van de ring is goed genoeg omdat die dikte slechts een paar kilometer is. Kom je dichterbij dan geven de daadwerkelijke asteroiden-meshes het volume.
Het octree-centre komt dus op de plek van het centrum van de planeet, en heeft het de hele ring erin zitten. Ik subdivide de tree op basis van afstand tot een octree node, en deze tree heeft een fixed aantal levels (bv: max 10). Hoe dieper je komt hoe kleiner de extra gespawnde asteroiden worden: dieperin de ring -> meer detail!
De octree zorgt op deze manier dus voor LOD, omdat de 100.000en asteroiden nooit allemaal tegelijk te renderen zijn.
Het spawnen van de asteroiden is echter het probleem. Ik wil graag dat de asteroiden daadwerkelijk aan de hand van tijd op een bepaalde plek te vinden zijn. Een 'random' seed gaat dus niet werken. Als ik 1 asteroide rood maak dan wil ik kunnen uitrekenen waar deze zich op een gesteld tijdstip bevind! Het probleem is: hoe weet ik zonder dat ik de snelheid etc van de asteroid heb, in welk deel van de octree deze zich bevind!?
* Eerst had ik het idee om de gehele octree een draaiing mee te geven. Probleem hierbij is dat dan elke asteroide met dezelfde snelheid beweegt. Dit is iets wat ik zeker niet wil, omdat het geen realistisch beeld gaat geven.
En dit is waar ik vast zit:
* De planetaire ring heeft geen fixed aantal asteroiden, waarschijnlijk is de enige oplossing om een ´max´ aantal stenen per compleet octree level te geven en te zorgen dat dit altijd dezelfde asteroiden worden, adhv een pseudo/random nummer.
* probleem hierbij is: hoe kan ik weten dat als ik aan de hand van een pseudo-random nummer een asteroide genereer, dat deze zich daadwerkelijk binnen de bound van de octree bevind?
* Updaten: hoe update ik deze tree? Voor elke steen iedere frame/paar frames kijken of ze zich nog in de bounds bevinden: if not->kill asteroid.
Ik zal vast veel te moeilijk denken bij dit probleem...
De ringen hangen om een planeet in en bestaan uit een 2d disc-vormige mesh. De mesh heeft een start punt vanaf het centrum van de planeet en daarnaast een diameter van de ring. totale diameter van de ene naar de andere kant van de mesh is dus: (start + diameter) * 2.
Nu wil ik als LOD systeem gebruik maken van een octree, omdat het een 3d veld betreft. De 2d mesh van de ring is goed genoeg omdat die dikte slechts een paar kilometer is. Kom je dichterbij dan geven de daadwerkelijke asteroiden-meshes het volume.
Het octree-centre komt dus op de plek van het centrum van de planeet, en heeft het de hele ring erin zitten. Ik subdivide de tree op basis van afstand tot een octree node, en deze tree heeft een fixed aantal levels (bv: max 10). Hoe dieper je komt hoe kleiner de extra gespawnde asteroiden worden: dieperin de ring -> meer detail!
De octree zorgt op deze manier dus voor LOD, omdat de 100.000en asteroiden nooit allemaal tegelijk te renderen zijn.
Het spawnen van de asteroiden is echter het probleem. Ik wil graag dat de asteroiden daadwerkelijk aan de hand van tijd op een bepaalde plek te vinden zijn. Een 'random' seed gaat dus niet werken. Als ik 1 asteroide rood maak dan wil ik kunnen uitrekenen waar deze zich op een gesteld tijdstip bevind! Het probleem is: hoe weet ik zonder dat ik de snelheid etc van de asteroid heb, in welk deel van de octree deze zich bevind!?
* Eerst had ik het idee om de gehele octree een draaiing mee te geven. Probleem hierbij is dat dan elke asteroide met dezelfde snelheid beweegt. Dit is iets wat ik zeker niet wil, omdat het geen realistisch beeld gaat geven.
En dit is waar ik vast zit:
* De planetaire ring heeft geen fixed aantal asteroiden, waarschijnlijk is de enige oplossing om een ´max´ aantal stenen per compleet octree level te geven en te zorgen dat dit altijd dezelfde asteroiden worden, adhv een pseudo/random nummer.
* probleem hierbij is: hoe kan ik weten dat als ik aan de hand van een pseudo-random nummer een asteroide genereer, dat deze zich daadwerkelijk binnen de bound van de octree bevind?
* Updaten: hoe update ik deze tree? Voor elke steen iedere frame/paar frames kijken of ze zich nog in de bounds bevinden: if not->kill asteroid.
Ik zal vast veel te moeilijk denken bij dit probleem...