CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

problème avec une structure en C

News jeu

Expeditions: Samurai veut révolutionner le RPG tactique avec une aventure entièrement jouable en coop

Voir
caelacanthe
caelacanthe
Niveau 10
27 juillet 2008 à 21:35:16

:salut:

je fais un programme qui utilise une structure composée d'un tableau en 3D, et de trois entiers qui représentent les dimentions du tableau.

y a une fonction qui initialise une occurence de cette structure, et une fonction qui bosse sur le tableau 3D de cette occurence! seulement, ca ne marche pas :peur:

je fais comme ca:

http://rafb.net/p/Sa55lc46.html

l'initialisation de l'objet (remplissage du tableau en 3D de 255) fonctionne très bien! mais pas la fonction carre, qui devrait travailler sur le tableau, de facon à remplir les "arêtes" du tableau de valeurs autres que 255 :ouch:

a vrai dire, c'est l'utilisation de l'objet qui pose problème... comment le faire entrer dans la fonction carre pour qu'il travaille dessus? :question:

guyver2
guyver2
Niveau 10
27 juillet 2008 à 21:47:11

passe ta structure par reference et fait travailler ta foction sur un pointeur.
void carre(espace24bits *monvoxel);
(remplace tout les monvoxel.triplentree par monvoxel->triplentree)
et appelle la comme ceci :
carre(&machin);

mais en fait je sais pas trop si ça va changer qqch, le passage par valeur que tu fait pour le moment doit juste copier ton pointeur triplentree ce qui fait que tu modifie quand meme les valeurs du tableau... Je sais pas trop, essaye ou attend l'avis des quelques cadors du langage C qui trainent ici

AmishParadise
AmishParadise
Niveau 5
27 juillet 2008 à 21:50:31

le problème vient des monvoxel.triplentree[i][monvoxel.largeur][0]=255; il faut mettre largeur - 1 à la place (et pareil pour les autres dimensions.

caelacanthe
caelacanthe
Niveau 10
27 juillet 2008 à 22:20:59

bien vu, amishparadise, j'avais pas vu cette erreur-là :merci:

j'ai remplacé tous les monvoxel.triplentree par monvoxel->triplentree (et tous les monvoxel.longueur largeur epaisseur par monvoxel->longueur largeur epaisseur pour éviter les erreurs :peur: ), et l'appel par carre(&machin), mais ca me met toujours une erreur :-(

testvoxel.cpp:132: error: expected constructor, destructor, or type conversion before ‘(’ token

la ligne 132, c'est carre(&machin);

merci quand même, je vais voir demain ce qu'en pensent les autres :merci: :ok:

dnob700
dnob700
Niveau 10
27 juillet 2008 à 22:50:35

Les appels de fonctions doivent se faire depuis la fonction main ou n'importe quelle autre fonction ... (sauf si sur le wall il n'y a qu'un bout tronqué de ton source).

caelacanthe
caelacanthe
Niveau 10
27 juillet 2008 à 23:39:03

ah bah justement... ces appels se faisaient en dehors de fonctions, même si le wall est incomplet :peur:

maintenant ca marche :merci:

(même si c'est pas super propre, je l'ai mis dans ma fonction d'affichage de l'openGL qui est appelée tout le temps et donc, c'est recalculé à chaque fois :peur: )

caelacanthe
caelacanthe
Niveau 10
29 juillet 2008 à 22:10:28

en fait, mon programme ressemble à ca:

http://rafb.net/p/IhDhCr39.html

(si des caractères déconnent, normal, je l'ai ouvert avec wordpad :( )

il y a des tas de fonctions, ok, mais je ne sais pas ou mettre les deux lignes qui sont, pour l'instant, le fonctionnement de mon programme, à savoir la création d'un tableau en 3D et le remplissage des arètes de ce tableau avec 255 :doute:

espace24bits machin=voxelinit(10,10,10);
carre(&machin);

pour l'instant, elles sont dans la fonction affichage (vers le milieu du programme), cette fonction qui est appelée à chaque fois qu'on veut redessiner la fenêtre en openGL, autant dire que le tableau est rerempli à chaque fois, a t-on fait plus optimisé :bravo:

quelqu'un aurait-il une idée d'ou je pourrais mettre ces deux lignes :question:

le but du programme est de manipuler la 3D comme de la 2D, avec de la mémoire écran 3D, des pixels cubiques, et plus tard des sprites en 3D, etc :rire2:

dnob700
dnob700
Niveau 10
29 juillet 2008 à 22:53:06

je ne sais pas ce que font tes deux lignes,mais si c'est une initialisation qui ne doit se faire qu'une seule fois, pourquoi ne pas les mettres dans le main ?

caelacanthe
caelacanthe
Niveau 10
30 juillet 2008 à 01:42:58

j'ai déja essayé de le mettre dans le main, mais ca marche pas très bien :(

là, c'est une initialisation qui ne doit se faire qu'une seule fois, mais à l'avenir, ca pourrait être bien plus, comme des simulations de fontaines :peur:

a vrai dire, le fonctionnement d'openGL me dépasse un peu; j'ai l'impression qu'une partie du main est exécutée plusieurs fois quand la fonction glutmainloop() détecte un évènement, mais je ne vois pas laquelle :peur:

dnob700
dnob700
Niveau 10
30 juillet 2008 à 11:54:54

non, la fonction main n'est exécuter qu'une seule fois. Cela dit, ça n'a rien à voir avec OpenGL, et tout à voir avec Glut qui gère les fenêtres et les évènements. Tu peut peut-être trouver un cours sur le fonctionnement de Glut sur le net.

caelacanthe
caelacanthe
Niveau 10
11 août 2008 à 16:20:33

mon moteur voxel avance :fier:

voici les premières captures!

http://www.noelshack.com/com/uploads/capture1064553.png

c'est une boule avec un trou dedans (c'est l'étoile noire :noel: )

http://www.noelshack.com/com/uploads/capture2048928.png

vue générale :ok:

avec mes optimisations spéciales, je tourne a 3 fps sur mon eeePC :content:

et là, je suis en train de faire des fonctions pour tracer des primitives, mais j'ai que le pavé et la sphere...

comment définir simplement le cylindre, le trait, et la pyramide :question:

la sphère, c'est tout les points dont la distance au centre est inférieure au rayon, par exemple..

:merci:

caelacanthe
caelacanthe
Niveau 10
12 août 2008 à 04:51:19

(j'ai trouvé pour la ligne! une ligne qui passe par un point A, c'est tous les points M tels que le vecteur AM est colinéaire à la ligne :fier: )

dnob700
dnob700
Niveau 10
12 août 2008 à 17:03:50

Et un cylindre, c'est juste l'ensemble des point à une certaine distance de la ligne par exemple.

Shakaan
Shakaan
Niveau 10
16 août 2008 à 04:35:38

faudrait trouver comment marche povray, il fait comme ça chcrois :(

Sous forums
  • Aide à l'achat Mac
  • Macintosh
  • Création de Jeux
  • Programmation
  • Création de sites web
  • Linux
  • Internet
  • Steam Deck
  • Hardware