Globalen Koordinaten von Vertices

Übersicht BlitzBasic Blitz3D

Neue Antwort erstellen

 

onkelz89

Betreff: Globalen Koordinaten von Vertices

BeitragSo, Nov 04, 2007 22:55
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi,

hab ein Porblem - bin gerade unter anderen an einem Schadensmodell dran... Naja ich möchte erstmal nur die Stelle der Kollision prüfen und zwar die genaue (Vertex).

Code: [AUSKLAPPEN]
If CountCollisions(mesh)>0 Then

surf=GetSurface(mesh,CountSurfaces(mesh))


For b=0 To CountVertices(surf)-1


If VertexX(surf,b)<EntityX(test2,True)+testvar# And VertexX(surf,b)>EntityX(test2,True)-testvar# Then

If VertexY(surf,b)<EntityY(test2,True)+testvar# And VertexY(surf,b)>EntityY(test2,True)-testvar# Then

If VertexZ(surf,b)<EntityZ(test2,True)+testvar# And VertexZ(surf,b)>EntityZ(test2,True)-testvar# Then


VertexCoords surf,b,VertexX(surf,b)+.1,VertexY(surf,b)+.1,VertexZ(surf,b)+.1


EndIf
EndIf
EndIf



Next
EndIf


Soweit so gut .. dachte ich... Aber die VertexX usw. Angaben sind nicht Global - sondern beziehen sich nur auf die Veränderung ab der "geburt"... Zumindest denke ich das es so ist.

Achja das +.1 hinter den Werten ist erstmal nur ein Test - ob es sich überhaupt verändert....

Ich hab wie viele Befehle durchgeschaut nix dabei bis jetzt aber irgendwas muss es geben..
 

Dreamora

BeitragSo, Nov 04, 2007 23:28
Antworten mit Zitat
Benutzer-Profile anzeigen
Die VertexX etc sind vom 0,0,0 ihres Objektes aus gerechnet. Das hat nix mit "Ab geburt" zu tun
wie alles bei modellen
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.
 

onkelz89

BeitragSo, Nov 04, 2007 23:52
Antworten mit Zitat
Benutzer-Profile anzeigen
Ah ok jetzt macht es sind Very Happy

Danke klappt super!!!

Code: [AUSKLAPPEN]
If (EntityX(mesh,True)+VertexX(surf,b))<EntityX(test2,True)+testvar# And (EntityX(mesh,True)+VertexX(surf,b))>EntityX(test2,True)-testvar# Then

If (EntityY(mesh,True)+VertexY(surf,b))<EntityY(test2,True)+testvar# And (EntityY(mesh,True)+VertexY(surf,b))>EntityY(test2,True)-testvar# Then

If (EntityZ(mesh,True)+VertexZ(surf,b))<EntityZ(test2,True)+testvar# And (EntityZ(mesh,True)+VertexZ(surf,b))>EntityZ(test2,True)-testvar# Then
            
VertexCoords surf,b,VertexX(surf,b)+.1,VertexY(surf,b)+.1,VertexZ(surf,b)+.1
            
EndIf
EndIf
EndIf

Markus2

BeitragMo, Nov 05, 2007 14:03
Antworten mit Zitat
Benutzer-Profile anzeigen
Und dann mußte noch dran denken ob das Objekt gedreht ist .
Guck mal unter Entity State / TForm...
 

onkelz89

BeitragMo, Nov 05, 2007 14:26
Antworten mit Zitat
Benutzer-Profile anzeigen
meinst du wegen dem + 1 dahinter beim verschieben bestimmt...
Das war nur testweise damit ich sehe ob sich überhaupt was verändert Wink


Habe mitlerweile eine Abfrage wo die beidem Mittelpunkte von den Objekten liegen...
dem entsprechend wird das Objekt verändert. Ist aber bestimmt nicht die beste Methode, ich schau mir die Befehle auf jeden Fall heute Abend zu Haus mal an.

Danke
 

Dreamora

BeitragMo, Nov 05, 2007 14:36
Antworten mit Zitat
Benutzer-Profile anzeigen
Nein er meint weil deine Methode dann hopps gehen könnte wenn das objekt gedreht ist. Deswegen musst du die Koordinaten wenn du "Urzustand" haben willst erst mittels TFormPoint von Entity auf 0 "geformt" werden wobei Entity halt die Entity ist von welcher du den Vertex betrachtest
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

Markus2

BeitragMo, Nov 05, 2007 19:34
Antworten mit Zitat
Benutzer-Profile anzeigen
Diese Befehle kennst du hoffentlich ?

CollisionEntity ( entity,index )
CollisionX# ( entity,index )
CollisionNX# ( entity,index )
CollisionSurface ( entity,index )
CollisionTriangle ( entity,index )
...
CollisionTime ( entity,index )
 

onkelz89

BeitragMo, Nov 05, 2007 20:53
Antworten mit Zitat
Benutzer-Profile anzeigen
So, gerade rein gekommen...

Ehm ja und nein... ich arbeite mir den Befehlen bisher so gut wie nie. Mein bisheriger, funktionierender, aber auch bestimmt umständlicher Lösungsweg sieht so aus:

Code: [AUSKLAPPEN]
If CountCollisions(mesh)>0 Then
surf=GetSurface(mesh,CountSurfaces(mesh))

For b=0 To CountVertices(surf)-1

If (EntityX(mesh,True)+VertexX(surf,b))<EntityX(test2,True)+testvar# And (EntityX(mesh,True)+VertexX(surf,b))>EntityX(test2,True)-testvar# Then
If (EntityY(mesh,True)+VertexY(surf,b))<EntityY(test2,True)+testvar# And (EntityY(mesh,True)+VertexY(surf,b))>EntityY(test2,True)-testvar# Then
If (EntityZ(mesh,True)+VertexZ(surf,b))<EntityZ(test2,True)+testvar# And (EntityZ(mesh,True)+VertexZ(surf,b))>EntityZ(test2,True)-testvar# Then

andersx=0
andersy=0
andersz=0

If EntityX(mesh,True)<EntityX(test2,True) Then andersx=-testvar#
If EntityX(mesh,True)>EntityX(test2,True) Then andersx=testvar#
If EntityY(mesh,True)<EntityY(test2,True) Then andersy=-testvar#
If EntityY(mesh,True)>EntityY(test2,True) Then andersy=testvar#
If EntityZ(mesh,True)<EntityZ(test2,True) Then andersz=-testvar#
If EntityZ(mesh,True)>EntityZ(test2,True) Then andersz=testvar#

VertexCoords surf,b,VertexX(surf,b)+andersx,VertexY(surf,b)+andersy,VertexZ(surf,b)+andersz

EndIf
EndIf
EndIf

Next

EndIf


Ich hab das sooo gemacht weil ich nicht weiß wie ich sonst die Koordinaten raus bekommen, die ich brauch...

EDIT:

Code: [AUSKLAPPEN]
If (EntityX(mesh,True)+VertexX(surf,b))<CollisionX(mesh,i)+testvar# And (EntityX(mesh,True)+VertexX(surf,b))>CollisionX(mesh,i)-testvar# Then
               If (EntityY(mesh,True)+VertexY(surf,b))<CollisionY(mesh,i)+testvar# And (EntityY(mesh,True)+VertexY(surf,b))>CollisionY(mesh,i)-testvar# Then
                  If (EntityZ(mesh,True)+VertexZ(surf,b))<CollisionZ(mesh,i)+testvar# And (EntityZ(mesh,True)+VertexZ(surf,b))>CollisionZ(mesh,i)-testvar# Then
         
                     andersx=0
                     andersy=0
                     andersz=0
         
                     If EntityX(mesh,True)<CollisionX(mesh,i) Then andersx=-testvar#
                     If EntityX(mesh,True)>CollisionX(mesh,i) Then andersx=testvar#
                     If EntityY(mesh,True)<CollisionY(mesh,i) Then andersy=-testvar#
                     If EntityY(mesh,True)>CollisionY(mesh,i) Then andersy=testvar#
                     If EntityZ(mesh,True)<CollisionZ(mesh,i) Then andersz=-testvar#
                     If EntityZ(mesh,True)>CollisionZ(mesh,i) Then andersz=testvar#
            
                     VertexCoords surf,b,VertexX(surf,b)+andersx,VertexY(surf,b)+andersy,VertexZ(surf,b)+andersz
                  EndIf
               EndIf
            EndIf


So wenn ich die Befehle anschaue... - Gleicher Effekt bisher
Achja ich weiß das das viel Performance schluckte... werden die Befehle auch in Variabel speichern.. geht momentan nur rein ums Prinzip ob es geht...

Markus2

BeitragMo, Nov 05, 2007 22:48
Antworten mit Zitat
Benutzer-Profile anzeigen
Jup , mach das weil dann blickste besser durch Wink
Vorher haste unnötig immer die gleiche Berechnung inner Schleife gemacht .
Und auch mal "Else" benutzen .

Code: [AUSKLAPPEN]

If CountCollisions(mesh)>0 Then

ex1#=EntityX(mesh,True)
ey1#=EntityY(mesh,True)
ez1#=EntityZ(mesh,True)

ex2#=EntityX(test2,True)
ey2#=EntityY(test2,True)
ez2#=EntityZ(test2,True)

andersx=0
andersy=0
andersz=0
If ex1<ex2 Then andersx=-testvar#
If ex1>ex2 Then andersx=testvar#
If ey1<ey2 Then andersy=-testvar#
If ey1>ey2 Then andersy=testvar#
If ez1<ez2 Then andersz=-testvar#
If ez1>ez2 Then andersz=testvar#

surf=GetSurface(mesh,CountSurfaces(mesh))

For b=0 To CountVertices(surf)-1

If (ex1+VertexX(surf,b))<ex2+testvar# And (ex1+VertexX(surf,b))>ex2-testvar# Then
If (ey1+VertexY(surf,b))<ey2+testvar# And (ey1+VertexY(surf,b))>ey2-testvar# Then
If (ez1+VertexZ(surf,b))<ez2+testvar# And (ez1+VertexZ(surf,b))>ez2-testvar# Then

VertexCoords surf,b,VertexX(surf,b)+andersx,VertexY(surf,b)+andersy,VertexZ(surf,b)+andersz

EndIf
EndIf
EndIf

Next

EndIf

Neue Antwort erstellen


Übersicht BlitzBasic Blitz3D

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group