01/10/11 10:37
GN
Allora, sto sviluppando un gioco in 3D con DirectX9 in VB.NET e sto implementando la gestione delle collisioni. Ho scritto questo codice, che però non va:
La funzione Collisione() dovrebbe restituirmi un booleano che indichi se un oggetto passato come parametro sia in collisione con anche uno solo di quelli passati nell' altro parametro, ma non funziona. La struttura oggX non contiene altro che una mesh e qualche altra informazione:
Grazie mille a chiunque mi aiuterà.
EDIT 1: dimenticavo di dire che ho usato i Rectangle perchè le collisioni mi bastano in 2D perchè gli oggetti hanno tatti la stessa posizione so Y.
EDIT 2: ho notato che avevo fatto una cavolata, cioè:
invece che
Però non ho risolto.
Function Collisione(ByVal mesh1 As oggX, ByVal mesh2 As List(Of oggX)) As Boolean For Each i As oggX In mesh2 If CollisioneOggetto(mesh1, i) Then Return True Exit Function End If Next Return False End Function Sub BoundingBox(ByVal corrMesh As oggX, ByRef min As Vector3, ByRef max As Vector3) Dim descr As VertexBufferDescription = corrMesh.mesh.VertexBuffer.Description Dim vertexData As GraphicsStream = corrMesh.mesh.VertexBuffer.Lock(0, 0, LockFlags.ReadOnly) Geometry.ComputeBoundingBox(vertexData, corrMesh.mesh.NumberVertices, descr.VertexFormat, min, max) corrMesh.mesh.VertexBuffer.Unlock() Return End Sub Function CollisioneOggetto(ByVal m1 As oggX, ByVal m2 As oggX) As Boolean Dim min1 As New Vector3() Dim max1 As New Vector3() Me.BoundingBox(m1, min1, max1) Dim min2 As New Vector3() Dim max2 As New Vector3() Me.BoundingBox(m2, min2, max2) Dim r1 As New RectangleF(min1.X, min1.Z, max1.X - min1.X, max1.Z - min1.Z) Dim r2 As New RectangleF(min2.X, min2.Z, max2.X - min2.X, max2.Z - min2.Z) Return r1.IntersectsWith(r2) End Function
La funzione Collisione() dovrebbe restituirmi un booleano che indichi se un oggetto passato come parametro sia in collisione con anche uno solo di quelli passati nell' altro parametro, ma non funziona. La struttura oggX non contiene altro che una mesh e qualche altra informazione:
Public Structure oggX Public pos As Vector3 Public rot As Vector3 Public mesh As Mesh Public numX As Integer Public tex() As Texture Public mat() As Material End Structure
Grazie mille a chiunque mi aiuterà.
EDIT 1: dimenticavo di dire che ho usato i Rectangle perchè le collisioni mi bastano in 2D perchè gli oggetti hanno tatti la stessa posizione so Y.
EDIT 2: ho notato che avevo fatto una cavolata, cioè:
Me.BoundingBox(m1, min1, max1) Me.BoundingBox(m2, min1, max1)
invece che
Me.BoundingBox(m1, min1, max1) Me.BoundingBox(m2, min2, max2)
Però non ho risolto.
Ultima modifica effettuata da GN 03/10/11 19:51
aaa