2010-01-04 4 views
3

J'essaie de couper un maillage de moitié ou au moins d'en supprimer des visages en temps réel. Comment s'y prendre, je me demande?Couper un maillage de moitié - DirectX

Verrouiller les tampons vertex, memset la face sélectionnée ou le vertex à 0, ne fonctionne pas pour moi. a quelqu'un une solution ou un tutoriel sur ce que je veux vraiment cette fonctionnalité dans mon programme!

Salutations

Répondre

2

Oh, c'est facile. Il n'y a pas besoin de modifier le maillage. D3D peut déjà le faire pour vous!

Définissez le plan de plan via IDirect3DDevice9::SetClipPlane, puis activez le plan via le rendu D3DRS_CLIPPLANEENABLE. Vous pouvez même définir plusieurs clips-avions en même temps si vous voulez ..

Voici un lien vers la msdn entrée: http://doc.51windows.net/Directx9_SDK/?url=/directx9_sdk/graphics/reference/d3d/interfaces/idirect3ddevice9/setclipplane.htm

Et si vous effectuez une recherche google sur « D3D SetClipPlane » vous trouvera beaucoup de discussions et d'exemples de codes comment l'utiliser.

0

Si vous devez supprimer dynamiquement des triangles d'un maillage, le meilleur moyen est d'utiliser des triangles indexés. Lorsque vous créez le tampon d'index, utilisez l'indicateur 'D3DUSAGE_DYNAMIC'. Lorsque vous voulez supprimer des triangles, verrouillez-le avec le drapeau 'D3DLOCK_DISCARD'. Écrivez toute la nouvelle liste d'indices dans le tampon, en omettant les triangles que vous voulez supprimer. Le tampon d'index sera beaucoup plus petit que le vertex buffer, donc le téléchargement de nouveaux index ne sera pas un frein sur le système autant que le vertex buffer. Mais si cela vous pose un gros problème de conversion en listes de triangles indexés, alors opérer ces opérations en utilisant le tampon de vertex est probablement votre meilleure option.

0

Vous dites que la définition du vertex à 0 ne fonctionne pas. En quoi ça ne marche pas?

Si vous définissez la position de toutes les verticles d'un triangle sur (0.0, 0.0, 0.0), le triangle résultant sera de taille zéro et ne devrait pas être dessiné. Juste pour être sûr que vous pourriez le mettre à une position hors écran au lieu de zéro.