# Applications > Dveloppement 2D, 3D et Jeux > Moteurs 3D >  une question de syntaxe

## zeder59

Bonjour  tous, 

Je bosse toujours sur mon modeste moteur 3D, et je suis en train de plancher sur l'implementation des metaballs.
En gros, je suis la methode de base qui consiste a mettre en place un champ scalaire, a calculer en chaque point de ce champ la contribution de chaque metaball, et a tracer une isosurface sur une valeur seuil a choisir.

Pour generer l'isosurface, il semble que la solution standard soit l'utilisation de l'algorithme dit de "Marching Cubes" dont j'ai trouv un tuto/code source sympa au lien suivant:
http://local.wasp.uwa.edu.au/~pbourk...ry/polygonise/

Cependant, il y a deux points que je ne coprends pas dans cette implementation:

a la ligne "
   if (grid.val[0] < isolevel) cubeindex |= 1;
"
(et lignes suivantes)
A quoi correspond le symbole "|="? Si j'ai bien compris, il s'agit d'attribuer un 1 au bit de poids faible si la valeur seuil est dpasse, et 0 sinon, mais pourquoi c'est crit comme ca? (moi j'aurais betement mis +=)

deuxieme point:
un peu plus loin, il est ecrit:
 if (edgeTable[cubeindex] & 1)

a quoi correspond le symbole & dans ce contexte? 

merci pour votre aide!

a bientot

Z.

----------


## Frifron

Salut 

| est un OU binaire
cubeindex |= 1 correspond effectivement a setter le bit de poid faible de cubeindex a 1, donc a forcer la non parit du nombre. Ce nest pas equivalent a += 1 (mais le resultat sera le meme dans le cas de nombres pairs)

& est un ET binaire
edgeTable[cubeindex] & 1 est un masque sur le bit de poid faible, ca permet de connaitre la parit du nombre. C est exactement equivalent a edgeTable[cubeindex] % 2 mais en bien plus optimis

----------


## zeder59

ok, compris,

merci!

----------

