Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
C# / VB.NET - [C#] Collisioni con le managed directx
Forum - C# / VB.NET - [C#] Collisioni con le managed directx

Avatar
Linkinf22 (Normal User)
Rookie


Messaggi: 59
Iscritto: 28/06/2009

Segnala al moderatore
Postato alle 11:31
Domenica, 07/11/2010
Salve!
Da pochi mesi mi sono messo a studiare le managed directx.
Prima delle managed directx avevo provato XNA, ho avuto circa 5 mesi di esperienza con XNA, dopodichè ho deciso di passare alle managed Directx: che è più simile alle directx (in futuro spero di passare totalmente a quelle, ma ancora di c++ non ho molte conoscenze) ed in confronto ad XNA mi trovo anche meglio.

Sto cominciando ora a fare un progettino completo con il 3D, ma siccome finora non ho ancora avuto a che fare con le collisioni, mi trovo perso.
In XNA c' è la comodità delle BoundingSphere, mentre nelle managed Directx no.
Ho trovato la funzione Geometry.ComputeBoundingSphere, che restituisce un valore float ed ha come parametro out il "centro della sfera".

Non ho la minima idea di come sfruttare questi due valori che restituisce.
Qualcuno ha già avuto qualche esperienza simile e ha qualche suggerimento da darmi?

Grazie in anticipo.

Ultima modifica effettuata da Linkinf22 il 07/11/2010 alle 11:33
PM
Avatar
Il Totem (Admin)
Guru^2


Messaggi: 3635
Iscritto: 24/01/2006

Up
0
Down
V
Segnala al moderatore
Postato alle 13:48
Domenica, 07/11/2010
Beh, testare la collisione tra due sfere è molto semplice. Se la distanza dei centri è minore della somma dei raggi, allora si intersecano.
Testarla invece tra una sfera e un bounding box è più rognoso. Se assumiamo che il bounding box sia axis-aligned (e se non lo è lo puoi rendere tale ruotando la sfera attorno ad esso in modo opportuno), puoi fare così: ricavi l'equazione del segmento che unisce il centro del bounding box al centro della sfera, quindi lo intersechi con la sfera e ottieni un altro punto P che appartiene alla superficie della sfera (ed è il punto in assoluto più vicino al parallelepipedo). Se P è compreso nel volume del solido, allora sfera e parallelepipedo si intersecano.

"La dimostrazione è lasciata come semplice esercizio al lettore."


"Infelici sono quelli che hanno tanto cervello da vedere la loro stupidità."
(Fligende Blatter)

"Dubitare di se stessi è il primo segno d'intelligenza."
(Ugo Ojetti)
PM
Avatar
Thejuster (Member)
Guru^2


Messaggi: 1836
Iscritto: 04/05/2008

Up
0
Down
V
Segnala al moderatore
Postato alle 9:49
Lunedì, 08/11/2010
ti conviene usare un motore fisico,
perché prima o poi incontrerai altri problemi che vanno oltre alla semplice collisione di 2 oggetti.

fare delle prove e testare il boundigsphere o il boundigbox e sempre utile
ma avere a disposizione un motore fisico come bepu o nvidia psyX e molto meglio


PM
Avatar
Linkinf22 (Normal User)
Rookie


Messaggi: 59
Iscritto: 28/06/2009

Up
0
Down
V
Segnala al moderatore
Postato alle 17:09
Lunedì, 08/11/2010
Per il physX credo di non avere abbastanza conoscenza del c++
Cercherò di arrangiarmi fin dove posso, quando avrò abbastanza conoscenze sul c++ mi piacerebbe farci un pensierino al physx.

Penso che il suggerimento di Il Totem mi possa essere utile, appena avrò tempo ci proverò.

Già che ci sono, conoscete un modo per nascondere il cursore quando si trova sopra la finestra?

Ho provato con l' evento MouseEnter e metterci Cursor.Hide(); ma non funziona, il cursore resta visibile.

PM