Mesh-Breite, Höhe, Tiefe herausfinden

Übersicht BlitzBasic Codearchiv

Neue Antwort erstellen

x-pressive

Betreff: Mesh-Breite, Höhe, Tiefe herausfinden

BeitragDo, Apr 01, 2004 20:46
Antworten mit Zitat
Benutzer-Profile anzeigen
** Updated **

Mit diesen Funktionen kann man jederzeit die aktuelle Breite, Höhe oder Tiefe eines Meshes herausfinden. Als Parameter einfach das Entity-Handle angeben. Funktioniert auch bei Meshes, die Unterobjekte (Childs) haben.

Beispiel:

meshBreite# = GetMeshWidth(MyMesh)
meshHöhe# = GetMeshHeight(MyMesh)
meshTiefe# = GetMeshDepth(MyMesh)

Am einfachsten ist es, wenn ihr diesen Code als separate Datei speichert und mittels Include einbindet. Dann stehen euch die Funktionen zur Verfügung und euer eigentlicher Code bleibt schön sauber.

BlitzBasic: [AUSKLAPPEN]

; --------------------------------------------------
; FUNCTION: RETURN WIDTH OF A MESH
; --------------------------------------------------
Function GetMeshWidth#(Obj%)
Local surf%,i%,j%
minx# = 10000
maxx# = -10000

; HAS CHILDREN?
If CountChildren(Obj) > 0
For h = 1 To CountChildren(Obj)
Child% = GetChild(Obj,h)
For i = 1 To CountSurfaces(Child)
surf = GetSurface(Child,i)
For j = 0 To CountVertices(surf)-1
If VertexX(surf,j)<minx Then minx=VertexX(surf,j)
If VertexX(surf,j)>maxx Then maxx=VertexX(surf,j)
Next
Next
Next
Return (Abs(maxx-minx) * EntityScaleX(Obj))
End If

; SINGLE MESH ONLY
For i = 1 To CountSurfaces(Obj)
surf = GetSurface(Obj,i)
For j = 0 To CountVertices(surf)-1
If VertexX(surf,j)<minx Then minx=VertexX(surf,j)
If VertexX(surf,j)>maxx Then maxx=VertexX(surf,j)
Next
Next

Return (Abs(maxx-minx) * EntityScaleX(Obj))
End Function


; --------------------------------------------------
; FUNCTION: RETURN HEIGHT OF A MESH
; --------------------------------------------------
Function GetMeshHeight#(Obj%)
Local surf%,i%,j%
miny# = 10000
maxy# = -10000

; HAS CHILDREN?
If CountChildren(Obj) > 0
For h = 1 To CountChildren(Obj)
Child% = GetChild(Obj,h)
For i = 1 To CountSurfaces(Child)
surf = GetSurface(Child,i)
For j = 0 To CountVertices(surf)-1
If VertexY(surf,j)<miny Then miny=VertexY(surf,j)
If VertexY(surf,j)>maxy Then maxy=VertexY(surf,j)
Next
Next
Next
Return (Abs(maxy-miny) * EntityScaleY(Obj))
End If

; SINGLE MESH ONLY
For i = 1 To CountSurfaces(Obj)
surf = GetSurface(Obj,i)
For j = 0 To CountVertices(surf)-1
If VertexY(surf,j)<miny Then miny=VertexY(surf,j)
If VertexY(surf,j)>maxy Then maxy=VertexY(surf,j)
Next
Next

Return (Abs(maxy-miny) * EntityScaleY(Obj))
End Function


; --------------------------------------------------
; FUNCTION: RETURN DEPTH OF A MESH
; --------------------------------------------------
Function GetMeshDepth#(Obj%)
Local surf%,i%,j%
minz# = 10000
maxz# = -10000

; HAS CHILDREN?
If CountChildren(Obj) > 0
For h = 1 To CountChildren(Obj)
Child% = GetChild(Obj,h)
For i = 1 To CountSurfaces(Child)
surf = GetSurface(Child,i)
For j = 0 To CountVertices(surf)-1
If VertexZ(surf,j)<minz Then minz=VertexZ(surf,j)
If VertexZ(surf,j)>maxz Then maxz=VertexZ(surf,j)
Next
Next
Next
Return (Abs(maxz-minz) * EntityScaleZ(Obj))
End If

; SINGLE MESH ONLY
For i = 1 To CountSurfaces(Obj)
surf = GetSurface(Obj,i)
For j = 0 To CountVertices(surf)-1
If VertexZ(surf,j)<minz Then minz=VertexZ(surf,j)
If VertexZ(surf,j)>maxz Then maxz=VertexZ(surf,j)
Next
Next

Return (Abs(maxz-minz) * EntityScaleZ(Obj))
End Function

; --------------------------------------------------
; FUNCTION: RETURN X-SCALE OF A MESH
; --------------------------------------------------
Function EntityScaleX#(Obj%)
Local vx#,vy#,vz#
vx = GetMatElement(Obj, 0, 0)
vy = GetMatElement(Obj, 0, 1)
vz = GetMatElement(Obj, 0, 2)
Return (Sqr(vx*vx + vy*vy + vz*vz))
End Function


; --------------------------------------------------
; FUNCTION: RETURN Y-SCALE OF A MESH
; --------------------------------------------------
Function EntityScaleY#(Obj%)
Local vx#,vy#,vz#
vx = GetMatElement(Obj, 1, 0)
vy = GetMatElement(Obj, 1, 1)
vz = GetMatElement(Obj, 1, 2)
Return (Sqr(vx*vx + vy*vy + vz*vz))
End Function


; --------------------------------------------------
; FUNCTION: RETURN Z-SCALE OF A MESH
; --------------------------------------------------
Function EntityScaleZ#(Obj%)
Local vx#,vy#,vz#
vx = GetMatElement(Obj, 2, 0)
vy = GetMatElement(Obj, 2, 1)
vz = GetMatElement(Obj, 2, 2)
Return (Sqr(vx*vx + vy*vy + vz*vz))
End Function
• BLITZ SHOWCASE:
PARTICLE CANDY • PARTICLE CANDY FOR iPHONE • SPRITE CANDY • DON'T GET ANGRY! 2-3 • CLICK CLACK XL

Neue Antwort erstellen


Übersicht BlitzBasic Codearchiv

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group