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

Auteur Sujet: Vertex qui prend la mauvaise couleur  (Lu 2949 fois)

0 Membres et 1 Invité sur ce sujet

Nietzsche

  • Newbie
  • *
  • Messages: 6
    • Voir le profil
Vertex qui prend la mauvaise couleur
« le: Mars 31, 2014, 02:57:15 pm »
Bonjour. Je débute avec la SFML. J'ai crée un tableau statique de Vertex et j'ai configuré la couleur de certains à Bleu (avec Color::Blue). Or ceux-ci s'affichent en blanc, des fois en vert (il n'y a aucun pixel bleu sur la fenêtre de rendu). Avez-vous une idée d'où celà peut venir ?

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32498
    • Voir le profil
    • SFML's website
    • E-mail
Re : Vertex qui prend la mauvaise couleur
« Réponse #1 le: Mars 31, 2014, 03:39:00 pm »
De la ligne 42, sûrement.

Sérieusement, il nous faut bien entendu voir ton code pour t'aider. Un code complet minimal qui reproduit le problème serait plus efficace que ton code d'origine. Il faudrait aussi quelques infos sur ton OS, la version de SFML, ta carte graphique.
Laurent Gomila - SFML developer

Nietzsche

  • Newbie
  • *
  • Messages: 6
    • Voir le profil
Re : Vertex qui prend la mauvaise couleur
« Réponse #2 le: Mars 31, 2014, 04:05:25 pm »
Désolé. Voici mon code
        for (int i=1; i<=NI/2; i++) {
                for (int j=1; j<=NJ; j++) {
                        oldMatrix[i][j]=0;
                }}


        for (int i=NI/2+1; i <= 3*NI/4; i++) {
                for (int j=1; j<=NJ; j++) {
                        oldMatrix[i][j]=1;
                }}



        for (int i=3*NI/4+1; i<=NI; i++) {
                for (int j=1; j<=NJ; j++) {
                        oldMatrix[i][j]= -1;
                }}





       
    RenderWindow app(VideoMode(400, 200, 32), "Prey Predator");
    Image monimage(NI, NJ);

    // Boucle principale
    while (app.isOpen())
    {

        for (int i=1; i<=NI; i++) {
                                                for (int j=1; j<=NJ; j++) {
                                                        if(oldMatrix[i][j] > 0) monimage.SetPixel(i, j, Color::Green);
                                                        if (newMatrix[i][j] == 0) monimage.SetPixel(i, j, Color::Blue);
                                                        if (oldMatrix[i][j] < 0) monimage.SetPixel(i, j, Color::Red);
                                                }}


        // Affichage de la fenêtre à l'écran
                app.clear(Color::Black);
                app.draw(monimage);
        app.display();



                system("pause");


}



On voit que oldMatrix est rempli à moitié de 0, le quart sont des 1 et le quart restant des -1. On affiche un pixel en bleu si oldMatrix vaut 0 à la même location.
Or à l'affichage la moitié de app est blanche et non bleue. Je ne sais pas pourquoi. Les deux autres "quarts" sont corrects.

J'ai la SFML 2.1 sous Windows 64 bits (avec la bibliothèque 64 bits aussi) et une Nvidia 670M.

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32498
    • Voir le profil
    • SFML's website
    • E-mail
Re : Vertex qui prend la mauvaise couleur
« Réponse #3 le: Mars 31, 2014, 04:27:28 pm »
Pour les pixels bleus (0), tu lis newMatrix au lieu de oldMatrix.
Laurent Gomila - SFML developer

Nietzsche

  • Newbie
  • *
  • Messages: 6
    • Voir le profil
Re : Vertex qui prend la mauvaise couleur
« Réponse #4 le: Mars 31, 2014, 04:30:03 pm »
En effet, malheureusement le problème est toujours là après correction  :-\

Nietzsche

  • Newbie
  • *
  • Messages: 6
    • Voir le profil
Re : Vertex qui prend la mauvaise couleur
« Réponse #5 le: Mars 31, 2014, 04:37:15 pm »
Voilà mon affichage pour fixer les idées.

Comme on peut le voir, ça concorde avec l'initialisation de oldMatrix sauf pour la partie blanche qui doit être bleue.

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32498
    • Voir le profil
    • SFML's website
    • E-mail
Re : Vertex qui prend la mauvaise couleur
« Réponse #6 le: Mars 31, 2014, 04:53:07 pm »
Mais c'est quoi cette classe Image ? On peut voir son contenu ?

Et quel est le type de oldMatrix ?
Laurent Gomila - SFML developer

Nietzsche

  • Newbie
  • *
  • Messages: 6
    • Voir le profil
Re : Vertex qui prend la mauvaise couleur
« Réponse #7 le: Mars 31, 2014, 05:22:13 pm »
Eh bien il s'agit de la classe Image de la SFML, j'utilise le namespace correspondant.

oldMatrix est un tableau 2D d'entiers (Int).

Y aurait-il un problème au niveau du test de la condition ?

kimci86

  • Full Member
  • ***
  • Messages: 127
    • Voir le profil
Re : Vertex qui prend la mauvaise couleur
« Réponse #8 le: Mars 31, 2014, 05:58:09 pm »
Bonjour,
Attention aux indices. Les tableau sont indexés à partir de 0 et pas 1.

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32498
    • Voir le profil
    • SFML's website
    • E-mail
Re : Vertex qui prend la mauvaise couleur
« Réponse #9 le: Mars 31, 2014, 07:26:59 pm »
Dans ce cas le code que tu nous montres, c'est n'importe quoi. Ca ne peut pas compiler si ce sont là les classes de SFML 2.1. Merci de nous montrer du vrai code pour qu'on puisse t'aider...
Laurent Gomila - SFML developer

Nietzsche

  • Newbie
  • *
  • Messages: 6
    • Voir le profil
Re : Vertex qui prend la mauvaise couleur
« Réponse #10 le: Avril 01, 2014, 04:00:14 pm »
@kimci86 : C'est intentionnel, les cellules d'indices 0 représentent des valeurs spéciales.

Désolé, en fait je modifiais un fichier dans Visual Studio or quand je compilais c'était les fichiers du projet ouvert qui compilaient d'où le fait que j'obtenais toujours les mêmes résultats... ce problème se produit quand on sauvegarde une copie du fichier courant, c'est le nouveau fichier qui apparait dans l'IDE or visual compile toujours l'ancien...

J'ai juste une dernière question : Utiliser un tableau de vertex comme je le fait : "Vertex Ocean[NI+1][NJ+1];" est-il le meilleur moyen de modifier pixel par pixel une image, ou existe-t-il un meilleur moyen comme la classe Image qui n'existe plus dans la SFML 2.1 ? Sachant qu'il n'y a aucun lien entre mes pixels : je ne veux pas de dégradés, interpolations etc.

Enfait avec cette solution je suis obligé de fixer la position des pixels pour utiliser directement les indices de Ocean :
 for (int i=1; i<NI; i++){
                for (int j=1; j<NJ; j++){
                        Ocean[i][j].position=Vector2f(i, j);}}

D'où le fait que je me demande si il y avait un moyen plus adapté comme la classe Image.


« Modifié: Avril 01, 2014, 04:05:08 pm par Nietzsche »

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32498
    • Voir le profil
    • SFML's website
    • E-mail
Re : Vertex qui prend la mauvaise couleur
« Réponse #11 le: Avril 01, 2014, 04:38:47 pm »
Le plus efficace en terme de performances sera sûrement une texture dynamique, alimentée via sa fonction Texture::update par un tableau de pixels bruts (std::vector<sf::Uint8>) que tu maintiens de ton côté.
Laurent Gomila - SFML developer