Forum de la communauté SFML

Aide => Graphique => Discussion démarrée par: Nietzsche le Mars 31, 2014, 02:57:15 pm

Titre: Vertex qui prend la mauvaise couleur
Posté par: Nietzsche 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 ?
Titre: Re : Vertex qui prend la mauvaise couleur
Posté par: Laurent 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.
Titre: Re : Vertex qui prend la mauvaise couleur
Posté par: Nietzsche 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.
Titre: Re : Vertex qui prend la mauvaise couleur
Posté par: Laurent le Mars 31, 2014, 04:27:28 pm
Pour les pixels bleus (0), tu lis newMatrix au lieu de oldMatrix.
Titre: Re : Vertex qui prend la mauvaise couleur
Posté par: Nietzsche le Mars 31, 2014, 04:30:03 pm
En effet, malheureusement le problème est toujours là après correction  :-\
Titre: Re : Vertex qui prend la mauvaise couleur
Posté par: Nietzsche 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.
Titre: Re : Vertex qui prend la mauvaise couleur
Posté par: Laurent 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 ?
Titre: Re : Vertex qui prend la mauvaise couleur
Posté par: Nietzsche 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 ?
Titre: Re : Vertex qui prend la mauvaise couleur
Posté par: kimci86 le Mars 31, 2014, 05:58:09 pm
Bonjour,
Attention aux indices. Les tableau sont indexés à partir de 0 et pas 1.
Titre: Re : Vertex qui prend la mauvaise couleur
Posté par: Laurent 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...
Titre: Re : Vertex qui prend la mauvaise couleur
Posté par: Nietzsche 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.


Titre: Re : Vertex qui prend la mauvaise couleur
Posté par: Laurent 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é.