-
[DX9 C++] Fond étoilé
J'essaie de faire un fond étoilé pour un jeu de vaisseau spatial. J'ai donc commencé par faire simple en reprennant un code. Celui ci subdivise l'espace en plusieur cube afin d'afficher seulement ceux qui sont proches.
Afin de simuler un mouvement, j'ai fait en sorte que chaque étoiles soit une ligne qui s'agrandit ou rétrécis grâce aux vertex shader.
Le résultat est relativement acceptable cependant j'ai deux problèmes, le premier étant la taille de mon vertex buffer (17000 vertices quand même) alors qu'avec seulement des points on doit aussi pouvoir le faire (donc seulement 7000), le second étant que le fichier effect ne se soucie pas de l'offset que j'ai spécifié dans le DrawPrimitive, et il affiche mes 17000 lignes, ceci est sans doute du au fait que dans le set stream je met l'intégralité du VertexBuffer.
Bref je suis certain que ma solution actuelle est mauvaise et malgré mes recherches sur google, je ne trouve pas de renseignement sur le sujet. Si quelqu'un pourrait me renseigner j'en serais bien heureux.
-
Je n'arrive pas trop à voir ce que tu veux faire :?
Tes etoiles bougent de quelle manière ?
Mouvement vers la caméra quand celles ci avancent ou mouvement avec la caméra quand celles-ci tournent ? Ou les 2 ?
Je pourrais certainement te donner quelques indications quand j'aurais une idée plus précise de l'animation que tu comptes réaliser ;)
-
En gros je veux faire le même effet que dans les jeux habituels dans l'espace. C'est à dire les étoiles qui sont des points lorsqu'on reste immobile deviennent des lignes lorsqu'on bouge. Je ne sais pas si c'est réaliste (je ne suis jamais allé dans l'espace) mais c'est joli.
Sinon, actuellement j'ai plein d'étoiles positionnées qui ne bougent pas. L'effet de ligne est produit par les deux vertices qui composent l'étoile comme j'avais expliqué. Je donne simplement au vertex shader la velocité de la position de la camera pour savoir dans quelle direction orienté mes lignes: un des vertices vas dans un sens l'autre dans le sens opposé.
En fait, je crois que cette solution est mauvaise et qu'il doit etre possible grâce au pixel shader de faire la ligne a partir d'un pixel simple.
-
Ah oui je vois maintenant... comme ça, à froid, je pense que le mieux est de gérer ca avec un système de particules. 1 emitter est 1 etoile et quand un mouvement est appliqué les particules sont émises dans le sens inverse du déplacement... tu émet x particules (3, 5 ou 10 par exemple) quand la caméra se deplace suivant la vitesse ou la longeur de la trainée que tu veux donner en appliquant un alpha de plus en plus grand suivant l'age de la particule. Je pense que tu peux obtenir de bon resultats visuels en procédant ainsi tout en gardant des perfs dans la mesure ou tes particules auront une texture de taille trés trés réduite.
Mais si j'ai une autre idée quand j'y aurais mieux réfléchi je te ferais signe ;)
-
Avec deux vertices par étoiles j'ai déjà 17000 vertices, je n'ose même pas imaginer avec 3, 5 ou 10 vertices. Enfin tu m'as donné une idée avec ce système de particule.
En effet, je pense placer un systeme de particule en face de la camera. Chaque particule étant une étoile. Ca va simplifier la division spatial qui en plus limitait mon aire de déplacement.
Par contre je me vois mal emmettre des lignes et encore moins des systèmes de particules. Enfin je vais voir d'abord se que ça donne avec un simple systeme avec une texture d'étoile.
-
Je comprends pas que tu doives utiliser autant de vertices pour un simple affichage d'etoiles :? Si j'en crois ce que tu écris tu devrais donc en théorie avoir 4250 étoiles en simultané sur l'écran dans ta scène. J'ai fait il y a quelques temps une scène de ce genre et si j'avais 1000 vertices à l'écran pour gérer l'effet c'était le bout du monde
-
Tout dépends des échelles que tu as fixé, si tu veux un monde très grand avec un far plane pour la projection pas trop grand, tu dois avoir beaucoup de vertices pour toutes les étoiles.
C'est ça qui me genait, mais jusqu'ici le systeme de particule qui emet mes étoiles autours de la camera me satisfait pleinement.