begin process at 2012 05 29 07:13:34
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C++ & C++ .NET

 > 

Windows

 > 

DirectX

 > 

initialiser les vertex dans une boucle for


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

initialiser les vertex dans une boucle for

lundi 11 septembre 2006 à 21:05:50 | initialiser les vertex dans une boucle for

StrikerFred

salut a tous

j'avance a petits pas dans la création d'un jeu 3d.
je voulais faire un grand sol de plein de petits carré. Pour ca, (même technique que pour les jeux avec les tiles) je voulais utiliser deux boucles for imbriquées pour créer les vertex

ca donne :
VERTEX vertices[10000];  // un tableau de vertices
int i,j;
int nb = 0;
for(i=0; i<10; i++)
{
      for(j=0; j<10; j++)
      {
            vertices[nb].x = (je détaille pas... c'est des coordonnées basiques...)
            vertices[nb].y = ........
            vertices[nb].z = ........
            vertices[nb].color = 0xffffff00;
            nb++;
      }
}

et la il me dit erreur de mémoire quand je lance le programme ! on ne peut donc que faire :
VERTEX vertices = {{x,y,z,color},{x,y.....}, .......};
??

merci d'avance !
a+
lundi 11 septembre 2006 à 21:50:10 | Re : initialiser les vertex dans une boucle for

laurent1024

Membre Club
Essaye de faire :
VERTEX * vertices = malloc(sizzeof (VERTEX)* 10000). si tu est en c
ou
VERTEX * vertices = new VERTEX[10000]; si tu est en c++

Apres la ligne précédente, tu verifier que l'a mémoire est bien allouée if(vertex == NULL)

et a la fin un petit free(vertices); en c ou delete [] vertices. en C++

++
lundi 11 septembre 2006 à 21:54:13 | Re : initialiser les vertex dans une boucle for

luhtor

Mais ton code est correct. Seul ton tableau doit faire exploser la pile.
Il faut déclarer ton tableau de la facon suivante:
VERTEX  * vertices = new VERTEX[10000];

Oublie pas un delete[] quand t'as plus besoin du tableau.

Je suppose que c'est une erreur de recopiage : tes indices dans tes boucles sont de 10 au lieu de 100.

Remarque: une couleur entière, ca m'étonnerait que directx travaille avec ca par défaut.


mardi 12 septembre 2006 à 07:45:01 | Re : initialiser les vertex dans une boucle for

StrikerFred

merci pour les réponses,
maintenant y'a plus l'erreur de mémoire mais on ne voit plus les vertices... 
pourquoi ca fait ca? vous allez pas me dire que tous le monde initialise ces vertices comme ca:
VERTEX vertices[] = {.....................};

y'en a bien qui font vertices[0].x =... non?

[ Lien ]
voilà mon code, y'a plein de truc en bleu, c'est les différents essais...


voilà, si vous pouviez m'aider svp !
merci
a+
mardi 12 septembre 2006 à 07:50:36 | Re : initialiser les vertex dans une boucle for

StrikerFred

ps: je suis en c++
mardi 12 septembre 2006 à 09:28:15 | Re : initialiser les vertex dans une boucle for

buno

Administrateur CodeS-SourceS
coucou!
J'ai regardé vite fait ton code. Dans la fonction InitBuffer(), tu fais un memcpy avec un sizeof(vertices). Or, vertices est un pointeur, donc la taille sera toujours 4. Il faut faire:
memcpy(buf, vertices, NB_VERTICES*sizeof(VERTEX));

Et pour info, dans ta double boucle d'init (qui, en passant, est vide), au lieu de trainer un nb de vertex, je te conseille de faire ceci, plus lisible:
for (i=0; i<nbLignes; i++)
{
  for (j=0; j<nbColonnes; j++)
  {
    vertices[i*nbColonnes+j].x=...;
  }
}

Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
Le site de mon mariage
mardi 12 septembre 2006 à 09:43:13 | Re : initialiser les vertex dans une boucle for

StrikerFred

ok, merci pour ta réponse !
mais j'ai refait la méthode VERTEX vertices[100];
plutot que =new...
et ca marche sauf qu'il faut que je mette au minimum
VERTEX vertices[500];
avec moins, le programme quitte dès le démarrage, comment ca se fait? je n'ai pourtant besoin que de 100emplacements?
mardi 12 septembre 2006 à 09:44:50 | Re : initialiser les vertex dans une boucle for

StrikerFred

http://perso.orange.fr/site.animation/main.cpp
revoila le code, pouvez vous me dire ce qui va et ne va pas (surtout lol)

a+
mardi 12 septembre 2006 à 10:35:47 | Re : initialiser les vertex dans une boucle for

buno

Administrateur CodeS-SourceS
A chaque parcours de boucle, tu appelles 6 fois la fonction add(), donc tu ajoutes 5 vertices. Or, tu le fais 10x10=100 fois donc il te faut, au minimum 500 vertices.
D'ailleurs, pourquoi 6? tu ajoutes 2x les mêmes 2 sommets: (j,i) et (j+2,i+2). Essaies de faire un truc comme ceci (à vérifier dans ton système de coordonnées pour les i et les j)

int nbLignes=10;
int nbColonnes=10;
VERTEX vertices[100];
int i=0;
int j=0;
for (i=0; i<nbLignes; i++)
{
  for (j=0; j<nbColonnes; j++)
  {
    vertices[i*nbColonnes+j].x=j;
    vertices[i*nbColonnes+j].y=0;
    vertices[i*nbColonnes+j].z=i;
    vertices[i*nbColonnes+j].color=0xffffff00;
  }
}

Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
Le site de mon mariage
mardi 12 septembre 2006 à 13:37:24 | Re : initialiser les vertex dans une boucle for

luhtor

Déclare ton tableau dans le tas:
VERTEX * vertices = new VERTEX[NB]

et non dans la pile, sauf si tu tiens absolument a voir ton programme planter quand tu augmenteras le nombre de vertex.

De toute facon, c'est n'importe quoi de déclarer des gros objets dans la pile.

1 2

Cette discussion est classée dans : for, nb, initialiser, vertex, vertices


Répondre à ce message

Sujets en rapport avec ce message

Création d'un Mesh sous Directx [ par Itsuki2 ] Bonjour,   Je cherche à créer un Mesh et non pas à en charger un à partir d'un .xComme j'ai un peu de mal avec l'anglais, et que la doc fourni dans le initialiser un tableau avec des données aléatoires, tout en ayant des conditions [ par snakers07 ] bonjour tout le monde, j'ai un petit problème avec mon programme. Je voudrais initialiser un tableau a deux dimension mais avec des données précises, c++ [ par yesoun1 ] je serai reconnaissant de votre aide ;) et merci d'avance[^^happy10] quel est le rôle de "*" ?? for(unsigned int i=0; i < hauteur; i++) { for Problème d allocation dynamique [ par Beqtb0x ] /*Bonjour a tous, je viens d'arriver sur ce site, je suis étudiant en première année d'informatique et j'ai un problème a un tp que même la prof n'est probleme pour compiler et probleme semantique de code [ par nicolai08 ] bonjour je suis débutant dans le c++ voila mon code pour faire un convertisseur base 10 en hexa et inversement mais je n'arrive a faire de compilati besoin d'aide dans programme en c [ par houda986 ] salut; je suis un débutante en programmation et j'ai besoin d'aide pour la résolution d'un programme en C,c'est un programme de tri par base ... j'ai


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,655 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales