Bienvenue, Invité. Merci de vous connecter ou de vous inscrire. Avez-vous oublié d'activer ?

Voir les contributions

Cette section vous permet de consulter les contributions (messages, sujets et fichiers joints) d'un utilisateur. Vous ne pourrez voir que les contributions des zones auxquelles vous avez accès.


Messages - Slash94

Pages: « Précédente 1 [2] 3 4 ... 6 Suivante »
16
Salut Guillaume  :D

Effectivement, Gyazo > All !

Voici une petite idée de l'avancement du projet :



17
Projets SFML / Re: [Vidéo]Zelda Arena Online 2D
« le: Septembre 05, 2017, 09:06:26 pm »
Merci à vous les gars ! :-)

18
Salut à tous :-]

Depuis environ 3 semaines, je travaille de A à Z à la construction d'un moteur de raycasting, actuellement j'ai déjà terminé les choses suivantes, comme je l'ai mentionné dans le descriptif de ma vidéo :

-Ombrages des côtés latéraux
-Correction de la distorsion visuelle "Fisheye effect"
-Amélioration de la résolution des textures (64*64 au lieu de 32*32)
-Ouverture / Fermeture dynamique des portes
-Affichage de sprites simples & de sprites multifaces sur 8 angles différents

Le FPS oscille entre 55 et 60 , la capture vidéo l'a un peu saccadé mais IRL c'est parfaitement fluide.

Comme pour mon précédent projet, Zelda Arena Online, le jeu sera jouable à 4 en chacun pour soi / en deathmatch.

Voici mon projet au stade où il en est actuellement :



J'ai tout septembre en vacances, donc je devrais devoir avancer le projet assez vite, je vous tiendrais au courant ici au fur & à mesure de l'avancement :-)

Si vous avez des idées / suggestions, n'hésitez pas !

19
Projets SFML / Re: Série de tutoriaux sur le Raycasting avec la SFML.
« le: Septembre 04, 2017, 12:58:42 pm »
Ah oui, effectivement, je n'avais pas vu la réponse qui date d'avril :-)

20
Projets SFML / Re: Série de tutoriaux sur le Raycasting avec la SFML.
« le: Septembre 04, 2017, 12:05:10 pm »
Salut à toi CPL Bator, c'est gentil, merci bien :-]

PS : Tu n'étais pas sur le forum 3DGC/DarkBasic il y a 12/13 ans de cela ?!

21
Projets SFML / Série de tutoriaux sur le Raycasting avec la SFML.
« le: Septembre 04, 2017, 10:34:26 am »
Salut à tous !

J'ai publié ce matin le premier volet d'une série de plusieurs vidéos qui seront dédiées au Raycasting, n'ayant moi-même trouvé aucun tuto en français là-dessus, j'ai décidé de franchir le cap et d'en produire si ça peut intéresser & aider des gens ici :-]



Si vous avez des questions, je suis là pour ça !

22
Projets SFML / [Vidéo]Zelda Arena Online 2D
« le: Août 15, 2017, 12:32:48 pm »
Salut à tous :-)

Voici mon projet jouable à 4 :

Je compte l'améliorer ultérieurement, il est fonctionnel dans l'ensemble, si vous voulez les sources, n'hésitez pas à me demander !

Merci de me dire ce que vous en pensez :-)

23
Graphique / Re: Besoin d'aide pour un calcul d'intersection..
« le: Août 14, 2017, 10:34:47 am »
Donc, grâce aussi à vos conseils, j'ai réussi à mettre en place mon premier système de raycasting :-)




24
Graphique / Re: Besoin d'aide pour un calcul d'intersection..
« le: Août 04, 2017, 11:18:18 pm »
Waaw..
Ton code est absolument SPLENDIDE !!!!! Merci infiniment !

25
Graphique / Re: Besoin d'aide pour un calcul de trajectoire...
« le: Août 03, 2017, 09:37:43 pm »
Salut à toi Kimci,

J'ai beau avoir retourné Google, des forums francophones comme anglophones, des vidéos sur YouTube dans toutes les langues imaginables, je n'ai absolument RIEN trouvé de convaincant sur la manière dont effectuer un tel calcul avec des coordonnées de vecteurs tel que :
d1.x1, d1.y1, d1.x2, d1.y2 et d2.x1, d2.y1, d2.x2, d2.y2

J'aimerais réellement avoir une explication CLAIRE & NET ( si possible en français ) sur le FONCTIONNEMENT d'un tel calcul avec vraiment toutes les explications possibles sans théorie inutile & lourde..

La plupart des vidéos que je peux voir sur le net sont des résolutions d'équation scolaires qui n'ont aucun rapport avec le type de coordonnées que je veux utiliser moi...

26
Graphique / Re: Besoin d'aide pour un calcul de trajectoire...
« le: Août 01, 2017, 09:30:10 am »
Salut à vous les gars ! Désolé de ne pas m'être manifesté plus tôt..!

Je vous remercie énormément pour vos contributions, je vais de ce pas étudier ça DE SUITE ! :-]



EDIT :

Alors voilà, pour simplifier le tout afin d'apprendre bien doucement, j'ai remplacé le carré par un autre segment, le but étant de trouver le point d'intersection entre le segment que je déplace moi-même avec la souris et le clavier et le second qui est placé par défaut pour le test.

J'ai tenté d'appliquer ton algo mais manifestement ça ne semble pas fonctionner correctement... l'intersection est détectée uniquement lorsque je suis dans une position précise :

Dans ces deux cas de figure, il ne se passe rien... ( voir consoles )



Ou encore



Mais quand je me place là, j'ai quelque chose ( voir console )



Voici mon code :

#include <iostream>
#include <math.h>

#include <SFML/Graphics.hpp>

const float PI = 3.14;

bool intersects(sf::Vector2f L1P1, sf::Vector2f L1P2, sf::Vector2f L2P1, sf::Vector2f L2P2,
                sf::Vector2f &coords);

int main()
{
    sf::RenderWindow renderWindow(sf::VideoMode(800,600,32),"Raycasting Attempt", sf::Style::Titlebar);
    renderWindow.setFramerateLimit(60);

    sf::Vector2f m_coords = sf::Vector2f(0,0);

    ///COORDONNEES DU TRIANGLE///
    float pic = 15;

    ///VITESSE DE DEPLACEMENT///
    float speed = 3;

    ///POSITION DU TRIANGLE ET SON DIFFERENTIEL
    sf::Vector2f tPos;
    sf::Vector2i diff;

    sf::ConvexShape triangle(3);

    triangle.setPoint(0, sf::Vector2f(pic,NULL));
    triangle.setPoint(1, sf::Vector2f(pic*2,pic*2));
    triangle.setPoint(2, sf::Vector2f(NULL,pic*2));

    triangle.setOrigin(sf::Vector2f(pic, pic));

    ///LA LIGNE DE PROJECTION///
    sf::Vertex lineProjLeft[] =
    {
        sf::Vertex(sf::Vector2f(0,0)),
        sf::Vertex(sf::Vector2f(150,150))
    };

    ///LA LIGNE DE TEST///

    sf::Vertex lineTest[] =
    {
        sf::Vertex(sf::Vector2f(100,180)),
        sf::Vertex(sf::Vector2f(220,120))
    };

    while (renderWindow.isOpen())
    {
        sf::Event event;
        while (renderWindow.pollEvent(event))
        {
            switch(event.type)
            {
            case sf::Event::Closed:
                renderWindow.close();
                break;
            case sf::Event::KeyReleased:
                if (event.key.code == sf::Keyboard::Escape)
                    renderWindow.close();
            break;
            }
        }

        ///DEPLACEMENT FLECHES///
        if (sf::Keyboard::isKeyPressed(sf::Keyboard::Up))
            tPos.y-=speed;
        if (sf::Keyboard::isKeyPressed(sf::Keyboard::Down))
            tPos.y+=speed;
        if (sf::Keyboard::isKeyPressed(sf::Keyboard::Left))
            tPos.x-=speed;
        if (sf::Keyboard::isKeyPressed(sf::Keyboard::Right))
            tPos.x+=speed;

        lineProjLeft[0].position.x = tPos.x;
        lineProjLeft[0].position.y = tPos.y;

        triangle.setPosition(tPos);

        ///CALCUL DU DIFFERENTIEL POUR L'ANGLE///
        diff.x = sf::Mouse::getPosition(renderWindow).x - tPos.x;
        diff.y = sf::Mouse::getPosition(renderWindow).y - tPos.y;

        float angle = (atan2(diff.x, diff.y)) * 180 / PI;

        triangle.setRotation(-(angle+180));

        lineProjLeft[1].position.x = sf::Mouse::getPosition(renderWindow).x;
        lineProjLeft[1].position.y = sf::Mouse::getPosition(renderWindow).y;

        if (intersects(lineProjLeft[0].position, lineProjLeft[1].position,
                       lineTest[0].position, lineTest[1].position, m_coords))
        {
            std::cout << " x : " << m_coords.x << std::endl;
            std::cout << " y : " << m_coords.y << std::endl;
        }

        renderWindow.clear();

        renderWindow.draw(triangle);
        renderWindow.draw(lineProjLeft, 2, sf::Lines);
        renderWindow.draw(lineTest, 2, sf::Lines);

        renderWindow.display();
    }
}

bool intersects(sf::Vector2f L1P1, sf::Vector2f L1P2, sf::Vector2f L2P1, sf::Vector2f L2P2,
                sf::Vector2f &coords)
{
    float P1 = (L1P2.x - L1P1.x) / (L1P2.y - L1P1.y);
    float PP1 = L1P1.y - (P1*L1P1.x);

    float P2 = (L2P2.x - L2P1.x) / (L2P2.y - L2P1.y);
    float PP2 = L2P1.y - (P1*L2P1.x);

    if (P1 == P2)
        return false;

    float x = (PP2 - PP1) / (P1 - P2);

    if (x<L1P1.x || x>L1P2.x)
        return false;

    if (x<L2P1.x || x>L2P2.x)
        return false;

    coords.x = x;
    coords.y = (P1 * x) + PP1;

    return true;
}
 

Merci encore de bien vouloir m'aider :-)

27
Graphique / Re: Besoin d'aide pour un calcul de trajectoire...
« le: Juillet 25, 2017, 11:05:55 pm »
Bonsoir à toi Kernel, merci beaucoup pour ton obstination :-)

Je saisi d'ores & déjà davantage le concept, mais à quoi sert le Vector2f _intersects ? d'où vient-il ?

kimci86 > ta méthode à l'air plus archaïque ( et elle a le mérite de moins piquer les yeux :-P ) mais pourrais-tu me décrire davantage le fonctionnement de ton code ?
J'ai toujours été une daube en maths, j'ai une folle envie de m'y perfectionner mais j'ai beau multiplier les recherches sur Google ou Youtube, je ne tombe que sur des résolutions d'équations à base de

droite d1 : y = 2x-6
droite d2 : y = -5x+1


etc.. rien à voir avec mes repères à moi qui sont plutôt les suivants :

line1.x1 = 20
line1.y1 = 20
line1.x2 = 138
line1.y2 = 169

line2.x1 = 100
line2.y1 = 60
line2.x2 = 80
line2.y2 = 140

Je ne vois pas à quoi servent leurs " x " à tout bout de champs dans leurs explications...

Merci beaucoup à vous en tout cas les gars, j'attends avec impatience vos éclaircissements :-)

28
Graphique / Re: Besoin d'aide pour un calcul de trajectoire...
« le: Juillet 24, 2017, 01:27:11 pm »
Kernel Panik > j'ai essayé de passer en revue le code que tu as proposé à plusieurs reprises et je dois admettre que j'ai du mal à comprendre son fonctionnement, j'aimerais d'ores & déjà comprendre le fonctionnement d'une fonction avant de l'utiliser car je déteste copier-coller bêtement du code tout fait, j'ai pas le sentiment d'être capable de le refaire seul et je trouve ça frustrant.

J'ai trouvé exactement le principe que j'aimerais mettre en place ici :



Mais je trouve aucun cours de mathématiques qui vulgariserait au plus haut point ce type de calcul de manière à enseigner des non-initiés comme moi...

29
Graphique / Re: Besoin d'aide pour un calcul de trajectoire...
« le: Juillet 23, 2017, 09:20:02 pm »
Merci énormément Kernel Panik, je vais étudier ton code tout de suite !

Laurent > Salut à toi, quel type de mot-clefs pourrais-je taper sur Google pour avoir un résultat me rapprochant de ce que je désire faire ?

30
Graphique / Besoin d'aide pour un calcul d'intersection..
« le: Juillet 23, 2017, 01:21:48 pm »
Salut à tous :-)

Je viens vous voir car j'aimerais que vous me donniez la logique qui me permettrait de détecter si un carré est dans un champ de ligne..

Je m'explique, je souhaiterais faire en sorte que lorsque le rayon passe par le carré, que celui-ci devienne rouge et qu'il redevienne blanc lorsque ce n'est plus le cas, cela me semblait d'une simplicité enfantine à mettre en place, d'ailleurs ça doit être le cas sur le plan pratique, mais sur le plan calcul, je suis un peu perdu..

Idée du rendu que j'aimerais obtenir en collision ( mon code ne marche pas, j'ai colorié en rouge sur paint pour vous donner l'idée )



Hors collision :



Voici mon code ( il est dégueulasse et en un seul bloc, c'est juste un code de test à l'arrache pour trouver cet algo, justement !)

#include <iostream>
#include <math.h>
 
#include <SFML/Graphics.hpp>
 
const float PI = 3.14;
 
int main()
{
    sf::RenderWindow renderWindow(sf::VideoMode(800,600,32),"Raycasting Attempt", sf::Style::Titlebar);
    renderWindow.setFramerateLimit(60);
 
    ///COORDONNEES DU TRIANGLE///
    float pic = 15;
 
    ///VITESSE DE DEPLACEMENT///
    float speed = 3;
 
    ///POSITION DU TRIANGLE ET SON DIFFERENTIEL
    sf::Vector2f tPos;
    sf::Vector2i diff;
 
    sf::ConvexShape triangle(3);
 
    triangle.setPoint(0, sf::Vector2f(pic,NULL));
    triangle.setPoint(1, sf::Vector2f(pic*2,pic*2));
    triangle.setPoint(2, sf::Vector2f(NULL,pic*2));
 
    triangle.setOrigin(sf::Vector2f(pic, pic));
 
    ///LA LIGNE DE PROJECTION///
    sf::Vertex lineProjLeft[] =
    {
        sf::Vertex(sf::Vector2f(0,0)),
        sf::Vertex(sf::Vector2f(150,150))
    };
 
    ///LE CARRE DE TEST///
    sf::ConvexShape quad(4);
 
    quad.setPoint(0, sf::Vector2f(0,0));
    quad.setPoint(1, sf::Vector2f(25,0));
    quad.setPoint(2, sf::Vector2f(25,25));
    quad.setPoint(3, sf::Vector2f(0,25));
 
    quad.setPosition(sf::Vector2f(200,200));
 
    while (renderWindow.isOpen())
    {
        sf::Event event;
        while (renderWindow.pollEvent(event))
        {
            switch(event.type)
            {
            case sf::Event::Closed:
                renderWindow.close();
                break;
            case sf::Event::KeyReleased:
                if (event.key.code == sf::Keyboard::Escape)
                    renderWindow.close();
            break;
            }
        }
 
        ///DEPLACEMENT FLECHES///
        if (sf::Keyboard::isKeyPressed(sf::Keyboard::Up))
            tPos.y-=speed;
        if (sf::Keyboard::isKeyPressed(sf::Keyboard::Down))
            tPos.y+=speed;
        if (sf::Keyboard::isKeyPressed(sf::Keyboard::Left))
            tPos.x-=speed;
        if (sf::Keyboard::isKeyPressed(sf::Keyboard::Right))
            tPos.x+=speed;
 
        lineProjLeft[0].position.x = tPos.x;
        lineProjLeft[0].position.y = tPos.y;
 
        triangle.setPosition(tPos);
 
        ///CALCUL DU DIFFERENTIEL POUR L'ANGLE///
        diff.x = sf::Mouse::getPosition(renderWindow).x - tPos.x;
        diff.y = sf::Mouse::getPosition(renderWindow).y - tPos.y;
 
        float angle = (atan2(diff.x, diff.y)) * 180 / PI;
 
        triangle.setRotation(-(angle+180));
 
        lineProjLeft[1].position.x = sf::Mouse::getPosition(renderWindow).x;
        lineProjLeft[1].position.y = sf::Mouse::getPosition(renderWindow).y;
 
        if (lineProjLeft[1].position.x > quad.getPosition().x && lineProjLeft[0].position.x < quad.getPosition().x
            && lineProjLeft[1].position.y > quad.getPosition().y && lineProjLeft[0].position.y < quad.getPosition().y +25)
        {
            quad.setFillColor(sf::Color::Red);
        } else {
            quad.setFillColor(sf::Color::White);
        }
 
        renderWindow.clear();
 
        renderWindow.draw(triangle);
        renderWindow.draw(lineProjLeft, 2, sf::Lines);
        renderWindow.draw(quad);
 
        renderWindow.display();
    }
}

La longueur de la ligne dépend de la position de la souris, si vous avez AUSSI une idée également de comment stopper la longueur de la ligne dés qu'il rencontre le cube, je suis preneur, mais ce n'est pas ma préoccupation première ( celle-ci étant celle que j'ai mentionné au début ! )

Merci à vous pour votre précieuse aide :-)

Pages: « Précédente 1 [2] 3 4 ... 6 Suivante »