Author Topic: comment ca se code :  (Read 2257 times)

0 Members and 1 Guest are viewing this topic.

Offline maracuja

  • Base
    • View Profile
comment ca se code :
« on: 05 March 2012 à 15:38:46 »
Salut,

Je me demandais comment programme-t-on le defilement du décor : http://www.youtube.com/watch?v=jajlMD08XEw#
Il semblerait que la voiture ne bouge jamais, enfin je veux dire qu’elle est systématiquement centré par rapport au décor. Pour le reste, je ne vois pas trop concrètement comment cela marche.


Offline LLB

  • Base
    • Pouet.net
    • Coup de coeur
    • View Profile
    • site perso
  • Ancienneté: 2000
  • Groupe: Ctrl-Alt-Test
  • Rôle: code
  • Ville: Munich
Re : comment ca se code :
« Reply #1 on: 05 March 2012 à 16:26:50 »
J'ai passé des heures sur ce jeu. :)

Pour le rendu, sur une machine moderne, je conseillerais de faire bouger la voiture dans le monde et de bêtement placer la caméra juste derrière.

Offline latortue

  • Base
    • View Profile
    • punkfloyd
  • Ancienneté: 1988
  • Groupe: punkfloyd
  • Rôle: graphiste
  • Ville: Paris
Re : comment ca se code :
« Reply #2 on: 05 March 2012 à 18:49:47 »
J'en profite pour rebondir sur la question:
Sur les anciennes bécanes, quel est la façon de gérer une route qui ondule et qui donne l'impression de montées et descentes ?

Avec les technologies actuelles, j'imagine qu'une texture déformée suffit (un truc dans le genre quoi!) mais du point de vue oldschool, comment fait-on ?

http://www.youtube.com/watch?v=hxA8yEBfODg#
(vroom sur Atari)

"... Ne craignez pas d'être lent, craignez seulement d'être à l'arrêt ..."

Offline wondersonic

  • Base
    • View Profile
  • Ancienneté: 1994
  • Rôle: code
  • Ville: Paris
Re : comment ca se code :
« Reply #3 on: 05 March 2012 à 19:10:27 »
Hello, je sers de proxy à Patapom pour ce coup là ;)

Sa réponse :

Han ouais c'était la classe ce jeu ! ;D

Grosso merdo ce sont des "copper bars".
Je pense qu'il ne rend que la route par dessus des copper bars qui défilent et qui sont triées...

En gros, comme t'es en bitplans tu précalcules ta route à différents niveaux de zoom, depuis Z=0 là où est ta voiture jusqu'à ZMax à l'horizon où la route ne fait que quelques pixels de large. Et tu fais ça 16 fois pour chaque déclage d'un pixel.
Ca te donne un set de sprites que tu vas pouvoir choisir pour afficher la route à un Z et  un pixel précis.

Bon ensuite, l'idée est de tracer ton décor correctement.
En gros, sa route c'est pour un Z donné :
_ une hauteur qu'on va appeler H
_ une position en X qu'on va appeler X

Tu commences en front to back, tu sets ton horizon flottant au bas de l'écran (on va dire que le bas de l'écran c'est 0, et que les H augmentent vers le haut de l'écran).
Code: [Select]
Tu lis la route pour Z=0 tu obtiens H(Z0), X(Z0)
Tu lis la route pour Z=1 (plus lointain) tu obtiens H(Z1), X(Z1)

Si H(Z0) > H(Z1) alor Swap les H(Z0)/H(Z1) et X(Z0)/X-Z1)  <= Car on veut toujours tracer de bas en haut en faisant remonter l'horizon

Si H(Z1) <= Horizon alors on ne trace rien, return   <= Ca veut dire que ce segment de route est sous l'horizon
Si H(Z0) < Horizon alors H(Z0) = Horizon  <= On ne trace jamais sous l'horizon de toute manière

for ( h=H(Z0); h <= H(Z1); h++ )
{
  int x = X(Z0) + (X(Z1) - X(Z0)) * (h - H(Z0)) / (H(Z1) - H(Z0));  <= Bon, à optimiser évidemment
  TraceTaRoute, Fais ton chemin, làlàlà...
  Tu affiches le bout de route qui correspond à Z0 et à la position x
  Tu remplis aussi une table de couleurs de copper bars de la taille verticale de l'écran avec une couleur qui correspond à la couleur de Z0 (dans le jeu, il alterne entre différentes couleurs marron on dirait, en fonction du Z)
}

Horizon = H(Z1) <= Nouvel horizon, qui ne fait que remonter

Z0++
Z1++ <= On avance

if ( Z1 > ZMax) return;  <= Fini...

--- end of transmission ---

a+
WS

ps : pinaise, j'ai l'impression d'être intelligent ;D

Offline maracuja

  • Base
    • View Profile
Re : comment ca se code :
« Reply #4 on: 06 March 2012 à 10:39:08 »
Merci les gars :-)

Offline yogi beer

Re : comment ca se code :
« Reply #5 on: 07 March 2012 à 01:58:09 »
coucou a vous !

alors moi qui ne code pas je me souviens de l'interview du coder

pour que cela aille a toute blingue il a virré les variable avec décimale
et n'a gardé que des variables sans :) d'ou un gain de vitesse non
négligeable. bref top niveau pour moi qui ne sait faire que du basic 512

bibiz touti a bientot a l'amigaterie, la vip et la main

steffouuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu

Offline gilles

  • Base
    • View Profile
    • Alternative system
  • Groupe: vitalmotion
  • Rôle: code
  • Ville: Nantes / Réunion
Re : comment ca se code :
« Reply #6 on: 08 March 2012 à 01:36:11 »
bon, déjà on va éviter la division sur 68000, tout va se passer en table de précalcul (la division peut être utilisée pour calculer cette table avant le rendu).
les sprites vont effectivement exister en plusieurs exemplaires de différentes tailles, et peut être déjà avec des décalages qui sont un peu côuteux sur le 68000.
l'algo en gros affiche des lignes horizontales du plus près vers le plus loin, la forme de base consiste à réduire de N pixels pour chaque ligne.
Pour faire des virages on vient jouer sur un offset qui se propage petit à petit (via une table qui tient compte de la distance). Pour jouer sur le profil on fait varier la forme de base (à savoir les N pixels de la forme de base). Y'a pas de règle absolue, c'est totalement pifométrique... quand c'est bien fait ca donne un Vroom... quand c'est moins bien fait un burning rubber sur GX4000