grace a la SDL (et au C... faut pas l'oublier
) on peut maintenant tapper dans le
vif du sujet et reflexionner..... reflexer... refl......
réfléchir.
Voici un p'tit projet sympa (et tout à fait réalisable) qui est
un Wolf 3D. Pour la petite histoire wolfenstein 3d a été créé en
1992 par ID Software, il utilisait la technologie raycasting et fut
le premier FPS en "3D" (si j'le met entre guillemets c'est que
c'est pas de la 3D mais de la perspective).
Hop ! un petit screenshot parce que vous avez l'air gentils :

Bien sur notre wolf sera moins complexe, on va juste se contenté
de se déplacé dans un labyrinthe, après vous pouvez en rajouter
comme bon vous semble.
PRINCIPE : Le principe du raycasting est simple
(si on peut dire
). il s'agit de "lancer" un rayon qui va
partir de la position de la caméra (le joueur en fait =) ), aller
jusqu'au prochain mur et afficher une ligne vertical de 1 px qui
correspondra à la hauteur du mur qui va dépendre de la distance
entre le joueurs et le murs (plus on est loin plus la ligne s'ra
petite. logique !!
)et afficher cette ligne sur toutes la
fenêtre, exemple : pour une fenêtre de 1024 on va afficher 1024
lignes vertical de 1 px de hauteur différente, et par effet de
perspective vous aurez un bel effet 3D.
AIDE : vous inquiétez pas j'vais pas vous
laissez en plan, j'vais vous mettre sur la voie. Evidemment ce
n'est pas la solution ULTIME, il y a beaucoup d'autre facon
de le faire. Tous d'abord vous allez créer votre map, elle sera en
fait un double tableau de nombre entier (un int** en fait ),
composer de 0 (pour les passages) et de 1 (pour les murs), cette
méthode permet tous simplement d'être flexible en effet rien nous
empêche de mettre un 2 dans le tableau qui correspondra a la
position d'un sprite (déf : élément graphique qui peut se déplacer
sur l'écran). Pour remplir ce tableau d'INT vous
avez deux solutions (p'tet 3 mais dans ce cas là j'la connais
pas
)
:
- Première solution : écrire votre
tableau dans un ficher .TXT que vous allez charger ensuite dans
votre tableau, cette méthode est très bonnes mais elle est
relativement longue et nécessite d'avoir de bonnes fondations en C
pour faire un bon parseur (c'est un terme compliqué cherchez pas
).
- Deuxième solution (plus facile) :
cette solution consiste à déclarer (en dur ..) votre tableau d'INT
pour ce faire vous créerez un include (que vous nommerez comme vous
voulez j'suis pas vot' mère
).
maintenant que nous avons notre map, on va position la caméra
sur son point de départ (de préférence sur un 0, faut pas vous
retrouver dans un mur
) et vos pojeté un point. Comment
faire ? vous vous dites. Hé bien c'est pas si compliqué vous
allez utilisé l'équation :
X1 = X0 + (k *
Vx) (même chose pour l'axe des Y)
X1 : est le point
projeté
X0 : est le point
initiale (ici notre caméra)
Vx : correspond au
vecteur de la direction vers laquelle on regarde
k : est un incrémenteur (qui s'ra
egal à 0.01)
On va initialiser Vx et Vy avec 2 et -2 (vous pouvez prendre
d'autre valeur c'est juste pour vous aidez =)) et K avec 0.01 et
dans une boucle on va incrémenter K jusqu'a ce X1 et Y1 soient
positionner sur un mur.
Voilà vous avez, je pense, assez d'indications pour faire un
petit jeu bien sympa (j'vais pas vous donner le code source nan
plus, à vous de bosser
) , pour toute questions n'hésitez pas à me
demander (j'suis à votre disposition
).
Pour plus de docs ca se passe ici (malheureusement j'ai pas
trouvé de docs en francais ) : raycasting tutorial1, raycasting tutorial2
TP : pour que sa soient plus simple procèdez
par étape, essayez dabord daffiché jsute une ligne vertical en
fonction d'une distance ensuite vous faite toute la fenêtre puis
vous associez vos fonctions (et je dis bien "VOS" me collez pas
tous dans le main
) à la map, ajouter des événements, les
collisions (à moins que vous voulez faire un jeu avec chuck norris
^^), sprite, IA, etc......