2015-03-13 2 views
2

Je veux représenter un cube ou un polygone comme une collection de particules, de sorte qu'il peut être divisé en une grille spatiale. La raison derrière est que je veux calculer la collision de particule fluide (technique SPH) avec des objets solides comme la construction, le terrain. Comment puis-je représenter des objets solides en tant que collection de particules?pour représenter des ploygons ou des cubes comme une collection de paticles dans opengl

+1

il est plus facile/plus performant pour le garder comme un maillage –

+0

@ratchetfreak Je pense qu'il signifie maille mais avec grille de points comme terrain au lieu de périmètre vertex seulement – Spektre

Répondre

1

Si je bien vous voulez obtenir quelque chose comme ceci:

polygon grid

donc juste diviser votre maillage pour quadriceps ou tout autre primitives que je le ferais comme ceci:

  1. obtenir les points

    juste tous les points de la grille globale qui sont à l'intérieur du polygone. Vous pouvez également ajouter l'intersection de la grille axises avec périmètre polyligne si boucle à travers tous les points de grille à l'intérieur bondissant rectangle de points de polygones et d'utilisation qui sont à l'intérieur avec hit test

    Une autre option est faire quelque chose comme

    convex polygon rasterizer

    mais tramer à l'étape de la grille au lieu d'un seul pixel et stocker le point de coordonnées à la place outputing à image/écran ...

  2. quad/trianguler ...

    l'intérieur est simple, mais le périmètre peut être un gâchis. Si vous ignorez les points de la grille du périmètre, le problème est beaucoup simplifié. Connectez les points en fonction de leurs coordonnées et gérez des cas particuliers ou utilisez n'importe quel algorithme de triangulation standard pour ces zones.

    Le maillage doit être une matrice 2D du point/masque qui permettra de simplifier considérablement le codage:

    GLfloat xyz[ys][xs][3]; 
    bool on[ys][xs]; 
    


    xyz sont les coordonnées
    on est-drapeau si le point est utilisé ou non (à l'intérieur polygone)
    xs,ys est la résolution de la grille de la zone de délimitation ...

    de cette façon, vous savez quel point voisin s quels points donc le tirage est simple (utiliser des quadrichromies ... Cette représentation est également bonne pour la simulation. Pour les volumes utilisent la grille de cube (comme voxels) ou tout simplement modèle BR comme grille de surface du cube ...

  3. Que faire avec périmètre multi-points

    sur le périmètre, il peut y avoir plus de 1 point par position de la grille afin de les fusionner tous ensemble (ou utiliser le plus proche de la position de la grille). Par exemple, voir l'image sur le côté droit de la moitié inférieure. Le point de la grille est à l'extérieur du polygone créant 2 points d'intersection.Si vous fusionnez ce à une seule alors la structure ci-dessus est encore assez

+0

C'est exactement ce que je veux! merci @Spektre – user3059007

+0

Comment est-ce que je peux remplir le polygone avec des particules? comme en 3D, un cube est représenté avec des particules remplies. J'ai besoin de cette information avant le rendu afin que je puisse calculer l'interaction des particules de fluide avec ces particules de cube. – user3059007

+0

@ user3059007 surface seulement ou en volume aussi? pour la surface, j'utilise 3 de ces structures pour le haut et le bas et 1 pour les 4 côtés entre eux ... pour le volume 3D, vous avez besoin de 'xyz [zs] [ys] [[xs] [3]' et réécrivez le hit test pour test si vous êtes à l'intérieur de la maille ou non, le reste est le même ... le rendu du volume peut être un ensemble de couches transluent ou de coupe rigide ... – Spektre