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

Pages: [1] 2 Suivante »
1
Réseau / Tableau TcpListener
« le: Mars 24, 2013, 01:04:15 am »
Bonsoir, excusez moi de vous déranger, je veux faire une partie "serveur" d'un petit jeu à moi, mais je bloque un peu sur la manière de faire...

Comme c'est la partie serveur, je ne peux pas prévoir à l'avance le nombre de clients connectés, et c'est pour ça que j'ai essayé de faire ceci :

std::vector<Client> tabClients;

Client test;
tabClients.push_back(test);

Mais sachant que ma classe Client est composée de sf::TcpSocket data; et ben j'ai une erreur "Non copyable"...

J'ai l'impression que je n'ai pas cerné la manière de faire... ?  :-\

Je vous remercie d'avance !  :)

2
Graphique / Re : [SFML 2.0 RC] Récupérer pixels d'un sf::Text
« le: Janvier 09, 2013, 06:58:36 pm »
Rah j'aurais dû y penser...  :-\

Merci encore !!!

3
Graphique / Re : [SFML 2.0 RC] Récupérer pixels d'un sf::Text
« le: Janvier 09, 2013, 05:56:48 pm »
Ah d'accord, oui, c'est bien ce que j'avais cru lire dans le code source, merci !
Par contre, je viens d'essayer, et je me retrouve avec une texture possédant les bons caractères, mais ceux ci sont placés n'importe où sur la texture, est-ce qu'il y a un moyen pour que je retrouve la position de chaque caractère sur cette texture ?  :-\

Alors en fait, je voudrais mettre au point un petit algo qui me permettrait de créer des mesh 3D (dessinés ensuite avec OpenGL) à partir des caractères textuels, je vais essayer du moins  :)

Merci pour la réponse !!!

4
Graphique / [SFML 2.0 RC] Récupérer pixels d'un sf::Text
« le: Janvier 09, 2013, 04:52:15 pm »
Bonjour !
Excusez moi pour le dérangement,
Cela fait plus d'une heure que je cherche comment faire pour récupérer la valeur des pixels d'un sf::Text sous la forme d'un tableau d'Uint (ou autre).

J'avais fait ceci :
sf::Font font(sf::Font::getDefaultFont());
sf::Texture texture = font.getTexture(26);
sf::Image img = texture.copyToImage();
const Uint8* data = img.getPixelsPtr();
 

Ce serait l'idéal, mais je n'obtiens rien, c'est à dire que si j'affiche la texture (grâce à un sprite), j'obtiens un carré blanc de 1x1 pixel.

Merci d'avance !

5
Bonsoir !
Je m'excuse pour le dérangement, mais j'essaye désespérément d'afficher un simple cube texturé en OpenGL, je crois avoir tout mis dans l'ordre et agencé correctement, pourtant quand j’exécute le programme (pas d'erreur de compilation), j'ai dans la console :
An internal OpenGL call failed in RenderTarget.cpp (225) : GL_INVALID_OPERATION, the specified operation is not allowed in the current state

Alors je vous donne un concentré du code :
// <-- INITIALISATION DES SHADERS -->

// Attribus des Shaders :
        const char* attribute_name;
    attribute_name = "in_Vertex";
    attribute_coord3d = glGetAttribLocation(m_shader.getProgramID(), attribute_name);
    if (attribute_coord3d == -1) {
        printf("Could not bind attribute %s\n", attribute_name);
        return;
    }

    attribute_name = "in_TexCoord";
    attribute_v_texture = glGetAttribLocation(m_shader.getProgramID(), attribute_name);
    if (attribute_v_texture == -1) {
        printf("Could not bind attribute %s\n", attribute_name);
        return;
    }

    const char* uniform_name;
    uniform_name = "mvp";
    uniform_mvp = glGetUniformLocation(m_shader.getProgramID(), uniform_name);
    if (uniform_mvp == -1) {
        printf("Could not bind uniform %s\n", uniform_name);
        return;
    }

    uniform_name = "Texture";
    uniform_mytexture = glGetUniformLocation(m_shader.getProgramID(), uniform_name);
    if (uniform_mytexture == -1) {
        fprintf(stderr, "Could not bind uniform %s\n", uniform_name);
        return;
    }
       
// Envoie des informations aux Shaders :

        glGenBuffers(1, &vbo_vertices);
    glBindBuffer(GL_ARRAY_BUFFER, vbo_vertices);
    glBufferData(GL_ARRAY_BUFFER, sizeof(data_vertex), data_vertex, GL_STATIC_DRAW);
       
        glGenBuffers(1, &ibo_elements);
    glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, ibo_elements);
    glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(data_indices), data_indices, GL_STATIC_DRAW);
       
        glGenBuffers(1, &vbo_cube_texcoords);
        glBindBuffer(GL_ARRAY_BUFFER, vbo_cube_texcoords);
        glBufferData(GL_ARRAY_BUFFER, sizeof(cube_texcoords), cube_texcoords, GL_STATIC_DRAW);
       
// Chargement de la Texture (image) :

        unsigned char* img = SOIL_load_image("grassTop.png", &TEX_WIDTH, &TEX_HEIGHT, NULL, 0);
        glGenTextures(1, &texture_id);
    glBindTexture(GL_TEXTURE_2D, texture_id);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
    glTexImage2D(GL_TEXTURE_2D, // target
               0,  // level, 0 = base, no minimap,
               GL_RGB, // internalformat
               TEX_WIDTH,  // width
               TEX_HEIGHT,  // height
               0,  // border, always 0 in OpenGL ES
               GL_RGB,  // format
               GL_UNSIGNED_BYTE, // type
               img);
                           
// Affichage :

        glm::mat4 mvp = projection * modelview;

    glUseProgram(m_shader.getProgramID());

        // Texture :
    glActiveTexture(GL_TEXTURE0);
    glBindTexture(GL_TEXTURE_2D, texture_id);
    glUniform1i(uniform_mytexture, /*GL_TEXTURE*/0);

        // Matrice MVP :
    glUniformMatrix4fv(uniform_mvp, 1, GL_FALSE, glm::value_ptr(mvp));

        // Les sommets de l'objet :
    glEnableVertexAttribArray(attribute_coord3d);
    glBindBuffer(GL_ARRAY_BUFFER, vbo_vertices);
    glVertexAttribPointer(attribute_coord3d, 3, GL_FLOAT, GL_FALSE, 0, 0);

        // Les coordonnées de la texture :
    glEnableVertexAttribArray(attribute_v_texture);
    glBindBuffer(GL_ARRAY_BUFFER, vbo_cube_texcoords);
    glVertexAttribPointer(attribute_v_texture, 2, GL_FLOAT, GL_FALSE, 0, 0);

        // Les indices des sommets de l'objet :
    glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, ibo_elements);
    int size;
    glGetBufferParameteriv(GL_ELEMENT_ARRAY_BUFFER, GL_BUFFER_SIZE, &size);

        // Affichage :
    glDrawElements(GL_TRIANGLES, size/sizeof(GLushort), GL_UNSIGNED_SHORT, 0);
    glDisableVertexAttribArray(attribute_coord3d);
    glDisableVertexAttribArray(attribute_v_texture);

Et mes shaders :
#version 120

attribute vec3 in_Vertex;
attribute vec2 in_TexCoord;

varying vec2 f_TexCoord;

uniform mat4 mvp;

void main()
{
    gl_Position = mvp * vec4(in_Vertex, 1.0);
    f_TexCoord = in_TexCoord;
}
 
#version 120

varying vec2 f_TexCoord;
uniform sampler2D Texture;

void main()
{
    gl_FragColor = texture2D(Texture, f_TexCoord);
}
 

Alors la première chose à laquelle j'ai pensé, c'est d'encadrer ma fonction d'affichage par
m_window->pushGLStates();
// AFFICHAGE
m_window->popGLStates();

Mais dans ce cas, mon programme est totalement bloqué jusqu'à ce qu'un gros "ne répond plus" Windows apparaisse.
J'ai dû faire une erreur quelque part, ce n'est probablement pas la SFML qui est en cause, mais comme l'erreur est apparemment située dans RenderTarget.cpp de la SFML, je me permets de poster ici...

Merci !!!  :)

6
Graphique / Re : [SFML 2.0 | OpenGL] Du texte dans un sf::Window ?
« le: Octobre 05, 2012, 08:50:52 pm »
J'utilise la version RC  :)

Mais par contre, le bind à 0 fonctionne parfaitement !  :D  :D

Merci beaucoup !!!!

Et désolé pour le dérangement  :-\

7
Graphique / Re : [SFML 2.0 | OpenGL] Du texte dans un sf::Window ?
« le: Octobre 05, 2012, 08:03:29 pm »
J'ai continué d'affiner ma recherche dans la fonction d'init, et voilà ce que j'ai trouvé :
glBindBuffer(GL_ARRAY_BUFFER, vbo_cube_vertices);

Avec cette ligne (sans la suite de la fonction), pas de texte.
Sans cette ligne (ni la suite de la fonction), texte.

Je comprends de moins en moins bien le problème... xD  :o

8
Graphique / Re : [SFML 2.0 | OpenGL] Du texte dans un sf::Window ?
« le: Octobre 05, 2012, 07:31:21 pm »
En fait, ça foire quand cette fonction est exécutée :
int init_resources()
{
  GLfloat cube_vertices[] = {
    // front
    -1.0, -1.0,  1.0,
     1.0, -1.0,  1.0,
     1.0,  1.0,  1.0,
    -1.0,  1.0,  1.0,
    // back
    -1.0, -1.0, -1.0,
     1.0, -1.0, -1.0,
     1.0,  1.0, -1.0,
    -1.0,  1.0, -1.0,
  };

  glGenBuffers(1, &vbo_cube_vertices);
  glBindBuffer(GL_ARRAY_BUFFER, vbo_cube_vertices);
  glBufferData(GL_ARRAY_BUFFER, sizeof(cube_vertices), cube_vertices, GL_STATIC_DRAW);

  GLfloat cube_colors[] = {
    // front colors
    1.0, 0.0, 0.0,
    0.0, 1.0, 0.0,
    0.0, 0.0, 1.0,
    1.0, 1.0, 1.0,
    // back colors
    1.0, 0.0, 0.0,
    0.0, 1.0, 0.0,
    0.0, 0.0, 1.0,
    1.0, 1.0, 1.0,
  };

  glGenBuffers(1, &vbo_cube_colors);
  glBindBuffer(GL_ARRAY_BUFFER, vbo_cube_colors);
  glBufferData(GL_ARRAY_BUFFER, sizeof(cube_colors), cube_colors, GL_STATIC_DRAW);

  GLushort cube_elements[] = {
    // front
    0, 1, 2,
    2, 3, 0,
    // top
    1, 5, 6,
    6, 2, 1,
    // back
    7, 6, 5,
    5, 4, 7,
    // bottom
    4, 0, 3,
    3, 7, 4,
    // left
    4, 5, 1,
    1, 0, 4,
    // right
    3, 2, 6,
    6, 7, 3,
  };

  glGenBuffers(1, &ibo_cube_elements);

  glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, ibo_cube_elements);
  glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(cube_elements), cube_elements, GL_STATIC_DRAW);

  GLint link_ok = GL_FALSE;
  GLuint vs, fs;

  if ((vs = create_shader("cube.v.glsl", GL_VERTEX_SHADER))   == 0) return 0;
  if ((fs = create_shader("cube.f.glsl", GL_FRAGMENT_SHADER)) == 0) return 0;

  program = glCreateProgram();
  glAttachShader(program, vs);
  glAttachShader(program, fs);
  glLinkProgram(program);
  glGetProgramiv(program, GL_LINK_STATUS, &link_ok);

  if (!link_ok) {
    fprintf(stderr, "glLinkProgram:");
    print_log(program);
    return 0;
  }

  const char* attribute_name;
  attribute_name = "coord3d";
  attribute_coord3d = glGetAttribLocation(program, attribute_name);

  if (attribute_coord3d == -1) {
    fprintf(stderr, "Could not bind attribute %s\n", attribute_name);
    return 0;
  }

  attribute_name = "v_color";
  attribute_v_color = glGetAttribLocation(program, attribute_name);

  if (attribute_v_color == -1) {
    fprintf(stderr, "Could not bind attribute %s\n", attribute_name);
    return 0;
  }

  const char* uniform_name;
  uniform_name = "mvp";
  uniform_mvp = glGetUniformLocation(program, uniform_name);

  if (uniform_mvp == -1) {
    fprintf(stderr, "Could not bind uniform %s\n", uniform_name);
    return 0;
  }
  return 1;
}
 

Donc si je résume ;
 - sans cette fonction, j'ai mon texte ;
 - avec cette fonction, j'ai une fenêtre avec mes dessins OpenGL ;
 - pas d'erreur de compilation ;
 - pas de message particulier dans la console ;

En fait, quand je disais que quand je fais de la 2D ça fonctionne, c'est simplement qu'en fait, je n'utilisais pas les Shaders pour la 2D. Par contre, j'utilise les Shaders pour la 3D, et là ça foire...
Donc ça serait les Shaders ?  :-\

EDIT : En fait, je me trompe totalement : quand je faisais de la 2D (et que ça foirait pas), j'utilisais aussi deux shaders, mais que je rentrais moi même dans un tableau de char (sans passer par une ouverture de fichier), donc ça ne peut pas être ça non plus... :( Grr

9
Graphique / Re : [SFML 2.0 | OpenGL] Du texte dans un sf::Window ?
« le: Octobre 04, 2012, 10:55:44 pm »
Apparemment, si je fais de la 2D avec l'OpenGL, ça fonctionne...
Dès que je passe à la 3D, plus de texte ni de rond vert...
C'est bizarre, je regarderai ça plus tard :)

Merci encore :)

10
Graphique / Re : [SFML 2.0 | OpenGL] Du texte dans un sf::Window ?
« le: Octobre 04, 2012, 10:32:48 pm »
Oui oui je me doute, et je te remercie !  :)

En fait, j'ai fait mieux, j'ai fait un nouveau projet, j'ai minimaliser mon code pour ne garder que ceci (j'ai essayé de garder les mêmes libs) :
#include <GL/glew.h>

#include <SFML/Graphics.hpp>
#include <SFML/OpenGL.hpp>

#include <glm/glm.hpp>
#include <glm/gtc/matrix_transform.hpp>
#include <glm/gtc/type_ptr.hpp>

int main()
{
    sf::RenderWindow window(sf::VideoMode(1024, 768), "SFML works!");
    window.setVerticalSyncEnabled(false);
    sf::CircleShape shape(100.f);
    shape.setFillColor(sf::Color::Green);

         // Declare and load a font
     sf::Font font;
     font.loadFromFile("arial.ttf");

     // Create a text
     sf::Text text("Hello");
     text.setFont(font);
     text.setCharacterSize(30);
     text.setStyle(sf::Text::Bold);
     text.setColor(sf::Color::Red);
     text.setPosition(100,100);

    GLenum code;

    /* initialisation de GLEW */
    code = glewInit();
    if(code != GLEW_OK)
    {
        fprintf(stderr, "impossible d'initialiser GLEW : %s\n",
                        glewGetErrorString(code));
    }

    while (window.isOpen())
    {
        sf::Event event;
        while (window.pollEvent(event))
        {
            if (event.type == sf::Event::Closed)
                window.close();
        }

        window.clear();

        window.pushGLStates();
        window.draw(shape);
        window.draw(text);
        window.popGLStates();
        window.display();
    }

    return 0;
}

 

Et là tout fonctionne correctement, alors que sur mon projet principal, non...  :(
Ça commence à m'énerver xD !

Je vais continuer de chercher, merci encore :)

11
Graphique / Re : [SFML 2.0 | OpenGL] Du texte dans un sf::Window ?
« le: Octobre 04, 2012, 10:22:57 pm »
Ben en gros, j'ai un contexte OpenGL avec GLEW et SFML dans une RenderWindow, j'affiche un plan et un cube, j'essaye d'afficher du texte par dessus, mais ça ne fonctionne pas...
Est-ce que je dois faire un autre morceau de code plus concentré ?

12
Graphique / Re : [SFML 2.0 | OpenGL] Du texte dans un sf::Window ?
« le: Octobre 04, 2012, 10:17:39 pm »
Alors, j'ai essayé de faire un condensé de mes fonctions :

     m_window = new sf::RenderWindow(sf::VideoMode(m_xWin, m_yWin), m_titleWin.c_str(), sf::Style::Default, m_setSettings);

     GLenum glew_status = glewInit();
     if (glew_status != GLEW_OK)
     {
          std::cout << "[ERROR] Cannot init GLEW : " << glewGetErrorString(glew_status) << std::endl;
          return false;
     }

     if (!GLEW_VERSION_2_0)
     {
          std::cout << "[ERROR] Your graphic card does not support OpenGL 2.0." << std::endl;
          return false;
     }

     // Enable alpha
     glEnable(GL_BLEND);
     glEnable(GL_DEPTH_TEST);
     //glDepthFunc(GL_LESS);
     glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);

    bool running = true;

     // Declare and load a font
     sf::Font font;
     font.loadFromFile("arial.ttf");

     // Create a text
     sf::Text text("Hello");
     text.setFont(font);
     text.setCharacterSize(10);
     text.setStyle(sf::Text::Bold);
     text.setColor(sf::Color::Red);
     text.setPosition(100,100);

     sf::CircleShape shape(100.f);
    shape.setFillColor(sf::Color::Green);

    Cube cubeTest;
    Plan planTest;

    glm::mat4 modelview = glm::lookAt(glm::vec3(3.0, 2.0, 5.0), glm::vec3(0.0, 0.0, 0.0), glm::vec3(0.0, 1.0, 0.0));
    glm::mat4 projection = glm::perspective(60.0f, 1.0f * m_xWin/m_yWin, 0.0001f, 1000.0f);

    while (running)
    {
        // gestion des évènements
        sf::Event event;
        while (m_window->pollEvent(event))
        {
            if (event.type == sf::Event::Closed)
            {
                // on stoppe le programme
                running = false;
            }
            else if (event.type == sf::Event::Resized)
            {
                // on ajuste le viewport lorsque la fenêtre est redimensionnée
                glViewport(0, 0, event.size.width, event.size.height);
                m_xWin = event.size.width;
                m_yWin = event.size.height;
            }
        }

        // effacement les tampons de couleur/profondeur
        glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

        m_window->pushGLStates();
        m_window->draw(shape);
        m_window->draw(text);
        m_window->popGLStates();

        // dessin...
        cubeTest.draw(modelview, projection);
        planTest.draw(modelview, projection);

        // termine la trame courante (en interne, échange les deux tampons de rendu)
        m_window->display();
    }
 

Voilà, j'espère que c'est assez clair et concis  :-\
Il y a peut être quelques incohérences, mais le tout est placé dans plusieurs méthodes d'une classe, donc bon...

EDIT : Et avec ce code, je n'ai ni rond vert, ni texte...

13
Graphique / Re : [SFML 2.0 | OpenGL] Du texte dans un sf::Window ?
« le: Octobre 04, 2012, 10:07:00 pm »
Bon, j'ai réussis à faire quelque chose qui fonctionne ! Merci !

Par contre, j'ai encore un problème...
Mon but à la base était de pouvoir écrire du texte.
Maintenant que GLEW/SFML cohabitent correctement, j'ai fait ceci :
 // Declare and load a font
     sf::Font font;
     font.loadFromFile("arial.ttf");

     // Create a text
     sf::Text text("hello");
     text.setFont(font);
     text.setCharacterSize(30);
     text.setStyle(sf::Text::Bold);
     text.setColor(sf::Color::Red);

Mais quand je lance mon programme, pas de texte du tout, et un message dans la console :
An internal OpenGL call failed in Texture.cpp (95) : unknown error, no description

Qu'est-ce que je peux faire ?  :-\

14
Graphique / Re : [SFML 2.0 | OpenGL] Du texte dans un sf::Window ?
« le: Octobre 04, 2012, 09:22:32 pm »
J'ai lié dynamiquement GLEW, et j'ai donc ajouté glew32.dll à côté de mon exécutable...
Plus de problème de compilation, mais quand je lance le programme, il s'ouvre, et "cesse de fonctionner"...
J'ai dû faire une erreur quelque part, mais je ne sais pas où :/

15
Graphique / Re : [SFML 2.0 | OpenGL] Du texte dans un sf::Window ?
« le: Octobre 04, 2012, 08:48:53 pm »
Et donc je ne peux pas lier statiquement glew ?

Pages: [1] 2 Suivante »