en fait, tu tient la reponse dans ta question : quand tu dis "fausse 3D"...
Dans le moteur dont je donne le lien, tout est gere en 2D : la 3D n´est qu´une illusion d´optique ...
le Z-sorting, les calculs d´angles, et la gestion des collisions ( s´il y en avait une, mais je l´ai desactivee car je n´arrivait pas a corriger certains bugs ), tout a lieu dans la petite map 2D en haut a droite de l´ecran ...
Le reste n´est qu´une "renderisation" de ce qui se passe dans cette minimap ...
en ce qui concerne l´edition des cartes, rien de plus facile, du moins en Flash : je depose juste mes elements sur ma carte 2D, et ca y est ...
Le gros probleme donc, ( toujours concernant la version Flash ) vient seulement des gros ralentissements processeur lorsqu´il y a beaucoup d´objets a afficher ...
Merci pour ces précisions ;)
En y réfléchissant, je pense qu´il, y a deux type de "fausse 3D" :
1/celle à la AFTER BURNER ou tout l´affichage est composé d´images qui subissent un traitement d´agrandissement/réduction + priorité d´affichage + changement de couleurs pour mieux simuler la profondeur,
2/celle que tu utilises, une sorte de "mode 7" de la Super Nes : une image étiré pour les sols à la F-ZERO + images ( plusieurs séquences pour tourner autour ? ) avec agrandissement/réduction + priorité + couleurs.
Moi je suis plus attiré par la première technique. En plus il me semble qu´avec la première on peut simuler des terrains déformés, alors qu´avec la deuxième tout doit être plat... peut être que je me trompe ?
ta methode 1 peut etre celle du mode7 moins la gestion d´un sol mappe sur un plan...
bon ...essayons de decortiquer le gameplay ...
1 ) Afterburner, un peu comme Space Harrier ne gerait pas de terrain, la seule indication que l´avion avancait ( outre la presence des enemis ) etait les moutenements des vagues sur le gros rectangle bleu de la mer
La procedure d´affichage de ces moutons est la meme que les enemis, et le Z sorting est assez facile puisqu´il suffit de leur attribuer un ordre Z par ordre d´apparition : en effet, AfterBurner, come Space Harrier, n´offrait pas la possibilite de "tourner" autour des enemis - en gros, c´etait un shoot vertical, donnant une vague impression de 3D
2) considerons maintenant un AfterBurner ou l´on puisse revenir en arriere, tourner autour des enemis ; la, du coup, on ne peut plus se contenter d´avoir un Z en fonction de l´ordre d´apparition ... on pourrait placer les differents index Z dans un tableau, et les recalculer en fonctions de leurs deplacements relatifs pour chaque enemi, mais cela serait lourd en trigo
et reviendrait au meme, au final, a projeter la position de tout le monde sur un plan 2D, et de faire les calculs d´index Z en fonction de ce plan, et de la position de la camera (avion) - ce qui exactement ce qui se passe dans mon moteur ...
Donc je crois que tes deux methodes n´en sont en fait qu´une, a partir du moment ou tu donnes a ta camera (avion) l´option de pivoter sur son axe ...
Apres, la gestion du terrain en mode7 est une fonctionalite ajoutee au moteur, mais il reste neanmoins le meme ...
quand a la gestion des couleurs en fonction de la distance, c´est aussi quelque chose que j´avais explore avec ce moteur : j´ai reposte une version plus recente ici :
http://www.luxgames.net/median/engine_new.html
et je t´ai mis un exemple de sprite 2D, et la map du sol ( qui est ensuite donc, decoupee en tranches qui rapetissent au fur a mesure qu´elles s´approchent de l´horizon )
quand a ici, voici un exemple des modeles 3D : les calculs trigo disent au moteur sur quelle image il doit s´arretter :
http://grafikdezign.free.fr/flashkit/model.htm
reno_ > En effet, comme tu le dis, le mode7 de la SNES ne peut générer que des décors plats, parce que c´est simplement un carre distordu.
Comme dit Lux, dans AfterBurner, ils ont meme triché : il n´y a pas de notion de décor, peut etre juste un petit scrolling en bas.
Apres, je me pose une question sur ce que tu veux faire :
- tu veux refaire un moteur de pseudo 3D de toute piece ?
- ou alors tu tu es ok pour utiliser quelques librairies bas niveau, qui utilisent les accélérations des cartes graphiques (OpenGL ou DirectX) ?
Les librairies telles que OpenGL (que je connais le mieux) vont te permettre d´afficher des triangles dans l´espace, et de placer une caméra.
En posant un Quad (2 triangles) texturé sur le sol, et en mettant ta caméra ou tu veux, tu reproduis immédiatement le mode7, en vraie 3D.
Pour faire des décors accidentés (comme quasiment les jeux 3D), tu as la technique du Heighmap : en fait, c´est une image, noir et blanc, et a chaque pixel est associé une valeur de gris.
Plus cette valeur est elevée, plus haut sera le relief a cet endroit : cela te permet d´éditer une map 3D sous paint si tu veux
Apres, comme dit Lux, si tu veux par exemple tourner autour d´un avion, au lieu de tourner toi meme, tu fais tourner tout le décor devant toi (ça revient au meme)
Comme ça, le Z te permet immédiatement de faire un sorting (d´ailleurs, toutes les cartes graphiques contiennent le Z-buffer, qui fait ça en hardware)
Mathématiquement, faire tourner un point revient uniquement a lui appliquer une matrice, les cartes graphiques multiplient énormément de matrices...
Pour les effets de lumiere (atténuation de couleurs), les cartes graphiques savent faire aussi. (basés sur des produits scalaires principalement et l´algo de Gouraud entre autre, tout géré par la carte graphique aussi)
Apres, tout dépend si tu veux y utiliser directement, ou plutot savoir les maths qu´il y a derriere
Le sujet est ouvert ![]()
luxregina > joli effet de fog ![]()
merci : le probleme, c´est que c´est plus gourmant en ressource que sans
bref, les joies de la 3D en Flash ...
Sinon, perso, juste en reaction a ce que tu dis, et toujours par rapport en Flash, je pense qu´il est plus facile de reajuster les indexes Z des enemis a la volee ( selon la methode du ray casting ou calcul vectoriel, je ne sais pas comment tu appelle ca )
Enfin, perso, je crois que tout le challenge du topic est de savoir comment tricher avec tous ces effets sans avoir recours aux fonctions des cartes graphiques modernes - c´est d´ailleurs ce qui m´amuse le plus, dans Flash, c´est l´ingeniosite des procedes pour "emuler" quelque chose de commun sous d´autres langages ...
Tu parles de heightmap, par exemple, qui est un truc bateau en C++, mais pas en Flash ...et pourtant :
http://lab.parkstudio.ru/terra/
ou, d;ailleurs, j´ai releve un truc avec lequel je ne suis pas trop d´accord, concernant le mode 7 :
[ (...) mode7 de la SNES ne peut générer que des décors plats, parce que c´est simplement un carre distordu. ]
En fait, non !
... je m´explique : si tes "tranches" sont rectangulaires, oui, tu ne peux creer qu´un decors plat, par contre, si tu te met a generer des tranches "accidentees" non rectilignes, tu peux alors creer un decors accidente ... quelqu´un avait fait l´essai en Flash et le resultat etait assez soufflant : je vais essayer de retrouver le lien ...
Magnifique le heighmap ![]()
Pour ma défense, je dirais que ce n´est pas si bateau en C++ quand meme, lol !
Oui, je comprends bien que c´est vraiment intéressant d´essayer de retrouver des résultats faits par la carte graphique sans l´utiliser. Les profs ne sont d´ailleurs pas privé de nous demander ça en TP, lol !
C´est vrai que réajuster les indexes Z des ennemis a la volée est d´ailleurs beaucoup moins calculatoire.
D´un coté, moi aussi je déplore le temps ou on avait un control total des choses, ou on pouvait modéliser les choses comme on voulait (par exemple, Doom 1, ce bijou magnifique, fait que de trapezes droits pour les murs : magnifique !! )
Mais c´est vrai que j´admire aussi ce que savent faire les cartes graphiques et les applications qui vont avec
Je suis intéressé si tu as un exemple pour le mode7, car je ne vois pas exactement pour le moment (ça doit etre parce qu´il est tard, lol !)
un moteur mode 7 / raycasting meilleur que le mien :
http://lab.andre-michelle.com/raycaster-v3
( ce gars est l´un des genies de Flash )
J´ai egalement trouve le lien dont je parlais, mais la page n´existe plus ![]()
nan, du coup j´ai plus d´exemple concret, mais je vais essayer d´expliquer mieux :
tes masques sont lineaires, dans le mode7, c´est a dire que c´est une succession de tranches rectangulaires, empillees par ordre decroissant
Chacune de ses tranches contient une portion de l´image, qui est agrandie ou retrecie en fonction de la taille de son conteneur
Imaginons maintenant, qu´au milieu des tes conteneurs rectangulaires, tu commence a arcbouter l´une des face, en repercutant ce changement sur tes conteneurs suivants, de maniere de plus en plus prononcee au fur et a mesure que tu remonte vers ta ligne d´horizon, tu n´as plus un paysage plat, mais une colline ...
Une autre maniere de tricher est celle demontree ici :
http://www.unitzeroone.com/blog/flash_examples/flash_9_example_3d_landscapes.html
(clique sur l´image, a la fin du message )
En l´occurrence, le voxel n´existe pas encore en Flash - le gars utilise donc une methode proche de celle que je cite ci-dessus, en deformant dynamiquement des portions de ses "masques" afin de donner l´impression de relief ... et je trouve cela assez concluant - et pourtant, sans meme l´avoir vu, je peux t´assurer que son code repose en grande partie sur celui du mode7 ...
ceci dit, je parle de tout ca, mais moi, je ne suis qu´un graphiste, j´y connais donc pas forcement grand chose ... j´essaye juste de donner un avis "different" ![]()
Merci lux, j´avais pas encore vu la version AS3 du mode 7 selon André Michelle. C´est d´une fluidité impressionante.
bah ...c´est Andre Michelle, quoi ... ![]()
Salut à tous ; c´est pas évident de prendre du temps sur le net avec les fêtes
En relisant les messages, je viens de comprendre comment faire la différence entre la carte et l´affichage du jeu à l´écran ; c´est tout con, mais je n´y avait pas pensé !
Pour l´instant je programme avec BLITZ BASIC, mais je compte passer dans quelques mois avec COBRA (
http://squeakyduck.co.uk/ ) qui offrira beaucoup plus de souplesse pour le traitement des images ( distorsion, etc ).
Merci pour l´explication du "heightmap", même si je n´en vois pas son utilisation dans un jeu type 2D.
On va dire que pour l´instant je ne me pose pas encore ces questions, je verrai le moment venu. Ce qui m´interessera avec cette technique, c´est d´obtenir le même rendu dans un premier temps d´un AFTER BURNER ( arcade ) et dans un deuxième temps celui d´un BIG RUN ( arcade ).
Luxregina, ça a de la gueule ton moteur avec les changements de couleurs !