Quelqu'un peut m'expliquer par pixel de détection de collision?
Quelqu'un peut m'expliquer les avantages et les inconvénients de celui-ci et en mathématiques impliqués avec elle?
Des précisions sur 2d / 3d et de quelques exemples ou plus de détail serait aller un long chemin à aider les moi et les autres de répondre à la question.
Je seconde, veuillez préciser.
Je seconde, veuillez préciser.
OriginalL'auteur | 2008-10-06
Vous devez vous connecter pour publier un commentaire.
Pour la 2D:
Vous n'avez pas besoin des mathématiques pour résoudre ce problème, vous avez seulement besoin d'une coutume bitblit-routine. Vous blit collision candidats dans une surface cachée par la peinture de leur collisionmasks sur cette surface et de vérification, si les pixels que vous voulez juste tirer (pixel != 0) . Ensuite, vous aurez une collision. Bien sûr, vous devriez préalable par délimitation de rectangles si une collision peut se produire.
Pour la 3D:
Vous aurez besoin des mathématiques(beaucoup)!
fondamentalement, vous permettra de vérifier chaque surface de votre acteur à l'encontre de chaque surface de votre ennemi.
Ce sera fait par le calcul d'un avion-ray intersection. Il y a beaucoup d'optimisation possible ici, mais cela dépend de votre représentation en 3d. C'est aussi pas de Pixel Par Pixel-Collision, mais Per-Vertex-Collision
OriginalL'auteur Peter Parker
Je vais commencer par répondre les avantages et les inconvénients de chaque pixel de détection de collision, et d'examiner ensuite les aspects mathématiques plus tard.
Par pixel de détection de collision, aussi connu comme le pixel de détection de collision, et peut-être plus précisément de l'image basée sur la détection de collision, c'est de trouver des collisions entre la collision des objets qui sont représentés comme des images. Cette méthode spatiale est en contraste à plus des méthodes géométriques, où les polygones et autres formes géométriques sont utilisés pour représenter la collision des objets.
Pour la 2D, il y a généralement 3 options différentes:
Image basée sur la détection de collision est précis et facile à utiliser et à comprendre. En ce qui concerne les jeux qui utilise des images pour le dessin, à l'aide d'image basé sur la détection de collision signifie que chaque fois que les sprites à l'écran se chevauchent, ils se chevauchent aussi dans la détection de collision système. Ils sont également utiles pour les jeux où déformable collision objets sont nécessaires, comme pour destructibles terrain vu des jeux comme Worms en 2D, car il y a généralement peu de pré-calcul impliqués. Leur principal inconvénient est qu'ils sont très inefficaces par rapport aux autres méthodes, en particulier lors de la rotation et de mise à l'échelle de la collision des objets.
Formes géométriques simples sont à la fois simples à utiliser et très efficace. Si la précision n'est pas nécessaire, ou la collision des objets s'intègrent bien avec les formes géométriques simples (par exemple, si votre collision, les objets sont des boules, des cercles est un ajustement parfait, parfois même mieux que les images). Leur principal inconvénient est leur précision. Pour la haute précision où les notions de base des formes ne correspondent pas, vous devez combiner les formes simples dans des formes plus complexes, ou vous devez utiliser plus général et de formes complexes. Dans les deux cas, vous vous retrouvez dans la troisième méthode.
Formes géométriques complexes peut être un peu précis et relativement efficace ou inefficace, selon la complexité de la forme utilisée(s) pour représenter un objet collision. Un inconvénient important est la facilité d'utilisation. Lors de la collision, les objets ne correspondent pas avec les formes géométriques, la précision peut avoir à souffrir, ou plusieurs, éventuellement différentes formes devra être utilisé pour la représenter, ce qui prend du temps. En outre, certaines formes sont complexes et ne sont pas faciles à créer, à moins que vous pouvez générer à partir d'une image automatiquement. Un avantage important est que la rotation et mise à l'échelle est généralement efficace et facile, surtout par rapport à l'image basée sur la détection de collision.
Image basée sur la détection de collision est généralement considéré comme une mauvaise solution, car elle est souvent inefficace, en particulier lors de l'utilisation de la rotation et mise à l'échelle. Cependant, comme elle est très souple, précis et facile à utiliser, j'ai décidé de mettre en œuvre une bibliothèque qui cherche à résoudre la question de l'efficacité. Le résultat est PoxelColl, qui utilise automatiquement précalculées convexe coque à la vitesse de l'image basée sur la détection de collision. Ce qui donne la facilité d'utilisation, la flexibilité, la précision et l'efficacité, et prend en charge la rotation et mise à l'échelle. Le principal inconvénient est qu'il n'est pas efficace dans tous les cas par rapport à l'pures et géométriques, des solutions de, et il utilise pré-calcul est nécessaire, ce qui signifie qu'il n'est pas très inefficace pour déformable collision des objets.
Pour la 3D, les options et les avantages sont assez semblables:
Il convient de noter que Peter Parker réponse est mauvais pour la 3D; pixels (picture elements) en 2D correspondent à voxels (éléments de volume) en 3D.
Certaines de ces différences sont que la méthode spatiale est beaucoup plus rare pour la 3D que pour la 2D. Une raison possible est que, parce que la 3D ajoute une dimension supplémentaire, la solution spatiale est de plus en plus, tandis que les géométrique simple encore des solutions efficaces. Et dans les jeux, la détection de collision est généralement une opération en ligne, nécessitant un certain niveau d'efficacité, de faire de l'efficacité important. Les Volumes sont donc plus souvent utilisés dans les applications de jeu où les accidents ne doivent pas être déterminés en ligne.
Pour des exemples de détection de collision avec un volume de base de la détection de collision, voir, par exemple,Volumétrique de détection de collision pour les objets déformables, où leur utilisation de volumes au lieu de formes géométriques signifie qu'ils peuvent gérer déformable collision des objets avec de forme arbitraire, surfaces fermées.
Quant à la seconde question, les mathématiques impliquées dans la base d'image, les collisions peuvent aller du simple au complexe. Le cas simple est essentiellement l'aide de axis-aligned bounding boxes pour les images, à trouver leur intersection, et ensuite seulement de vérifier les images dans l'intersection. Les solutions plus complexes comprennent la bibliothèque je l'ai mentionné avant, où polygone convexe intersection est nécessaire. Et pour la 3D cas, les solutions vont du simple au très complexe.
OriginalL'auteur PoxelColl
C'est plus précis que les sommets (ou hit-boîtes, etc). Je suppose que vous parlez de la 2d ici (3d serait boîte-modèle vs vertex). Par pixel, vous permettrait d'avoir détaillé les sprites qui de petites choses (missiles, par exemple) risquent d'entrer en collision avec plus de réalisme.
C'est plus des maths et plus lente que la méthode conventionnelle, qui serait d'élaborer une boîte (ou un autre facilement mathématiques de la forme d'un cercle) et de dire que "c'est l'acteur, tout ici est-il'. Toutefois, il est plus précis.
OriginalL'auteur SCdF
Quand on parle des avantages et des inconvénients vous devez également tenir compte de la collision de réponse. Que voulez-vous faire lors d'une collision est détectée? Si vous êtes à la détection d'un objet de frapper un autre objet dont le résultat est l'un des deux ou les deux objets détruits, puis par pixel de détection de collision est bonne et exacte. Si vous souhaitez que l'objet de réagir d'une autre façon, c'est à dire coulissantes contre un mur, de rebondir, etc... ensuite, vous pouvez travailler avec un certain type de rectangle/cercle/ovale qui fera la collision réponse semble plus lisse et plus homogène, moins de chance de se retrouver coincé.
OriginalL'auteur Gerald
Par pixel de détection de collision est une relique du passé, quand le graphisme est simple et matérielle 2D gratuit et inclus la vérification des collisions entre les sprites et les décors. Alors qu'aujourd'hui les graphiques 2d est plus complexe, pixel par pixel les tests de collision sont rarement utilisés, en particulier parce que l'objet visible de la forme et de collision forme sont généralement différents. Des cercles ou des boîtes sont suffisantes pour la plupart des cas. Aussi, depuis opengl matériel graphique ne peut pas faire le contrôle des collisions plus, vous devez écrire de rendu supplémentaire de code, à l'aide de CPU pour seul but de la vérification des collisions, tout en gardant supplémentaires données de l'image dans la mémoire du système, étant donné que les graphiques de la mémoire ne sont pas accessibles directement.
OriginalL'auteur noop
Les pros ont déjà été mentionnés: C'est du pixel parfait et juste, il n'y a pas de faux positifs, ni de faux négatifs. L'inconvénient principal est que c'est onéreux, mais si Vous faites une simple boîte englobante vérifier d'abord, cela ne devrait pas être un gros problème. Dans l'âge de l'OpenGL et DirectX, il existe un autre problème: Le sprite de données sont généralement des textures, ce qui signifie qu'ils sont dans la VRAM et Vous ne pouvez pas vérifier les valeurs des pixels facilement Vous-même. En OpenGL, Vous pouvez utiliser le
glReadPixels
fonction pour obtenir les recoupé partie de deux sprites vers la RAM) et de vérifier la collision, ou Vous pouvez utiliser le l'occlusion de la requête. L'occlusion de la requête approche devrait avoir une meilleure performance, que Vous n'êtes pas au déplacement des données à partir de GPU, mais occlusion requêtes ne sont pas pris en charge partout (ie. ils ne sont pas pris en charge OpenGL ES, quelqu'un s'il vous plaît corrigez-moi si je me trompe).OriginalL'auteur zoul
prendre sur OpenGL et la texture des cas: on peut précalculer un peu de la matrice de l'image et de tester si deux pixels sont superposées.
OriginalL'auteur