Bienvenue, Invité. Merci de vous connecter ou de vous inscrire.
Avez-vous perdu votre e-mail d'activation ?

Auteur Sujet: Projet d'extension de SFML. (SFML 3D)  (Lu 10912 fois)

0 Membres et 1 Invité sur ce sujet

Lolilolight

  • Hero Member
  • *****
  • Messages: 1232
    • Voir le profil
Projet d'extension de SFML. (SFML 3D)
« le: Novembre 06, 2013, 12:02:54 pm »
Salut,

j'ai trouvé que ça pourrait être de sympa de pouvoir dessiner des objets en 3D mais avec la simplicité qu'offre SFML.

C'est donc ce pourquoi j'ai décidé de commencer à coder une nouvelle bibliothèque se basant sur SFML, et j'en ai profiter pour mixer tout cela avec du code source de mon autre projet.

Je compte rajouter aussi de la génération de terrain, le chargements de différents formats d'objets 3D (.obj, .md2, .3ds, etc...), de la gestion de collision, etc... (Mais ça se sera pour bien plus tard car je dois terminé mon autre projet)

Etant donné que se projet se base sur la SFML, et utilise SFML, la syntaxe sera la même que celle présentée dans les tutoriels de la SFML.

Il y a juste que les objets transformables et dessinables devront hérité de DynamicDrawableEntity et les objets dessinable non transformable de DrawableEntity.

Un autre changement aussi, pour combiner les transformations si vous voulez faire des graphes de scene, il faudra mettre states.combinedTransform à true, au lieu de combiner directement les transformations dans la méthode draw. (Ceci à été fait pour des raisons d'optimisation, en laissant le soin à opengl (et non au framework) de combiner lui même les transformations)

Bref, voici un exemple de code source qui dessine un cube avec le framework avec une caméra "freefly".

#include "myRenderWindow.h"
#include <SFML/Window/Event.hpp>

using namespace sf3;
MyRenderWindow::MyRenderWindow (Vec2f size, std::string title) :
    RenderWindow(sf::VideoMode(size.x, size.y), title, Style::Default, ContextSettings(32)),
    cube(Vec3f(-1, 1, 1), 2, 2, 2, Color(255, 0, 0)) {
    cube.rotate(45,Vec3f(0, 1, 0));
    view = getDefaultView();
    view->move(0, 0, 10);
    speed = 10.f;
    sensivity = 0.2f;
    oldX = Mouse::getPosition(*this).x;
    oldY = Mouse::getPosition(*this).y;
    verticalMotionActive = false;
    verticalMotionDirection = 0;
}
void MyRenderWindow::show () {
    while(isOpen()) {

        sf::Event event;
        while (pollEvent(event))
        {
            if (event.type == sf::Event::Closed)
            {
                close();
            }
            else if (event.type == sf::Event::Resized)
            {
                // on ajuste le viewport lorsque la fenêtre est redimensionnée
                view->reset(FloatRect(0, 0, event.size.width, event.size.height));
            } else if (event.type == sf::Event::MouseMoved && sf::Mouse::isButtonPressed(Mouse::Right)) {
                int relX = event.mouseMove.x - oldX;
                int relY = event.mouseMove.y - oldY;
                int teta = view->getTeta() - relX;
                int phi = view->getPhi() - relY;
                view->rotate(teta, phi);
                oldX = event.mouseMove.x;
                oldY = event.mouseMove.y;
            } else if (event.type == sf::Event::MouseWheelMoved) {
                if (event.mouseWheel.delta > 0) {
                    verticalMotionActive = true;
                    verticalMotionDirection = 1;
                    timeBeforeStoppingVerticalMotion = milliseconds(250);
                    clock2.restart();
                } else if (event.mouseWheel.delta < 0) {
                    verticalMotionActive = true;
                    verticalMotionDirection = -1;
                    timeBeforeStoppingVerticalMotion = milliseconds(250);
                    clock2.restart();
                }

            }
        }
        if (sf::Keyboard::isKeyPressed(sf::Keyboard::Up)) {
            view->move(view->getForward(), speed * clock.getElapsedTime().asSeconds());
        }
        if (sf::Keyboard::isKeyPressed(sf::Keyboard::Down)) {
            view->move(view->getForward(), -speed * clock.getElapsedTime().asSeconds());
        }
        if (sf::Keyboard::isKeyPressed(sf::Keyboard::Right)) {
            view->move(view->getLeft(), -speed * clock.getElapsedTime().asSeconds());
        }
        if (sf::Keyboard::isKeyPressed(sf::Keyboard::Left)) {
            view->move(view->getLeft(), speed * clock.getElapsedTime().asSeconds());
        }
        oldX = Mouse::getPosition(*this).x;
        oldY = Mouse::getPosition(*this).y;
        if (clock2.getElapsedTime() > timeBeforeStoppingVerticalMotion) {
            verticalMotionActive = false;
            verticalMotionDirection = 0;
        } else {
            timeBeforeStoppingVerticalMotion -= clock2.getElapsedTime();
        }
        view->move(0, verticalMotionDirection * speed * clock2.getElapsedTime().asSeconds(), 0);
        clear(Color::Black);
        draw(cube);
        display();
        clock.restart();
    }
}
 
#include "Graphics/myRenderWindow.h"
int main() {
    MyRenderWindow renderWindow(Vec2f(800, 600),"SFML3D");
    renderWindow.show();
    return 0;
}
 

Pour le moment le framework ne fait pas grand chose mais des nouvelles fonctionnalités seront rajoutée au fur et à mesure.

PS : je compte aussi améliorer la partie réseau de la SFML pour pouvoir faire des paquets crypté avec openssl.
« Modifié: Novembre 06, 2013, 01:00:48 pm par Lolilolight »

Lo-X

  • Hero Member
  • *****
  • Messages: 618
    • Voir le profil
    • My personal website, with CV, portfolio and projects
Re : Projet d'extension de SFML. (SFML3)
« Réponse #1 le: Novembre 06, 2013, 12:11:02 pm »
Peux-tu retirer "SFML3" du titre car ton projet n'a rien à voir avec la version 3 de SFML

Lolilolight

  • Hero Member
  • *****
  • Messages: 1232
    • Voir le profil
Re : Projet d'extension de SFML. (SFML 3D)
« Réponse #2 le: Novembre 06, 2013, 12:23:57 pm »
Oui en effet ça n'a rien à voir avec la version 3 de SFML.

Je vais donc modifier le titre et mettre SFML 3D à la place. (je n'ai pas trouvé d'autre nom pour l'instant donc ça se peut que ça change plus tard)

Cmdu76

  • Full Member
  • ***
  • Messages: 194
    • Voir le profil
Re : Projet d'extension de SFML. (SFML 3D)
« Réponse #3 le: Novembre 13, 2013, 02:28:02 pm »
Tu pourrais mettre le code sur GitHub ou autre afin qu'il soit disponible n'importe quand et qu'on puisse t'aider au passage ?

Sinon au niveau du titre, SF3DML serait plus adapté mais c'est plus dur à dire xD
« Modifié: Novembre 13, 2013, 07:35:14 pm par Cmdu76 »

Lolilolight

  • Hero Member
  • *****
  • Messages: 1232
    • Voir le profil
Re : Projet d'extension de SFML. (SFML 3D)
« Réponse #4 le: Novembre 17, 2013, 07:12:30 pm »
Citer
Tu pourrais mettre le code sur GitHub ou autre afin qu'il soit disponible n'importe quand et qu'on puisse t'aider au passage ?

Sinon au niveau du titre, SF3DML serait plus adapté mais c'est plus dur à dire xD

J'ai une préférence pour SFML 3D quand même car c'est plus facile à dire.

Ok, oui, je mettrai du code source sur github bientôt, car, un peu d'aide ça ne serait pas mal. :)

G.

  • Hero Member
  • *****
  • Messages: 1593
    • Voir le profil
Re : Projet d'extension de SFML. (SFML 3D)
« Réponse #5 le: Novembre 17, 2013, 07:44:09 pm »
Ou un tout autre nom, vu que ça n'a pas grand chose à voir avec la SFML ça évitera la confusion.

Lolilolight

  • Hero Member
  • *****
  • Messages: 1232
    • Voir le profil
Re : Projet d'extension de SFML. (SFML 3D)
« Réponse #6 le: Novembre 17, 2013, 08:32:12 pm »
Ok mais pour l'instant je laisse ce nom là, car, je n'ai pas encore trouvé un autre nom. (Sinon ça portera un nom qui n'a rien à voir avec SFML comme par exemple Irrlicht qui n'a rien à voir avec SFML)

Mais c'est vrai que ça peut prêter à confusion, car, la syntaxe est fort semblable à SFML, mais ça n'aura rien à voir avec SFML, ça utilisera SFML pour faire un peu ce que fait Irrlicht mais je compte essayer de faire un truc plus à jour quand même avec le c++11. (Et un framework plus évolué que ceux déjà existant, sinon, le projet n'aura pas grand intérêt)
« Modifié: Novembre 17, 2013, 08:34:53 pm par Lolilolight »

Lolilolight

  • Hero Member
  • *****
  • Messages: 1232
    • Voir le profil
Re : Projet d'extension de SFML. (SFML 3D)
« Réponse #7 le: Novembre 18, 2013, 06:13:36 pm »
Salut, ce week-end je vais tout mettre sur ghit-hub (les sources de ce projets-ci mais aussi celles de mon autre projet en 2D iso)

Toute aide au niveau développement ou bien au niveau graphisme même sera la bienvenue. :)

Cmdu76

  • Full Member
  • ***
  • Messages: 194
    • Voir le profil
Re : Projet d'extension de SFML. (SFML 3D)
« Réponse #8 le: Novembre 21, 2013, 12:11:41 am »
J'irais voir les repo si j'ai le temps :)

Nexus

  • SFML Team
  • Hero Member
  • *****
  • Messages: 6287
  • Thor Developer
    • Voir le profil
    • Bromeon
Re : Projet d'extension de SFML. (SFML 3D)
« Réponse #9 le: Novembre 21, 2013, 10:22:07 pm »
C'est un projet intéressant. Il y a quelque temps qu'un autre utilisateur a commencé un projet pareil, sf3d. Malhereusement cela n'est plus developpé activement, mais il contient déjà beaucoup de fonctionnalité. Laisse-toi inspirer...

Si tu lis le fil de sf3d, tu vais voir qu'il y a des autres gens qui sont aussi intéressés dans une bibliothèque 3D -- peut-être vous pouvez collaborer? :)

Et oui, un nom plus original ne serait pas mal ;)
« Modifié: Novembre 21, 2013, 10:31:27 pm par Nexus »
Zloxx II: action platformer
Thor Library: particle systems, animations, dot products, ...
SFML Game Development:

Lolilolight

  • Hero Member
  • *****
  • Messages: 1232
    • Voir le profil
Re : Projet d'extension de SFML. (SFML 3D)
« Réponse #10 le: Novembre 24, 2013, 03:48:32 pm »
Bon finalement je n'ai malheureusement pas eu le temps cette semaine, donc, je mettrai ça en ligne le week-end prochain. (En espérant que cette semaine j'aie plus de temps)
Car je dois encore mettre toutes mes classes dans un namespace, décider du nom de la librairie, je pensais à quelque chose comme sfgl (simple and fast game library) mais encore une fois ça ressemble à sfml et bien sûr compiler et tester la librairie.

Je fais cette librairie pour mon jeux en 2D que je passerai en 3D plus tard (donc il y a aussi pleins d'ajouts que j'ai fait pour pouvoir créer des jeux en 2D plus facilement (création de lumières, collisions des entités avec la lumière,)
Ceci m'évitera de devoir remettre à jour le code source de l'éditeur de map, du serveur et du client à chaque fois que je fais une mise à jour du framework.

Bref pour l'instant elle est intéressante en effet, elle permet de créer et de dessiner n'importe quelle type d'entité et de les récupérer dans une grille en fonction du centre de la vue, se déplacer dans une vue 3D, se déplacer sur une map en gérant les collisions, communiquer en réseau de manière sécurisée, charger des ressources et les libérer grâce à un ressource holder, etc...
Et plus tard je compre rajouté la génération de terrain en 3D, l'éclairage et l'ombrage en 3D ainsi que les collisions et d'autre type de structure que la grille. (Quadtree et arbre binaire)





Lolilolight

  • Hero Member
  • *****
  • Messages: 1232
    • Voir le profil
Re : Projet d'extension de SFML. (SFML 3D)
« Réponse #11 le: Mai 17, 2014, 01:00:15 pm »
Puisque il y en a qui m'ont posé la question, je tiens à préciser que j'ai inclus ce projet dans mon nouveau projet ODFAEG :
http://en.sfml-dev.org/forums/index.php?topic=13779.0