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 - Armulis

Pages: [1] 2 3 Suivante »
1
J'ai l'impression qu'on se comprend pas tout-à-fait.
Je veux faire ça (voir exemple ci-dessous). Le but est que je n'aie à dessiner que la première et la dernière image, et que le logiciel génère lui-même l'image centrale à-partir des deux autres.

2
OK pour le fragment shader, je vais regarder.
On m'a parlé de "draw" mes deux images dans une "RenderTexture" en utilisant le mode "BlendMultiply" pour les "mélanger". C'est une possibilité aussi?

3
Un mouvement n'est pas un déplacement. Je parle de combler les espaces entre deux "images" du même personnage, qui n'est pas dans la même position d'une image à l'autre (normal!). Mais le sprite ne change ni de taille, ni de position.
Et ce que je veux faire, c'est fluidifier un mouvement de 12 images par secondes, en faisant le remplissage nécessaire pour avoir 24 images à afficher (et dont une moitié sera construite en utilisant l'autre moitié).

4
OK... j'ai jamais entendu parler de barycentre, ça commence bien.
Une image opaque et l'autre transparente, j'y ai pensé. Mais il y a un problème:

Imaginons que mon animation est une boule qui décrit un cercle en flottant dans les airs. Dans cet exemple, l'animation est faite sans déplacer de sprite (qui est essentiellement transparent puisqu'il englobe toute la zone "occupable" par la boule.
Le problème que je pressens, c'est que pendant la transition entre deux images, on verra toujours la boule à son emplacement de départ (celui de l'image numéro un), et en même temps, on en verra une "deuxième" (celle de l'image numéro deux) apparaître un peu à-côté.
Autrement-dit, cette méthode rend l'image "précédente" prépondérante vis-à-vis de l'image "suivante".
Moi je veux que la première image disparaisse (fondu), pendant que la deuxième apparaît (fondu inverse), mais que la "somme" des deux soit "100% d'opacité". Sinon, je crains que les objets aient l'air de devenir transparents pendant ces transitions.
Si on est à 99% d'opacité ça me dérange pas. Mais les essaie que j'ai faits sont de l'ordre de 60%; c'est inacceptable =)

5
Bonjour!

Concrètement, le problème c'est que si je superpose deux images dont l'opacité est 128/255, le résultat n'est pas opaque.

Je cherche une méthode permettant de savoir quelle opacité (de deux images) permet d'obtenir un ensemble opaque.
Mais je ne peux pas chercher cette solution par tâtonnement, puisque je veux aussi pouvoir faire un système de pondération (pour avoir un résultat opaque en utilisant deux images dont l'une des deux fois plus opaque que l'autre).

C'est plus clair?

6
Bonjour!

J'utilise SFML pour réaliser des animations image-par-image, et jusque-là ça va pas mal.
Mais là, je m'attaque à un truc un peu coriace, et j'ai besoin de conseils.

Comme mes animations font 24 images par-seconde, ça me donne beaucoup de travail de dessin, et parfois pour pas grand chose.
Je voudrais donc implémenter une fonction de "remplissage" pour n'avoir à dessiner qu'une image sur deux (pour les animations qui le permettent raisonnablement).

Le fonctionnement doit être le suivant:
- Afficher la première image opaque, seule.
- Afficher la première image semi-transparente, et la deuxième image semi-transparente par-dessus.
- Afficher la deuxième image opaque, seule.
- Afficher la deuxième image semi-transparente, et la troisième image semi-transparente par-dessus.
- Afficher la troisième image opaque, seule.
-...

Vous imaginez bien que je peux jouer sur la pondération pour faire des "remplissages" plus longs ou asymétriques. C'est justement ce potentiel que je veux ajouter à mon programme (même si le rendu visuel risque de souffrir si on pousse trop).

J'ai fait des essais sur un logiciel de dessin, et apparemment, la superposition de deux images avec 50% d'opacité donne une image semi-transparente.
Est-il possible (à-part y aller à-tâton) de "prédire" l'opacité d'une pile d'images non-opaques?
Si je le cherche par tâtonnement, il faudra que je fasse un tâtonnement par cas (et si je fais des transitions complexes ou des effets visuels, ça va me donner vraiment beaucoup de boulot).
Note: j'ai déjà pensé à faire un algorithme qui "monte" les opacités jusqu'à ce que le rendu soit opaque, mais ça risque de plomber ma vitesse d'exécution (et pour les images qui ne sont pas opaques partout, ça sent déjà le bug).

Question subsidiaire: l'ordre d'empilement donne-t-il une prépondérance à l'image du dessus?

Voilà. C'est un problème un peu théorique, mais je pense qu'il y a de quoi apprendre pas mal de trucs intéressants.

7
Fenêtrage / Re : Passer en mode plein écran sans étirer
« le: Octobre 16, 2014, 03:51:03 pm »
Salut!
J'ai utilisé sf::View et la fonction "Viewport()" pour faire des bandes noires. Avec ce bout de programme, l'image est ajustée à la fenêtre en laissant des bandes noires horizontales ou verticales, selon la proportion entre la fenêtre et l'image.
Voici l'extrait:
// Je passe la déclaration des variables; leur nom devrait être explicite


// Dimensions du "output" de "view_1"
View_1.setSize(largeur_ecran, hauteur_ecran);


// Position du centre du "input" de "view_1"
View_1.setCenter(largeur_image/2, hauteur_image/2);


// Déterminer s'il faut des bandes horizontales ou verticales
if (hauteur_ecran/largeur_ecran < hauteur_image/largeur_image)
// Fenêtre plus large que l'image (relativement à leur hauteur)
// Bandes à-gauche et à-droite
{   // Définir la proportion entre le "input" et le "output" de "view_1" pour que le haut et le bas correspondent
     View_1.zoom(hauteur_image/hauteur_ecran);


    // Ne représenter que la zone "input" (et pas un élément extérieur pouvant par-exemple glisser dedans), et la représenter au-centre de la fenêtre
    View_1.setViewport({(1-largeur_image*hauteur_ecran/hauteur_image/largeur_ecran)/2, 0, largeur_image*hauteur_ecran/hauteur_image/largeur_ecran, 1});
}
else
// Fenêtre plus haute que l'image (relativement à leur largeur), ou formats équivalents
// Bandes en-haut et en-bas
{   // Définir la proportion entre le "input" et le "output" de "view_1" pour que la gauche et la droite correspondent
     View_1.zoom(largeur_image/largeur_ecran);


    // Ne représenter que la zone "input" (et pas un élément extérieur pouvant par-exemple glisser dedans), et la représenter au-centre de la fenêtre
    View_1.setViewport({0, (1-hauteur_image*largeur_ecran/largeur_image/hauteur_ecran)/2, 1, hauteur_image*largeur_ecran/largeur_image/hauteur_ecran});
}


// Attribuer "view_1" à "RenderWindow_1"; je crois qu'il n'y a pas besoin de le refaire en cas de modification de "view_1", mais il faudrait vérifier
RenderWindow_1.setView(View_1);
 

8
Graphique / Re : Pointeur "RenderTexture" : possible?
« le: Octobre 14, 2014, 10:28:06 pm »
Comme ça?
spriteLayer.setTexture((*layers[0][index].RENDERTEXTURE).getTexture());

Oui, ça a l'air de marcher... Je savais pas ça sur la priorité des opérations. Merci beaucoup!

9
Graphique / Pointeur "RenderTexture" : possible?
« le: Octobre 14, 2014, 10:00:13 pm »
Salut!
J'essais d'afficher une image construite sur une RenderTexture, mais il n'y a pas moyen de passer le compilateur sans rencontrer des messages d'erreur d'un kilomètre.
Voici la ligne qui pose problème:
spriteLayer.setTexture(*layers[0][index].RENDERTEXTURE.getTexture());
C'est compliqué, alors j'explique.
"spriteLayer" est un "sf::Sprite".
"layers[0][index].RENDERTEXTURE" est le produit de la structure suivante:
struct LAYER { int NUMERO_PLAN; RenderTexture * RENDERTEXTURE };
...et du conteneur suivant:
array < array < LAYER, 7>, 2>

Je ne comprends pas pourquoi je ne peux pas utiliser ça, puisqu'ailleurs dans le même programme, il y a ceci qui fonctionne très bien:
diaphragme.setTexture(noir.getTexture());
"diaphragme" est un "sf::Sprite"
"noir" est un "sf::RenderTexture".
La seule différence, c'est le pointeur. Est-ce que SFML n'est pas faite pour travailler avec des pointeurs?

10
Graphique / Re : Re : Créer une caméra en utilisant sf::View
« le: Octobre 04, 2014, 11:24:13 pm »
1. Tu affiches tout mais tu mets en place une vue qui zoome sur la zone intéressante
window.setView(sf::View(sf::FloatRect(x, y, w, h)));
window.draw(sf::Sprite(render_texture.getTexture()));

Celle-ci me convient parfaitement, c'était un peu ce que j'imaginais.
C'est parfaitement clair, merci beaucoup!

11
Graphique / Créer une caméra en utilisant sf::View
« le: Octobre 04, 2014, 09:10:24 pm »
Bonjour!

J'ai écrit un programme qui fonctionne plutôt bien pour l'instant, mais je voudrais y ajouter une caméra.

La version actuelle construit une image en affichant sf::Sprites au-moyen de sf::RenderWindow.draw(). Toute Sprite est "drawée" directement pour apparaître à-l'écran.

Maintenant, je voudrais ajouter une caméra, mais j'ai du mal à trouver des informations sur internet.
Voici mon plan pour l'instant:
1. Je voudrais créer une RenderTexture et la "construire" en y "drawant" mes sprites. Ca donnera une grosse image.
2. Ensuite je voudrais faire un "focus" sur une zone de cette RenderTexture avec la View.
3. Enfin, je voudrais afficher la View.

Pour l'étape 1, je suis parfaitement au-clair. En-fait, je dois simplement remplacer la "RenderWindow" de la version actuelle (décrite plus haut) par la "RenderTexture".
Mais ensuite, comment faire le "focus" de ma View sur la Rendertexture?
Et finalement, comment afficher cette View dans la renderWindow, sachant que l'opération 3 doit adapter l'image virtuelle à la taille de l'écran (la RenderTexture étant dessinée au format 1920x1080, quelle que soit la dimension de l'écran, et la RenderWindow étant créée selon les dimensions de l'écran).

J'ai peut-être trouvé une piste: il y a une fonction "SetView()" dans RenderWindow et aussi dans RenderTexture. Mais dans quel ordre utiliser tout ça?

Merci pour les éclaircissements =D

12
Oui, bonsoir!
J'ai trouvé le problème avec des camarades sur un autre forum. En fait, le programme échouait à créer une "grosse" image parce qu'à un moment-donné, il cherchait à créer une ligne de texte avec une taille gigantesque (parce qu'une variable n'était pas initialisée correctement).
J'avais imaginé que sf::Text interprétait mal ce que je lui demandais... ou plutôt que je lui demandait quelque chose qu'il ne pouvait pas interpréter.
Le sujet est donc résolu, et le problème ne concernait pas du tout SFML. Merci quand même!

13
Selon la pile d'appels, il y aurait aussi la fonction "Font.LoadGlyph" dans l'affaire, mais j'ai de la peine à trouver des informations...

14
Bonjour!

Comme l'indique le titre, j'ai rencontré l'erreur suivante en exécutant un programme:
"Failed to add a new character to the font: the maximum texture size has been reached"

Après une brève recherche sur google, j'ai trouvé cette erreur dans le code-source suivant:
"IntRect Font::findGlyphRect(Page& page, unsigned int width, unsigned int height) const".

Voilà. Quelqu'un peut-il m'expliquer ce que signifie concrètement cette erreur?
Sur un autre forum, je me suis fait engueuler par des gens qui me reprochaient un code non-fonctionnel, alors que je leur montrais le code-source de cette fonction (que je n'ai pas écrite ^^). En gros, ils n'ont pas l'air de la comprendre complètement...

Merci d'avance!

15
Graphique / Re : Dessiner un diaphragme
« le: Septembre 17, 2014, 07:25:55 pm »
J'ai déjà pensé à cette solution, mais même si elle marche, on est d'accord de dire que c'est de la merde =)

Pages: [1] 2 3 Suivante »