Wolf 3D , raycasting et gestion des vecteurs. - C - Programmation
Marsh Posté le 11-01-2014 à 01:28:23
Regardes sur ce tuto : http://www.permadi.com/tutorial/raycast/
Tu verras que c'est plus "simple" qu'il n'y parait
Edit :
jetes un oeil là aussi, la technique est un peu différente, mais ya du code qui peut servir de base : http://lodev.org/cgtutor/raycasting.html
Marsh Posté le 10-01-2014 à 23:44:36
bonjour je vous écris car je fais un wolf3D (j'essaie) j'ai compris le principe du raycasting en théorie mais en pratique j'ai du mal.
le principe j'ai les coordonnées de la position du joueur, par exemple (5.5 , 5.5)
la map est un double tableau de char, 1 = plein 0 = vide)
la vision du joueur est une série de vecteur pour chaque X de l'image, qui partent de la position du joueur si la case est pleine j'affiche un mur en fonction de la longueur du vecteur (distance entre l'oeil et l'obstacle), plus la distance est grande plus le mur sera petit. bref
j'ai deux question :
par exemple
la vision fait 100 degré radians et le plan de projection est à une demi case donc 0.5
on a un tableau de 8 sur 8 char avec les cases en bordure à 1 donc plein et on est situé en (5.5, 5.5) on regarde verticalement vers le haut du tableau...
je voudrais calculé le vecteur en position X le plus a droite de la fenêtre.
par logique je vois bien que le vecteur sera (x1 = 5.5, y1 = 5.5 ; x2 = 7, y2 = 3).
Mais comment savoir en pratique que le vecteur va traverser la case pleine en ces positions d'arrivée, je sais qu'il faut utilliser les sinus et cosinus mais je ne comprend pas les formules que j'ai dans mon cours tel que l'équation paramétrique X' = Xcos(angle) - Ysin(angle) ; Y' = Xsin(angle) + Ycos(angle).
2eme question quand je fais un système D et que j'essaie de calculer l'hypothènuse par rapport au coté adjacent avec l'angle j'obtiens des résultat incohérent.
je ne peux pas copier coller mon code car pas sur cet ordi et pas encore configurer internet, mais ca ressemble a ca
double angle;
double adj;
double hyp;
angle = 1;
hyp = 1 / cos(angle);
vu que le cosinus en math c'est adjacent sur hypothenuse, si l'angle est de 1 l'hypothénuse sera légerement plus grande que l'adjacent donc adj sur hyp = 0.99 et des poussières inversé ca donne 1,1 et quelques mais quand j effectue le code ci desus ca me donne 1 / 0.54 donc pas loin de 2.
si quelqu'un sait manier les cos et les sin en C, ca me serait d'une grande aide.
Merci.