Partage
  • Partager sur Facebook
  • Partager sur Twitter

Problème avec le stencil buffer.

    2 août 2023 à 15:30:26

    Salut, j'ai suivi ce tutoriel pour sélectionner des objets avec mon éditeur de map.

    J'ai donc fait comme ceci :

     for (unsigned int i = 0; i < selectionBorders.size(); i++) {
                    delete selectionBorders[i];
                }
                selectionBorders.clear();
                std::vector<Transformable*> entities = rectSelect.getItems();
                //std::cout<<"create borders"<<std::endl;
                for (unsigned int i = 0; i < entities.size(); i++) {
                    if (dynamic_cast<Entity*>(entities[i])) {
                        Entity* border = dynamic_cast<Entity*>(entities[i])->clone();
                        for (unsigned int f = 0; f < border->getNbFaces(); f++) {
                            if (border->getFace(f)->getMaterial().getTexture() != nullptr) {
                                border->getFace(f)->getMaterial().clearTextures();
                                border->getFace(f)->getMaterial().addTexture(nullptr, sf::IntRect(0, 0, 0, 0));
                            }
                            //std::cout<<"get va"<<std::endl;
                            VertexArray& va = border->getFace(f)->getVertexArray();
                            //std::cout<<"change color"<<std::endl;
                            for (unsigned int j = 0; j < va.getVertexCount(); j++) {
    
                                va[j].color = sf::Color::Cyan;
                            }
                            //std::cout<<"color changed"<<std::endl;
                        }
                        border->setOrigin(border->getSize() * 0.5f);
                        border->setScale(Vec3f(1.1f, 1.1f, 1.1f));
                        selectionBorders.push_back(border);
                    }
                }
                //std::cout<<"tiles size : "<<tiles.size()<<std::endl;
                glCheck(glEnable(GL_STENCIL_TEST));
                glCheck(glStencilOp(GL_KEEP, GL_KEEP, GL_REPLACE));
                glStencilFunc(GL_ALWAYS, 1, 0xFF);
                glStencilMask(0xFF);
                glDisable(GL_ALPHA_TEST);
                //std::cout<<"draw transparent entities"<<std::endl;
                for (unsigned int i = 0; i < entities.size(); i++) {
                    //std::cout<<"dynamic cast test : "<<entities[i]<<std::endl;
                    if (dynamic_cast<Entity*>(entities[i])) {
                        //std::cout<<"dynamic cast : "<<entities[i]<<std::endl;
                        Entity* entity = dynamic_cast<Entity*>(entities[i])->clone();
                        //std::cout<<"make transparent"<<std::endl;
                        makeTransparent(entity);
                        window->draw(*entity);
                        delete entity;
                    }
                }
                //std::cout<<"draw borders : "<<selectionBorders.size()<<std::endl;
                glCheck(glStencilFunc(GL_NOTEQUAL, 1, 0xFF));
                glCheck(glStencilMask(0x00));
                for (unsigned int i = 0; i < selectionBorders.size(); i++) {
                    window->draw(*selectionBorders[i]);
                }
                //std::cout<<"borders drawn"<<std::endl;
                glCheck(glDisable(GL_STENCIL_TEST));
                glEnable(GL_ALPHA_TEST);

    Mais problème, ça m'affiche un mur au dessus du mur du coin là ou je n'ai pourtant rien dessiné :

    Ah oui aussi ça m'affiche pas la bordure là ou j'ai le sol de dessiné.

    Merci.

    -
    Edité par OmbreNoire 2 août 2023 à 15:32:04

    • Partager sur Facebook
    • Partager sur Twitter
      3 août 2023 à 21:46:00

      Où qu'il est le glClear ??
      • Partager sur Facebook
      • Partager sur Twitter
      Je recherche un CDI/CDD/mission freelance comme Architecte Logiciel/ Expert Technique sur technologies Microsoft.
        4 août 2023 à 21:05:30

        Je le fais dans la classe rendertarget je pense que je vais dessiner un rectangle avec une bordure autour des objets sélectionnés plutôt que le stencil buffet qui me pose problème.
        • Partager sur Facebook
        • Partager sur Twitter

        Problème avec le stencil buffer.

        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
        × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
        • Editeur
        • Markdown