Posté le 25/03/2019 19:45
Planète Casio v4.3 © créé par Neuronix et Muelsaco 2004 - 2024 | Il y a 111 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 01/11/2019 22:26 | #
OH !
C'est bô.
Tu comptes implémenter les couleurs ?
J'aimerais voir ça.
Combien de temps pour calculer l'image ?
Citer : Posté le 01/11/2019 22:43 | #
Superbe !
Citer : Posté le 01/11/2019 22:55 | #
Wow ! Ça mérite un topic à part, surtout vu que la méthode est pas pareil que le raycasting.
En Basic je présume ? Quel genre d'effets de lumière tu as ici ? Ça se calcule en combien de temps ?
Citer : Posté le 02/11/2019 09:07 | #
Et combien de rayons surtout ?
-Planétarium 2
Citer : Posté le 02/11/2019 09:21 | #
Et combien de rayons surtout ?
Un rayon par pixel.
Citer : Posté le 02/11/2019 09:30 | #
Tu est sur ? Il y a des pixels blancs par endroits a intervalles reguliers.. peut peut-être qu'il en a mis moins par souci de vistesse d'exécution
Ajouté le 02/11/2019 à 10:19 :
Ah et @Lightmare: comment as tu implémenté la sphère dans le code ?
-Planétarium 2
Citer : Posté le 02/11/2019 11:40 | #
Waw, pas mal, c'est quoi exactement la technique du raytracing ?
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 02/11/2019 11:46 | #
Un lien est donné dans le post avant la photo
-> RayTracing
-Planétarium 2
Citer : Posté le 02/11/2019 15:40 | #
Tu est sur ? Il y a des pixels blancs par endroits a intervalles reguliers.. peut peut-être qu'il en a mis moins par souci de vistesse d'exécution
Un pixel calculé s'affiche probablement sur plusieurs espaces Je dirai qu'un pixel en fait 2x2 sur l'image.
Citer : Posté le 02/11/2019 15:45 | #
Parce que 8001 pixels (127*63) ça fait beaucoup de rayons. Sans compter les autres rayons utilisés pour les sources lumineuses...
Ajouté le 02/11/2019 à 15:46 :
Perso j'ai fait un essai de raycasting avec 127 rayons et ça prends du temps en Basic, même avec un truc optimisé.
-Planétarium 2
Citer : Posté le 02/11/2019 17:01 | #
ah, merci Disperseur, je n'avais pas vu !
Ajouté le 02/11/2019 à 17:09 :
@Lightmare
Tu nous feras une mini explication de comment tu t'y prends ?
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 02/11/2019 17:11 | #
Je réitère ma demande de créer un autre topic d'ailleurs. :3
Citer : Posté le 02/11/2019 17:11 | #
oui, ce serais mieux
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 06/11/2019 17:32 | #
Alors, j'ai retenté de faire fonctionner mon code de raycasting en C pour Graph 90, et j'ai changé les Bdisp_SetPoint_DD par Bdisp_SetPoint_VRAM. Cependant, le compilateur n'a pas apprécié le Bdisp_PutDisp_VRAM(), du coup j'ai remis le Bdisp_PutDisp_DD et ca compile. Mais je me retrouve toujours avec un écran blanc...
Dijkstra - The Witcher
Citer : Posté le 06/11/2019 19:18 | #
Ouh là, faut pas utiliser les fonctions de dessin DD. Il faut bien utiliser Bdisp_SetPoint_VRAM().
Cependant tu t'es trompé, Bdisp_PutDisp_DD() est une exception. Ça copie la VRAM à l'écran. Il n'y a pas de Bdisp_PutDisp_VRAM().
Il faut que les commandes soient bien claires pour toi avec le double buffering. Si tu as un doute, n'hésite pas à demander.
Citer : Posté le 07/11/2019 21:10 | #
@Lephenixnoir : C'est ce j'ai fait, et je me retrouve avec un écran blanc... Je met le code ci dessous, ca doit être un truc idiot je pense.
Bdisp_AllClr_VRAM;
double r = 0;
double camera_angle = 0; // angle de la camera
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 key;
int map[7][21] =
{ { 1,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,0,1 },
{ 1,0,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,0,1 },
{ 1,0,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,0,1 },
{ 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 + 30; ray_angle = ray_angle + 0.47) { // lancer de rayon
cursor++;
for (ray_distance = 0; ray_distance < 30; ray_distance + 0.1) { // on vérifie régulierement la présence de murs sur le trajet du rayon
if (map[ (int) (ray_distance * sin(ray_angle) + player_y)][ (int) (ray_distance * cos(ray_angle) + player_x)] == 1) {
wall_dist = sqrt( pow(ray_distance * cos(ray_angle), 2) + pow(ray_distance * 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_VRAM(cursor, wall_height_1, 0); // dessin de la limite haute du mur
Bdisp_SetPoint_VRAM(cursor, wall_height_2, 0); // dessin de la limite basse du mur
Bdisp_PutDisp_DD();
}
}
}
GetKey(&key);
if (key == KEY_CTRL_UP) {
r++;
}
if (key == KEY_CTRL_DOWN) {
r--;
}
if (key == KEY_CTRL_LEFT) {
camera_angle = camera_angle - 15;
}
if (key == KEY_CTRL_RIGHT) {
camera_angle = camera_angle + 15;
}
}
return;
}
Dijkstra - The Witcher
Citer : Posté le 07/11/2019 21:16 | #
Tu n'as pas appelé la fonction, cette ligne n'a aucun effet à part nommer une fonction. L'opérateur d'appel c'est les parenthèses :
Tu peux virer ton Bdisp_PutDisp_DD() qui va te bouffer la majorité du temps de caclul. Il suffit d'afficher à la fin, ce que GetKey() fait déjà pour toi.
Il y a certainement autre chose mais dans l'immédiat je ne vois pas quoi. N'hésite pas à changer la couleur des points (troisième paramètre de Bdisp_SetPoint_VRAM()) pour être sûr.
Citer : Posté le 07/11/2019 21:27 | #
Merci ! Mais du coup maintenant j'ai juste l'écran du menu qui est freeze sans rien d'autre qui s'affiche... J'ai également enlevé le Bdisp_PutDisp_DD() de la fin. Et pour les couleurs, j'ai pas compris quels ints correspondaient à quelle couleur.
Dijkstra - The Witcher
Citer : Posté le 07/11/2019 21:31 | #
C'est du 16-bit donc R5G6B5. Basiquement 0x0000 c'est noir, 0xf800 c'est rouge, 0x07e0 c'est vert, 0x001f c'est bleu et 0xffff c'est blanc. Donc t'es bon normalement.
N'oublie pas que les coordonnées à l'écran c'est x, y pour 0 ≤ x ≤ 383 (en partant de la gauche) et 0 ≤ y ≤ 215 (en partant du haut). J'ai cru voir passer des coordonnées négatives.