SceneKit : Une idée pour mettre un node en orbite autour d'un autre?

berfisberfis Membre
juillet 2014 modifié dans API AppKit #1

Bonjour,


 


Je me suis mis en tête de simuler un système solaire avec SpriteKit " je ne sais pas si c'est une bonne idée, en fait. Mais le "monde physique" de ce framework me titille ces jours-ci.


 


Le premier souci, c'est que le "monde" de SpriteKit possède bien une force de gravitation, mais dirigée vers le bas. Très bien pour des vues de profil, tout ça, mais dès qu'on se perche au-dessus, on se retrouve à  proximité d'un trou noir...


 


Reste la possibilité de supprimer la gravité, mais on a beau doter les nodes d'une masse phénoménale, ils ne s'attirent pas les uns les autres, comme ce serait le cas dans l'espace.


 


Donc que faire? J'ai le choix, selon moi, entre deux possibilités:


- déplacer le node "satellite" à  chaque update sur une trajectoire circulaire;


- lier les nodes à  l'aide d'un "joint" qui représenterait la force de gravitation; on verrait l'étoile osciller si la planète est assez massive.  ^_^


 


Il reste pas mal de choses auxquelles faire attention, comme le linearDamping, et calculer des vecteurs de force assez piqués des hannetons.


 


Reste une ultime possibilité ( :/ ): laisser tomber SpriteKit.


 


Mais j'ai peut-être mal googlé. L'un d'entre vous a-t-il un lien à  m'indiquer ? D'avance merci.


Mots clés:

Réponses

  • Tu es bien certain que SpriteKit est bien le plus adapté pour ça ? SceneKit semble mieux vu que c'est de la 3D et que tu cherche à  reproduire un système où les force s'exercent en 3D non ?


  • berfisberfis Membre
    juillet 2014 modifié #3

    Houla SceneKit c'est un peu plus compliqué -- moi qui ai déjà  de la peine avec deux dimensions... Mais c'est vrai que ça aurait plus d'allure. Merci Yoann.


     


    Je m'en vais donc explorer un peu ce truc-là . C'est embêtant, parce qu'il s'agit d'une doc préliminaire et très fragmentaire... Espérons qu'Apple développera aussi un "Metal" pour OSX...


     


    Affaire à  suivre. I'll be back.



  • Espérons qu'Apple développera aussi un "Metal" pour OSX...



    Mieux vaudrait ne pas y compter, Metal fonctionne sur des GPU "maison" dont ils connaissent tous les rouages. Ce qui est très très loin d'être le cas des produits Nv & Amd (Intel partage beaucoup plus mais c'est pas gagné pour autant). Voilà  pourquoi on aura encore besoin de driver et de lib adaptées aux GPUs PC.


     


    Pour ce qui est du reste j'avais pas compris que tu voulais le faire en 2D ! Je rejoins Yoann et t'invite à  rajouter une 3ème dimension ça sera plus propre et potentiellement plus aisé. Pour la doc regarde les vidéos de la WWDC. (https://developer.apple.com/videos/wwdc/2014/)


  • La doc de SceneKit existe depuis l'an dernier sur OS X et viens d'être porté sur iOS avec iOS 8. Quelques projet s'en sont servit et regarde le sample code de cette année et l'année précédente. Les slides sont écris en SceneKit, tu trouvera ton bonheur.


  • Ah oui c'est la doc 10.10 qui est fragmentaire. J'ai utilisé un SCNVector3zero en 10.9, ce qui m'apprendra à  lire le "Available" plus attentivement (les deprecated sont en rouge, c'est plus facile).  ^_^


     


    Effectivement SceneKit a de la gueule et on peut transférer sans trop de problème l'expérience de SpriteKit. L'essentiel est d'avoir un bon modèle hiérarchique dans les nodes. Après, on peut s'amuser à  créer des orbites elliptiques et faire varier la vitesse de rotation (merci Kepler)  :*


     


    Merci à  tous!


  • Et quoi même pas une petite vidéo ou un .app en lien pour nous montrer ce que ça donne ?  ^_^


  • Attends, Pyroh, maintenant le me bats avec ma hiérarchie de nodes pour éviter qu'un satellite soit affecté par la rotation de son parent (la planète).


     


    Imagine un vaisseau spatial (ou une caméra) en rotation autour du satellite d'une planète qui tourne autour de son soleil, tout ce système en rotation autour du centre galactique (pour s'arrêter là ) et tu conviendras que je dois passer un peu de temps sur mon modèle histoire de bien factoriser le travail de chaque classe...  -_-


     


    Je livre une video dès que j'ai un truc qui marche, promis.


     


    P.S. une idée pour un fond stellaire, genre un node centré, immobile, de grande dimension avec une texture d'étoiles? J'ai utilisé ce truc avec Lightwave...  




  • P.S. une idée pour un fond stellaire, genre un node centré, immobile, de grande dimension avec une texture d'étoiles? J'ai utilisé ce truc avec Lightwave...  




     


    Bah modélise les autres soleils ^^

  • Yeah... quelques milliers devraient suffire  :*


  • DrakenDraken Membre
    juillet 2014 modifié #11
    N'oublie pas le star destroyer, l'étoile noire et l'escadron de X-wings. Sans oublier une cabine téléphonique ..
  • Et le BSG "mon préféré" tu aurais tort de l'oublier.


     


    Voilà  où j'en suis. Pas de playground pour l'instant.


  • DrakenDraken Membre
    juillet 2014 modifié #13
    T'es fan des grandes blondes en robe rouge ?
  • Rhhââââ le Numéro Six  <3 </p>



  • Et le BSG "mon préféré" tu aurais tort de l'oublier.


     


    Voilà  où j'en suis. Pas de playground pour l'instant.




     


    La terre devrait être connecté au soleil et non au centre de gravité de l'univers.


     


    Tu as regardé la session de la WWDC ? Tu as un sample code pour ce cas justement.

  • Exact, Yoann. Chaque node possède deux propriétés, un centre de rotation (parent) placé sur les coordonnées de son "attracteur" et un centre de gravité (une propriété) qui peut servir d'attracteur à  ses satellites. Ces centres servent de repères pour les BodyNodes, et ils sont immobiles.


     


    L'autre possibilité, plus honnête, serait de faire appel aux physical fields, et de doter les corps stellaires d'une vitesse radiale. J'aurais la satisfaction de voir mes planètes tomber sur le soleil ou s'échapper dans l'espace, selon les erreurs commises, jusqu'a l'obtention d'un système stable " ce qui serait une fiction, puisque notre propre système est chaotique par nature.


  • Classe ^^


    Faut vraiment que je m'y mette à  SceneKit ^^


  • Ah vraiment pas mal la petite vidéo :D 


    Pour le fond cherche sur google image (tu trouve des trucs du genre, un 2/3 tweaks et c'est bon, tu peux même faire du parallaxe avec pour les mouvements de caméra, l'image est grande)


     


    Beau boulot, continue 


  • Bonjour à  tous.


     


    Utiliser depuis des années des logiciels 3D (Bryce, Lightwave, Blender, Maya etc.) permet de prendre Scene Kit en main beaucoup plus rapidement " Apple a eu le bon goût de ne pas réinventer la poudre en cette occasion.


     


    J'ai résolu le problème du fond stellaire de la façon suivante " mon "truc" utilisé avec Lightwave pour limiter le nombre de polygones dans une scène:



    SCNNode *stars = [SCNNode node];
    [scene.rootNode addChildNode:stars];

    SCNMaterial *surface = [SCNMaterial material];
    surface.doubleSided = YES;
    surface.diffuse.contents = [NSColor blackColor];
    surface.emission.contents = [NSImage imageNamed:@Stars];
    stars.geometry = [SCNSphere sphereWithRadius:1000];
    stars.geometry.firstMaterial = surface;

    - J'utilise la propriété "émission" du matériel pour les étoiles, voilà  pourquoi les étoiles brillent même s'il n'y a aucune lumière dans la scène. Cela m'autorise à  mettre le "diffuse" à  blackColor.


    - La sphère créée doit être "doubleSided" puisqu'on est à  l'intérieur. Sinon, les étoiles seraient invisibles.


    - Je crée la sphère avec des dimensions assez grandes pour que la parallaxe soit réaliste.


     


    Dernière chose à  laquelle penser: modifier les limites par défaut de la caméra (le champ de vision maximal est à  100, ce qui n'atteint pas les limites de ma sphère étoilée):



    cameraNode.camera.zFar = 2000.0;

    Restent à  faire:


    1. pouvoir cliquer sur les objets pour en faire le "target" de la caméra


    2. ajouter des éléments graphiques comme un halo autour du soleil, les orbites, etc...


     


    Et on obtient un mini-Celestia en quelques dizaines de lignes de code... transférable facilement sur iOS en plus...  <_<


     


  • Pas mal du tout !
  • berfisberfis Membre
    juillet 2014 modifié #21

    Le Galactica va rajouter une pétée de polygones.


     


    Voilà  pour les orbites (mais je pense qu'un toroid serait plus élégant):



    SCNNode *orbit = [SCNNode node];
    orbit.geometry = [SCNBox boxWithWidth:axis*2 height:0.0 length:axis*2 chamferRadius:0.0];
    SCNMaterial *orbitTrail = [SCNMaterial material];
    orbitTrail.transparent.contents = [NSImage imageNamed:@Orbit];
    orbitTrail.emission.contents = [NSImage imageNamed:@Orbit];
    orbitTrail.doubleSided = YES;
    orbit.geometry.firstMaterial = orbitTrail;
    [pivotPoint addChildNode:orbit];

  • DrakenDraken Membre
    juillet 2014 modifié #22
    Galactica, le gros truc rectangulaire moche, en forme de carton à  chaussures ? Pas énormément ! Quelques centaines au plus. C'est rien par rapport au modèle 3D d'une créature organique ou d'un vaisseau avec des courbes.


  • Pas énormément ! Quelques centaines au plus.




    Plus de 3 millions de polygones dans le modèle utilisé dans la série...  :lol:

  • Tu comptes faire un jeu en réalité virtuelle où le joueur pourra se promener sur la coque en scaphandre et inspecter chaque boulon ?
  • berfisberfis Membre
    juillet 2014 modifié #25

    Non je rigole, il n'y a pas de vaisseau prévu pour l'instant. Mais par contre, j'imagine assez bien une image de cockpit en avant-plan histoire de bien immerger le joueur...


     


    En attendant, les SCNTorus m'ont convaincu, c'est nettement plus "propre":



    SCNNode *orbit = [SCNNode node];
    orbit.geometry = [SCNTorus torusWithRingRadius:axis pipeRadius:0.01];
    [(SCNTorus*)orbit.geometry setRingSegmentCount:128];
    SCNMaterial *orbitTrail = [SCNMaterial material];
    orbitTrail.diffuse.contents = [NSColor blueColor];
    orbitTrail.emission.contents = [NSColor blueColor];
    orbit.geometry.firstMaterial = orbitTrail;
    [pivotPoint addChildNode:orbit];

    Maintenant, Draken, encore une critique du Galactica et je te dépêche une pleine escadrille de Vipers...  :D

  • DrakenDraken Membre
    juillet 2014 modifié #26
    Même pas peur ! Tu peux m'envoyer toutes les escadrilles de vipers ET la flotte de guerre scylon au complet. Moi je me contente d'un seul vaisseau, le UOG En Dehors des Contraintes Morales Habituelles (classe Abominator). C'est un navire de guerre de la culture. La culture (googoliser "wiki culture SF" pour plus d'infos) c'est des gens considérant que les planètes sont d'amusants artéfacts préhistorique. Quand ils s'installent quelque part c'est sur des orbitales, des anneaux artificiels d'une circonférence de 10 millions de km et de 6.000 km de large.
  • J'ai lu la plupart des bouquins de Banks, j'ai beaucoup aimé les IA qui se donnent à  elles-mêmes des noms farfelus... Pas besoin de Google pour ça... -_-


  • DrakenDraken Membre
    juillet 2014 modifié #28
    J'adore l'IA dont le nom est Lisez Le Mode d'Emploi !

    Le vaisseau En Dehors Des Contraintes Morales Habituelles est l'un des personnages principaux du livre Les Enfers Virtuels. Et il mérite bien son nom ..

    (Je me doutais bien que tu connaissais les livres de la Culture, un classique pour les amateurs de SF. Mais quand j'écris sur un forum je pense à  toutes les personnes pouvant lire les posts, y compris les novices en SF).
  • Des nouvelles de Deep Space: le fond d'étoiles est beaucoup plus élégant comme ça:



    NSImage *stars =[NSImage imageNamed:@Stars];
    self.myScene.background.contents=@[;stars,stars,stars,stars,stars,stars];

    Vu que SCNScene fabrique une skybox à  partir de six images (ici une seule suffira).


Connectez-vous ou Inscrivez-vous pour répondre.