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

Auteur Sujet: Vertex  (Lu 3453 fois)

0 Membres et 1 Invité sur ce sujet

nicox11

  • Jr. Member
  • **
  • Messages: 51
    • Voir le profil
Vertex
« le: Juin 17, 2013, 01:33:46 pm »
Bonjour !

J'ai encore un problème pour mes vertex. J'ai voulu me créer une classe représentant un niveau. Cependant je n'arrive pas à utiliser les vertex. Pour faire simple j'ai modifier ma fonction pour ceci:

m_vertices.setPrimitiveType(sf::Quads);
    m_vertices.resize(4);

    m_vertices[0].position = sf::Vector2f(0, 0);
    m_vertices[1].position = sf::Vector2f(32, 0);
    m_vertices[2].position = sf::Vector2f(32, 32);
    m_vertices[3].position = sf::Vector2f(0, 32);

    // on définit ses quatre coordonnées de texture
    m_vertices[0].texCoords = sf::Vector2f(0, 0);
    m_vertices[1].texCoords = sf::Vector2f(32, 0);
    m_vertices[2].texCoords = sf::Vector2f(32, 32);
    m_vertices[3].texCoords = sf::Vector2f(0, 32);

Une fonction qui défini juste une tile avec des coordonnées dans un texture.  Puis la fonction draw :

void Level::draw(sf::RenderTarget& target, sf::RenderStates states) const
{

    // on applique la transformation
    states.transform *= getTransform();

    // on applique la texture du tileset
    states.texture = m_tileset->getSprite().getTexture();

    // et on dessine enfin le tableau de vertex
    target.draw(m_vertices, states);
}

Sauf que mon programme cesse de fonctionner quand j'arrive à la ligne target.draw(m_vertices, states);
Je ne vois pas trop où se trouve le problème (sachant que j'ai voulu faire un cas simple), que la texture est normalement correctement chargé. Donc si vous avez des idées d'un problème qui pourrait arriver à cette ligne.

Merci

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32498
    • Voir le profil
    • SFML's website
    • E-mail
Re : Vertex
« Réponse #1 le: Juin 17, 2013, 01:37:24 pm »
Tu veux dire que ça crashe ? Dans ce cas utilise ton debugger, c'est fait pour ça.
Laurent Gomila - SFML developer

nicox11

  • Jr. Member
  • **
  • Messages: 51
    • Voir le profil
Re : Vertex
« Réponse #2 le: Juin 17, 2013, 01:41:39 pm »
C'est à dire que lorsque je compile je n'ai pas d'erreur à priori. Sauf que lorsque j'éxecute le programme (sous windows) j'ai le droit à un magnifique "le programme a cessé de fonctionner".  J'ai pu identifié que cela ce passais à cette ligne précise. Concernant le débugeur comment puis-je trouver l'erreur ? De quel coté chercher ? (variable nulle ou chose comme ça ?)

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32498
    • Voir le profil
    • SFML's website
    • E-mail
Re : Vertex
« Réponse #3 le: Juin 17, 2013, 01:45:01 pm »
Le debugger t'arrête pile sur la ligne du crash, te donne une erreur plus ou moins pertinente, et t'affiche la pile des appels. En suite tu peux inspecter les valeurs des différentes variables, etc.

Savoir se servir du debugger, c'est vital si tu ne veux pas perdre ton temps sur ce genre de bêtise. Prends le temps de bien l'étudier, lis des tutoriels si nécessaire. Ce genre d'erreur c'est vraiment un boulot pour lui, pas pour nous ;)
Laurent Gomila - SFML developer

Cpl.Bator

  • Hero Member
  • *****
  • Messages: 540
    • Voir le profil
Re : Vertex
« Réponse #4 le: Juin 17, 2013, 02:13:49 pm »
Citer
// on applique la texture du tileset
    states.texture = m_tileset->getSprite().getTexture();

Ta texture existe encore ? essaye sans.

Lasconik

  • Newbie
  • *
  • Messages: 11
    • Voir le profil
    • E-mail
Re : Vertex
« Réponse #5 le: Juin 20, 2013, 06:36:47 pm »
Citer
m_vertices.setPrimitiveType(sf::Quads);
    m_vertices.resize(4);

    m_vertices[0].position = sf::Vector2f(0, 0);
    m_vertices[1].position = sf::Vector2f(32, 0);
...

C'est quoi m_vertices ? vu que tu appelles setPrimitiveType, c'est probablement un sf::VertexArray.
du coup tu dis ensuite que m_vertices est un ensemble de 4 quads.
ainsi avec
m_vertices[0].position = x;
tu dis que la position du premier point du quad est x.

Ce n'est pas comme ça que ça marche : pour chaque quad, il faut définir les 4 coordonnées.

tu devrais changer les positions depuis un
Vertex * v = &(m_vertices[n]*4)

Relis bien le tuto sur les VertexArray, il me semble qu'il y a un exemple tout fait sur justement les tilemaps.
« Modifié: Juin 20, 2013, 11:54:00 pm par Lasconik »

kimci86

  • Full Member
  • ***
  • Messages: 128
    • Voir le profil
Re : Vertex
« Réponse #6 le: Juin 20, 2013, 07:35:28 pm »
Citer
du coup tu dis ensuite que m_vertices est un ensemble de 4 quads.
Non, de 4 points.

Citer
Relis bien le tuto sur les VertexArray
...

nicox11, ton utilisation de VertexArray est bonne.
Le problème vient peut-être de
states.texture = m_tileset->getSprite().getTexture();
Est-ce que le pointeur m_tileset n'est pas nul ?

Lasconik

  • Newbie
  • *
  • Messages: 11
    • Voir le profil
    • E-mail
Re : Vertex
« Réponse #7 le: Juin 20, 2013, 11:53:38 pm »
Citer
nicox11, ton utilisation de VertexArray est bonne.

Lui dit pas ça. Avec cette méthode il n'affiche qu'un quad. 
Il veut faire un afficheur de niveaux, ce n'est clairement pas l'objectif. il faut à absolument qu'il passe par quelque chose du type pointeur (suivant les coordonnées par exemple). Il va quand même pas faire
m_vertices[8].position = ...
m_vertices[44].position = ...
m_vertices [480].position = ...

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32498
    • Voir le profil
    • SFML's website
    • E-mail
Re : Vertex
« Réponse #8 le: Juin 21, 2013, 07:59:15 am »
Lasconik :

Citer
Pour faire simple j'ai modifier ma fonction pour ceci:
Citer
Une fonction qui défini juste une tile avec des coordonnées dans un texture

C'est clair non ? ;)
Laurent Gomila - SFML developer