Posté le 25/03/2019 19:45
Planète Casio v4.3 © créé par Neuronix et Muelsaco 2004 - 2024 | Il y a 84 connectés | Nous contacter | Qui sommes-nous ? | Licences et remerciements
Planète Casio est un site communautaire non affilié à Casio. Toute reproduction de Planète Casio, même partielle, est interdite.
Les programmes et autres publications présentes sur Planète Casio restent la propriété de leurs auteurs et peuvent être soumis à des licences ou copyrights.
CASIO est une marque déposée par CASIO Computer Co., Ltd
Citer : Posté le 06/04/2019 09:46 | #
On calcule les segments du carré car l'un d'eux a une intersection avec [AB], et on veut connaître ce point d'intersection. On doit donc calculer l'intersection de [AB] avec chacun de ces segments. Et pour calculer l'intersection entre deux segments, on a besoin de connaître les coordonnées des points qui les délimitent.
Citer : Posté le 06/04/2019 10:11 | #
Bon, j'ai réfléchi de nouveau et je ne suis pas fou. Bresenham ne sera pas tout à fait suffisant pour le raycasting car il ne parcourt pas assez de points. Le DDA pourrait aller mais il est plus coûteux. Je serais partisan de modifier l'algorithme de Bresenham, je pense que ça se fait...
Citer : Posté le 06/04/2019 11:31 | #
@Alexot: Je vois. Cependant il va falloir que j'y réfléchisse un bon moment
@Lephenixnoir: Attends, j'en suis pas là ! Il faut en premier que je parvienne à reproduire cet algo en Basic (pour comprendre clairement le fonctionnement). Ensuite seulement je pourrais envisager de le modifier pour répondre à mes besoins
-Planétarium 2
Citer : Posté le 07/04/2019 17:38 | #
Bon moi je suis à la traine, mais dans la plupart des liens que vous avez donnés il parlent du DDA
Sell-me
Pixel
Html Intrepreter
Venez me rejoindre sur mon nouveau serveur Discord dédié a la programmation sur toutes les plateformes
https://discord.gg/bzfymHQ
Venez vous instruire, dans ce magnifique cours sur les Intelligences Artificielles que j'ai créé:
http://reseaux-neurones-a--z.ml/
Faites apprendre des choses à une machine, faites reconnaître à un ordi des images...
Citer : Posté le 07/04/2019 17:43 | #
Oui en effet, le Differential Digital Analyser. C'est ce que je cherche à faire en Basic d'abord puis en C.. mais je rame
-Planétarium 2
Citer : Posté le 07/04/2019 17:46 | #
tu peux peut être regarder ici (je sais pas si c'est bien, je n'ai pas regardé en détail , mais il y a des exemples ):
https://www.geeksforgeeks.org/dda-line-generation-algorithm-computer-graphics/
Sell-me
Pixel
Html Intrepreter
Venez me rejoindre sur mon nouveau serveur Discord dédié a la programmation sur toutes les plateformes
https://discord.gg/bzfymHQ
Venez vous instruire, dans ce magnifique cours sur les Intelligences Artificielles que j'ai créé:
http://reseaux-neurones-a--z.ml/
Faites apprendre des choses à une machine, faites reconnaître à un ordi des images...
Citer : Posté le 07/04/2019 21:28 | #
Imaginons que notre texture fasse 6 pixels de large, on multiplie 0.2 par 6 : 0.2×6 = 1.2, on arrondit : 1, le pixel à afficher est donc le pixel n°1 de la texture(sachant que le pixel tout à gauche est le n°0)
je ne pense pas que cette étape soit bien utile, il suffit de connaître la colonne de texture à afficher, pas besoin d'aller au pixel près, non ? ce qui de toute façon n'est pas vraiment possible avec le raycasting...
Dijkstra - The Witcher
Citer : Posté le 08/04/2019 19:45 | #
je ne pense pas que cette étape soit bien utile, il suffit de connaître la colonne de texture à afficher, pas besoin d'aller au pixel près, non ? ce qui de toute façon n'est pas vraiment possible avec le raycasting...
Si j'ai bien compris ton message, je pense que ce que je propose de faire est exactement ce que tu décris. J'ai néanmoins été assez imprécis dans le choix de mes termes puisque par "pixel n°1" je voulais dire "colonne de pixels n°1 dans la texture". Par contre je pense que c'est possible d'avoir le pixel près, en calculant l'abscisse dans la texture avec la technique décrite plus tôt, et l'ordonnée doit pouvoir se trouver avec la hauteur du pixel de l'écran par rapport au milieu de l'écran (en ordonnée) et la distance du mur à afficher par rapport à la caméra.
Citer : Posté le 08/04/2019 21:16 | # | Fichier joint
Bonjour ! j'apporte un peu de neuf !
je pense que ça intéressera surtout Disperseur, car j'ai fait un algorithme de DDA qui permet de dessiner des segments.
le programme tourne avec C.Basic et c'est un g1m
Dijkstra - The Witcher
Citer : Posté le 09/04/2019 07:24 | #
@Lightmare : Merci. Je télécharge quand j'ai plus de temps. Merci
-Planétarium 2
Citer : Posté le 14/04/2019 19:23 | #
Aaah bravo Lightmare ,
Je le met en haut si ça ne te dérange pas
PS: Je n'ai pas eu le temps de tester et je n'ai pas FA-124 à porté de main
Sell-me
Pixel
Html Intrepreter
Venez me rejoindre sur mon nouveau serveur Discord dédié a la programmation sur toutes les plateformes
https://discord.gg/bzfymHQ
Venez vous instruire, dans ce magnifique cours sur les Intelligences Artificielles que j'ai créé:
http://reseaux-neurones-a--z.ml/
Faites apprendre des choses à une machine, faites reconnaître à un ordi des images...
Citer : Posté le 07/05/2019 19:14 | #
Alors que j'essayais de porter mon moteur de raycasting en C pour Graph 90 avec le PrizmSDK, je me suis heurté à un obstacle :
la calculatrice ne m'affiche rien alors que j'ai bien vérifié de ne pas avoir fait les erreurs bêtes du genre oublier le Bdisp_PutDisp_DD()
Alors je laisse le programme ci dessous ( commenté comme il se doit !Si besoin de détails ou d'explications, je suis bien évidemment là car je conçois qu'il est chiant de décortiquer un programme mal codé !
Bdisp_AllClr_VRAM();
double r = 0;
double camera_angle = 0;
double player_x = 0;
double player_y = 0;
double ray_distance = 0;
double ray_angle = 0;
double wall_dist = 0;
double wall_height_1 = 0; // limite haute du mur
double wall_height_2 = 0; // limite basse du mur
double cursor = 0;
int map[20][20] = { // map
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
};
while (1) {
// deplacements de la camera
player_x = player_x + r * (cos(camera_angle));
player_y = player_y + r * (cos(camera_angle));
r = 0;
cursor = 0;
for (ray_angle = camera_angle - 30; ray_angle < camera_angle + 300; ray_angle = ray_angle + 0.47) { // lancer de rayon
cursor++;
for (ray_distance = 0; ray_distance < 30; ray_distance++) { // on vérifie régulierement laz présence de murs sur le trajet du rayon
if (map[ (int) (ray_distance * (double) sin(ray_angle) + player_y)][ (int) (ray_distance * (double) cos(ray_angle) + player_x)] == 1) {
wall_dist = (double) sqrt((double) pow (ray_distance * (double) cos(ray_angle), 2) + (double) pow (ray_distance * (double) sin(ray_angle), 2)); // calcul de la distance du mur
wall_height_1 = (60 / wall_dist) + 30; // calcul de la limite haute du mur
wall_height_2 = (-60 / wall_dist) + 30; // calcul de la limite basse du mur
Bdisp_SetPoint_DD(cursor, wall_height_1, black); // dessin de la limite haute du mur
Bdisp_SetPoint_DD(cursor, wall_height_2, black); // dessin de la limite basse du mur
Bdisp_PutDisp_DD();
}
}
}
}
return;
}
Dijkstra - The Witcher
Citer : Posté le 07/05/2019 19:27 | #
Déjà, il me semble que se serait mieux avec MonochromeLib
Je doute tout de même que le problème vienne de là
Edit:
Il te laisse assigner tes variables quand tu les déclares?
Edit:
Je ne connais pas du tout l'objet "map" mais tu es sur de ton coup?
Sell-me
Pixel
Html Intrepreter
Venez me rejoindre sur mon nouveau serveur Discord dédié a la programmation sur toutes les plateformes
https://discord.gg/bzfymHQ
Venez vous instruire, dans ce magnifique cours sur les Intelligences Artificielles que j'ai créé:
http://reseaux-neurones-a--z.ml/
Faites apprendre des choses à une machine, faites reconnaître à un ordi des images...
Citer : Posté le 07/05/2019 19:55 | #
Il n'y a pas de problème du côté de la déclaration des variables et de la map, sinon il y aurait eu une erreur de compilation.
... Et monochromelib est comme son nom l'indique uniquement pour les calculatrices monochromes !
Dijkstra - The Witcher
Citer : Posté le 07/05/2019 19:59 | #
Pour l'assignement, à terme, tu peux faire comme ça :
Ca permet de ne prendre qu'une seule ligne mais tu perd un peu en lisibilité…
Citer : Posté le 07/05/2019 21:16 | #
Pour l'assignent, à terme, tu peux faire comme ça :
Pitié, garde ce que tu as actuellement !
Je pense que la VRAM est en faute, localise le calcul de l'adresse, il faut utiliser un syscall au lieu de prendre la valeur hardcodée pour la Prizm, qui n'est pas la même que celle de la Graph 90+E.
Citer : Posté le 07/05/2019 21:17 | #
Je comprend pas en quoi changé d'écriture influence des erreurs sur la RAM ?
Citer : Posté le 07/05/2019 21:25 | #
Non ça n'a rien à voir, mais son style actuel est meilleur en lisibilité et posera moins de problèmes plus tard (par exemple en l'obligeant à penser au type qu'il est en train de mettre au lieu de juste rajouter un nom à la liste).
Citer : Posté le 07/05/2019 22:13 | #
merci pour les conseils Lephe !
Tu saurais où trouver les syscalls pour connaître la VRAM de la Graph 90 ?
Et sinon il n'y a pas de fautes évidentes dans le programme ?
Dijkstra - The Witcher
Citer : Posté le 07/05/2019 22:50 | #
D'après mes notes sur le portage des add-ins Prizm vers la Graph 90+E, il faut virer les références à l'ancienne VRAM qui est 0xa8000000, et utiliser le sys 0x1e6 à la place. Normalement il est déjà codé et la fonction s'appelle GetVRAMAddress(). (Il y a régulièrements des fautes sur le nombre de d, mets-en un seul si jamais le nom n'existe pas.)
S'il compile, tout va bien. Mais tu te tues à tout caster en double, c'est inutile. Toutes les fonctions mathématiques que tu as utilisé renvoient déjà des double.
Citer : Posté le 08/05/2019 08:37 | #
merci beaucoup ! je vais essayer ca !
pour les "doubles", je les avais mis là pour le debug, je vais les enlever !
Ajouté le 08/05/2019 à 10:27 :
Alors j'ai mis la commande GetVRAMAddress() dans la fonction main, et ca compile. Mais la calculatrice ne m'affiche toujours rien...
J'ajoute que le seul changement que j'ai effectué est d'ajouter la fonction qui change l'addresse de la VRAM.
Dijkstra - The Witcher