IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

Besoin d'aide pour un calcul de périmètre.


Sujet :

C++

  1. #1
    Membre averti
    Homme Profil pro
    Cimentage
    Inscrit en
    Septembre 2014
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Cimentage
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Septembre 2014
    Messages : 44
    Par défaut Besoin d'aide pour un calcul de périmètre.
    Salut à tous,

    Alors voilà, je voulais savoir si l'un d'entre vous pourrait m'aider sur un calcul à réaliser.

    Je souhaiterais connaître la position relative d'un sprite par rapport à celui de la caméra sur l'axe X, je m'explique :

    Je projette dans un angle de 60 degrés 640 rayons ( ce qui représente donc la largeur de ma fenêtre qui est de 640px ) afin d'afficher des colonnes de pixels à afficher à l'écran, ce qui fonctionne très bien pour afficher mon rendu de murs.
    Néanmoins, pour la gestion de l'affichage des sprites, je voudrais que ceux-ci s'affichent sur l'axe X de l'écran en fonction de l'angle de la caméra.

    J'ai pensé à ceci, sachant que 60 degrés * 6 = 360 degrés, dans mon cas de figure, le sprite pourrait avoir une position allant donc de 0 jusqu'à 3840 car 640*6 = 3840px, évidemment, il ne serait visible que si sa position est comprise entre 0 et 640.

    Voici un screenshot pour vous exposer le problème de manière plus claire :
    https://image.noelshack.com/fichiers...791634-ops.png

    Dans le cas de figure de ce screenshot, la formule trouvée ( celle que je cherche donc désespérément ) permettrait d'afficher mon sprite à gauche de l'écran du rendu 3D.

    Merci à vous de bien vouloir m'éclairer sur une éventuelle démarche à suivre. :-)

  2. #2
    Expert confirmé
    Avatar de Kannagi
    Homme Profil pro
    cyber-paléontologue
    Inscrit en
    Mai 2010
    Messages
    3 226
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cyber-paléontologue

    Informations forums :
    Inscription : Mai 2010
    Messages : 3 226
    Par défaut
    Je ne trouve pas très clair ton explication.

    Je souhaiterais connaître la position relative d'un sprite par rapport à celui de la caméra sur l'axe X, je m'explique :
    Normalement pythagore suffit.

    Dans le cas de figure de ce screenshot, la formule trouvée ( celle que je cherche donc désespérément ) permettrait d'afficher mon sprite à gauche de l'écran du rendu 3D.
    Si ton but est d'afficher un sprite sur ton rendu 3D alors , on parle de chose très différente , de base je vois pas le souci , tu l'affiche comme n'importe quel model 3D , sauf que le sprite fera tjs face a la caméra.

    Petite info au cas ou :
    Tu prend des position 3D , tu leur fait ton calcul de la matrice de projection et tu retrouve les coordonnés 2D (de ton écran).
    Tu as des coordonné 2D a l'écran tu fait l'inverse de la matrice de projection et tu as sa position en 3D.

  3. #3
    Membre averti
    Homme Profil pro
    Cimentage
    Inscrit en
    Septembre 2014
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Cimentage
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Septembre 2014
    Messages : 44
    Par défaut
    Salut Kannagi,

    Il ne s'agit pas d'une réelle 3D à proprement-parler mais d'une simulation, ( tout est en 2D en fait, y compris le rendu en pseudo 3D, c'est par effet de raycasting que j'obtiens mes perspectives en temps réel ).

    J'aimerais savoir comment je pourrais faire pour déterminer cet angle vis à vis du sprite, y a certainement moyen si je connais
    -Les positions (x,y) du sprite
    -Les positions (x,y) de la camera
    -L'angle de la caméra

    Néanmoins, je n'arrive pas trop à concerter tout ça pour obtenir l'effet escompté :-)

  4. #4
    Expert confirmé
    Avatar de Kannagi
    Homme Profil pro
    cyber-paléontologue
    Inscrit en
    Mai 2010
    Messages
    3 226
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cyber-paléontologue

    Informations forums :
    Inscription : Mai 2010
    Messages : 3 226
    Par défaut
    Je n'ai jamais fait de raycasting.
    Mais si tu veux mon avis , j'ai l'impression que ce n'est pas toi qui l'a codé le raycasting.

    Parce que :
    J'aimerais savoir comment je pourrais faire pour déterminer cet angle vis à vis du sprite, y a certainement moyen si je connais
    -Les positions (x,y) du sprite
    -Les positions (x,y) de la camera
    -L'angle de la caméra
    Oui tu as les coordonnées 2D , donc il faut que tu connaisse quel sont les transformations faite pour transformé la 2D (vue de dessus) en pseudo 3D perspective , pour pouvoir afficher ton sprite dans le rendu "3D".

  5. #5
    Membre averti
    Homme Profil pro
    Cimentage
    Inscrit en
    Septembre 2014
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Cimentage
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Septembre 2014
    Messages : 44
    Par défaut
    Euh, si, je l'ai conçu moi-même de A à Z, j'ai même posté un tutorial sur YouTube sur le fonctionnement du raycasting, je travaille sur ce projet depuis 3 semaines donc les réflexions de ce genre, je peux m'en passer, restons dans le cadre de l'entraide, merci.

    D'ailleurs, je réussi très bien à afficher mes sprites, mais je veux procéder d'une autre façon pour pouvoir les afficher intégralement.

    Voici le problème que je rencontre lorsque j'utilise ma méthode d'intersection ( lorsqu'un rayon détecte le centre d'un sprite en l'occurrence ) :

    https://gyazo.com/e9bb0b0b883aff2c599889772febee9b

    Le sprite disparaît ( logique ) lorsque j'arrive à sa moitié et la méthode que j'essaye d'appliquer ( donc la raison de ce topic ) est une méthode qui fonctionnera nickel sans besoin de tester les intersections, donc plus optimisée, plus rapide, et sans problème d'affichage, maintenant, je venais juste ici pour avoir un coup de pouce sur une idée de calcul.

  6. #6
    Expert confirmé
    Avatar de Kannagi
    Homme Profil pro
    cyber-paléontologue
    Inscrit en
    Mai 2010
    Messages
    3 226
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cyber-paléontologue

    Informations forums :
    Inscription : Mai 2010
    Messages : 3 226
    Par défaut
    Il faut savoir bien présenter son probleme entre comment faire et vouloir optimiser.
    Si tu ne savais pas faire , ma remarque n'était pas tout a fait illégitime.

    Citation Envoyé par FrostfallDelphi Voir le message
    Le sprite disparaît ( logique ) lorsque j'arrive à sa moitié et la méthode que j'essaye d'appliquer ( donc la raison de ce topic ) est une méthode qui fonctionnera nickel sans besoin de tester les intersections, donc plus optimisée, plus rapide, et sans problème d'affichage, maintenant, je venais juste ici pour avoir un coup de pouce sur une idée de calcul.
    Vu que le rendu est assez 'statique' tu peux faire donc :
    -La position X/Y par rapport a l'angle de la camera.
    -Et le zoom par rapport a sa position a la caméra.

    Si tu nous dis quel type de calcul , ben fait le de manière empirique , sauf si tu a sous les yeux les calculs du raycasting et que tu les réduits a des formes très simples.

  7. #7
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 488
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 488
    Par défaut
    "Take It Easy"

    Franchement, la fausse 3D en 2017, c'est pas la technologie la plus répandue et j'aurais eu la même remarque que @Kannagi si je n'avais pas compris que "raycasting" dans ce cadre particulier n'est pas celui de l'usage "actuel" ( full 3D à base de calcul matriciel grâce à nos chers, très chers GPU).

    Ton vocabulaire mathématique et ton mode de raisonnement peuvent te paraître simple et évident pour toi, mais pour nous, programmeurs de moins de 50-55 ans, la fausse 3D, c'est totalement "exotique".
    Ton usage de (x,y), on sait même pas si c'est les coordonnées écrans ou le numéro de colonne d'affichage et l’évaluation "z-buffer" du bidule.

    Pour qu'on s'accorde sur le vocabulaire, peux-tu nous donner l'URL de ton tutoriel ?

    Je ne sais pas ce que tu cherches vraiment à optimiser mais le clipping 2D de Sprite est déjà prise en compte automatiquement par toutes les bibliothèques graphiques modernes et elles s'appuient sur le fait que toutes les cartes graphiques modernes ont ce truc "câblé dans le silicium".

  8. #8
    Membre averti
    Homme Profil pro
    Cimentage
    Inscrit en
    Septembre 2014
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Cimentage
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Septembre 2014
    Messages : 44
    Par défaut
    En fait, je sais que la plupart des gens définissent un plan qui est sensé représenter la séparation entre ce qui est perçu et la projection de la caméra, chose que je n'ai pas faite car je l'ai conçu à ma manière à moi en tâtonnant au fur & à mesure et effectivement, je comprends désormais pourquoi la majeure partie des gens qui font des Raycast Engine utilisent le système de plan, ça épargne bien des problèmes de repères..

    Ben pour le "zoom", autrement-dit la variation de la grosseur du sprite selon la distance, je l'ai déjà géré grâce à la racine carrée ( donc avec l'usage de SQRT ) de la différence entre la position (x,y) de la caméra ainsi que la position (x,y) du sprite, donc pour ça je n'ai pas de soucis particulier.

    > -La position X/Y par rapport a l'angle de la camera. <

    Justement, la position Y est gérée également selon la distance de la caméra, donc pas non plus de soucis de ce côté-là.

    La question est vraiment, en fin de compte, comment placer l'abscisse de mon sprite en FONCTION de l'angle de la caméra, en utilisant le fameux raisonnement que j'ai énuméré au début avec les fameux 3840 px. Car théoriquement parlant, je vois parfaitement ce que je veux faire, mais je sais pas trop comment l'appliquer en fin de compte.. Sinon je peux conserver ma première méthode fonctionnant par intersection ( comme c'est le cas dans le GIF que j'ai posté au dessus ) mais c'est moche car le sprite disparait aussitôt lorsque je suis hors de portée ( par rapport à l'intersection du centre ).

    Bacelar > Je le sais fort bien, mais c'est par challenge / plaisir et également parce que j'adore les rendus oldschools que je m'évertue à faire cet engine :-)

  9. #9
    Expert confirmé
    Avatar de Kannagi
    Homme Profil pro
    cyber-paléontologue
    Inscrit en
    Mai 2010
    Messages
    3 226
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cyber-paléontologue

    Informations forums :
    Inscription : Mai 2010
    Messages : 3 226
    Par défaut
    Citation Envoyé par FrostfallDelphi Voir le message
    La question est vraiment, en fin de compte, comment placer l'abscisse de mon sprite en FONCTION de l'angle de la caméra, en utilisant le fameux raisonnement que j'ai énuméré au début avec les fameux 3840 px. Car théoriquement parlant, je vois parfaitement ce que je veux faire, mais je sais pas trop comment l'appliquer en fin de compte.. Sinon je peux conserver ma première méthode fonctionnant par intersection ( comme c'est le cas dans le GIF que j'ai posté au dessus ) mais c'est moche car le sprite disparait aussitôt lorsque je suis hors de portée ( par rapport à l'intersection du centre ).
    Il faut faire plusieurs test et que tu trouve une ratio correct , vu que plus tu te rapproche et plus la valeur sur les abscisses sera importante.
    Et comme l'a dit bacelar c'est assez exotique ,donc personne va te donner une formule toute prête surtout si tu l'as fait a ta façon, après que même dans les années 80 et surtout dans les années 90 , c'est la méthode polygonal qui a le plus de succès ( que cela soit sur Atari ST , MS-DOS ou les premières borne arcade /consoles 3D ) , c'était pour dire que meme si on a plus de 50 ans ont connaîtrait peut être pas la méthode du raycasting , un exemple de chez nous Frédérick Raynal avec Alone in the Dark .

    je comprends désormais pourquoi la majeure partie des gens qui font des Raycast Engine utilisent le système de plan, ça épargne bien des problèmes de repères..
    ça aurait facilité beaucoup de choses effectivement , et a la base c'est je que je t'ai demandé de faire justement que normalement pour moi tu aurait fait un changement de repère tout simplement.

  10. #10
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 488
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 488
    Par défaut
    Sans votre tutoriel Youtube qui explique comment vous travaillez, on va pas pouvoir vous être très utile.

    Sinon, je comprends pas pourquoi l'approche "méthode fonctionnant par intersection" n'est pas utilisable, vue qu'elle fonctionne.
    Faut juste travailler sur les 4 coins du sprite plutôt que sur le centre du sprite.
    Pour les perf, on peut faire un premier filtrage par utilisation d'un cercle se collision centré sur le sprite et de rayon la "demi-longueur" du sprite.

  11. #11
    Membre averti
    Homme Profil pro
    Cimentage
    Inscrit en
    Septembre 2014
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Cimentage
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Septembre 2014
    Messages : 44
    Par défaut
    Re Bacelar, un cercle ! C'est exactement ce à quoi j'ai pensé justement ! :-D

    Je vais essayer de modifier ça en conséquence, sur mon tutorial, il n'y a pas de partie dédiée aux sprites donc ça ne vous sera d'aucune utilité pour le coup, en tout cas merci aux intervenants d'avoir pris la peine de me répondre, c'est très gentil de votre part, si la solution convient, je vous poste ici le rendu final ainsi que le code m'ayant permis de mettre ça en place !

  12. #12
    Membre averti
    Homme Profil pro
    Cimentage
    Inscrit en
    Septembre 2014
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Cimentage
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Septembre 2014
    Messages : 44
    Par défaut
    Salut à tous,

    J'ai enfin réussi à faire ce que je voulais !

    https://gyazo.com/a1713a2f0829e78f23151eccb84387b3

    Merci encore à tous pour votre aide :-]

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Besoin d'aide pour un calcul d'intersection
    Par FrostfallDelphi dans le forum C++
    Réponses: 6
    Dernier message: 08/08/2017, 10h21
  2. besoin d'aide pour le calcul d'un intégral double
    Par okitrinaw dans le forum Fortran
    Réponses: 2
    Dernier message: 18/12/2013, 19h08
  3. Réponses: 1
    Dernier message: 01/10/2008, 11h36
  4. Besoin d'aide Pour une Requete de Calcul Totaux
    Par good speed dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 08/03/2008, 15h58
  5. Besoin d'aide pour un calcul sur un site
    Par barre dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 23/02/2007, 08h36

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo