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.


Sujets - gostron

Pages: [1]
1
Graphique / [RESOLU] VertexArray et déformation de texture
« le: Mai 13, 2013, 08:17:18 pm »
Bonjour,

Un petit post pour m'étonner de quelque chose :)

Je comptais faire quelques tests pour faire un effet de perspective sur des textures (en utilisant des VertexArray et en leur donnant la forme de trapèzes comme pour le mode 7 de la SNES donc)

et je fus assez surpris avec le résultat (voir pièce jointe) avec à gauche l'image déformée (mais en deux triangles, et non comme je m'y attendais ^^) et à droite l'image d'origine.

D'où ma question, peut-on faire une déformation trapèze nativement ? Est-ce moi qui m'y suis mal pris ?

Dans le doute voici le code de création de l'array :

    sf::VertexArray array(sf::Quads, 4);
    int leftHeight(100);
    int rightHeight(100);
    int topWidth(50);
    int botWidth(100);
    array[0].position = sf::Vector2f(640-topWidth, 360-leftHeight);
    array[0].texCoords = sf::Vector2f(0, 0);
    array[1].position = sf::Vector2f(640+topWidth, 360-rightHeight);
    array[1].texCoords = sf::Vector2f(tex.getSize().x, 0);
    array[2].position = sf::Vector2f(640+botWidth, 360+rightHeight);
    array[2].texCoords = sf::Vector2f(tex.getSize().x, tex.getSize().y);
    array[3].position = sf::Vector2f(640-botWidth, 360+leftHeight);
    array[3].texCoords = sf::Vector2f(0, tex.getSize().y);
 

[attachment deleted by admin]

2
Graphique / Texture::update() - problème de durée
« le: Mai 04, 2013, 11:22:12 am »
Bonjour,

J'avais déjà posté un problème concernant des problèmes de durée sur le setActive() de sf::RenderTexture (en croyant que ça venait du clear() ), j'étais donc parti sur une autre méthode pour effectuer mon éclairage, qui était de draw toutes les lumières en additif, puis de sauvegarder l'image et de la draw en multiply pour l'effet de luminosité.

Pour sauvegarder l'image, je la stocke dans un object Texture en appelant le
myTexture.update(window);

Le problème, c'est que j'observe des problèmes de latence également. Voici le code minimal :


int main()
{
    sf::Texture * _texture = new sf::Texture();
    _texture->create(1280, 720);

    sf::Window window(sf::VideoMode(1280, 720), "My window");

    // on fait tourner le programme jusqu'à ce que la fenêtre soit fermée
    while (window.isOpen())
    {
        // on inspecte tous les évènements de la fenêtre qui ont été émis depuis la précédente itération
        sf::Event event;
        while (window.pollEvent(event))
        {
            // évènement "fermeture demandée" : on ferme la fenêtre
            if (event.type == sf::Event::Closed)
                window.close();
        }
        sf::Clock myClock;
        _texture->update(window);
        qint64 time = myClock.restart().asMilliseconds();
        if ( time > 1 )
            qDebug() << "Update took too much time (" << time << "ms)";
    }

    return EXIT_SUCCESS;
}
 

et voici ce que j'obtiens en sortie :

Update took too much time ( 2 ms)
Update took too much time ( 2 ms)
Update took too much time ( 4 ms)
Update took too much time ( 4 ms)
Update took too much time ( 20 ms)
Update took too much time ( 4 ms)
Update took too much time ( 4 ms)
 

Sachant que ces messages arrivent relativement lentement (c'est-à-dire que la plupart des update() prennent moins de 1 ms.)

J'utilise Win 8, la version release de SFML 2.0 que j'ai recompilée et que j'utilise en static et je compile à l'aide de QtCreator.

Dites-moi si j'oublie quelque chose :)

3
Graphique / RenderTexture - délai sur le clear()
« le: Avril 26, 2013, 02:20:36 pm »
Bonjour,

J'ai pas mal consulté le forum pour voir si des gens expérimentaient la même chose que moi mais il m'a semblé que non. N'hésitez pas à me rediriger vers le bon post le cas échéant.

Je suis passé récemment de la SFML 1.6 à la SFML 2.0 et j'ai essayé d'utiliser les nouvelles fonctionnalités au maximum.

Concernant un affichage des lumières pour mon écran, j'utilise donc (comme indiqué sur la doc si j'ai bien compris) sf::RenderTexture pour construire mon image des lumières puis je l'imprime en BlendMultiply pour un bon résultat.

Je dois donc la "clear" entre chaque image, et le problème c'est que cette opération semble prendre assez longtemps parfois (allant jusqu'à 40ms pour clear) mais seulement parfois...

J'utilise la SFML 2.0 avec Qt 4.8.2 compilée en static, sur Windows 8, avec une GeForce 640 de chez MSI.

void MyCanvas::OnUpdate()
{
    sf::Clock clock;
    // Clear screen
    clear(sf::Color(0, 0, 64));

    clock.restart();
    myRender->clear();
    float time = clock.restart().asMilliseconds();
    if ( time > 15 )
        qDebug() << "Clear RenderTexture took too much time (" << time << "ms)";

    // Process events
    sf::Event Event;
    while (pollEvent(Event))
    {
        if ( Event.type == sf::Event::Closed ) {
            sf::RenderWindow::close();
        }
    }
}
 

Avec une sortie console

Démarrage de .\demoClear.exe...Qt: Untested Windows version 6.2 detected!
Clear RenderTexture took too much time ( 32 ms)
Clear RenderTexture took too much time ( 16 ms)
Clear RenderTexture took too much time ( 23 ms)
 

Pages: [1]