Nahestes Objekt suchen (3D)

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

 

Nerle

Betreff: Nahestes Objekt suchen (3D)

BeitragDo, Nov 29, 2007 13:44
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich würde gerne erreichen, dass ein Objekt das sich ihm naheste bzw. räumlich nächste andere Objekt sucht, und sich nach diesem ausrichtet.

Der Befehl ENTITYPICK arbeitet dabei aber leider ja nur "auf Sicht" wie es scheint, d.h. das Ausrichtungsobjekt muss das Zielobjekt bereits sehen.
Ich möchte aber, dass es sich bereits vorher zu ihm ausrichtet.

Gibt es einen Befehl oder eine Methode, wie ich ein Objekt auf das jeweils im am nahesten ausrichten kann (oder zumindest einmal feststellen kann), OHNE dass sich das Ziel-Objekt dabei bereits in Sichtlinie des ersten Objekts befinden muss?

Über die Boardsuche konnte ich leider nichts finden, da ich beim besten Willen nicht weiß, welche Suchwörter ich benutzen sollte, ohne dass gleich hunderte unrelevanter Treffer kommen.

Sollte es für sowas einen Befehl geben, den ich sogar kenne, aber im Moment nicht drauf kam, spül ich dafür zur Strafe als nächster das Geschirr in der Forenküche Smile
  • Zuletzt bearbeitet von Nerle am Do, Nov 29, 2007 14:24, insgesamt einmal bearbeitet

Dottakopf

BeitragDo, Nov 29, 2007 13:54
Antworten mit Zitat
Benutzer-Profile anzeigen
entitydistance und pointentity müssten helfen

am besten du prüfst zu jedem die entfernung und schaust wer die kleinste hat. dann auf dieses objekt pointen und bewegen.

leider bin ich jetzt nicht sonderbar fit in 3D, daher kann ich dir nicht mehr helfen.

mfg Dottakopf

NightPhoenix

BeitragDo, Nov 29, 2007 18:00
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich hab deine Frage mal als Möglichkeit genutzt bissl was dazu zu lernen ^^

Hier mal ein Code von mir improvisiert

Code: [AUSKLAPPEN]

Graphics3D 0,0,32,1
SetBuffer BackBuffer()


Type Tobj
   
   Field mesh
   Field posx
   Field posy
   Field posz
   Field red
   Field green
   Field blue   
End Type





Anzahl=100

SeedRnd MilliSecs()

   For i=1 To Anzahl
      ct.Tobj = New Tobj
         ct\mesh=CreateCube()
               ct\posx=Rnd(-100,100)
               ct\posy=Rnd(-100,100)
               ct\posz=Rnd(-100,100)
            PositionEntity ct\mesh,ct\posx,ct\posy,ct\posz
               ct\red=Rand(1,255)
               ct\green=Rand(1,255)
               ct\blue=Rand(1,255)
            EntityColor ct\mesh,ct\red,ct\green,ct\blue
   Next
   


kamera=CreateCamera()









Kleinste_Distanz=10000000

While Not KeyHit(1)


   For ct.Tobj = Each Tobj
   Dist=EntityDistance(kamera,ct\mesh)
      If Kleinste_Distanz>Dist Then
         Kleinste_Distanz=Dist
         PointEntity kamera,ct\mesh
         MeshID=ct\mesh
      EndIf
   Next
   



UpdateWorld
RenderWorld
Text 0,20,"MeshID: "+MeshID
Text 0,40,"Distanz "+Kleinste_Distanz
Flip
Wend
End


Der Code arbeitet mit Types. Die Farbe bzw. Position des ausgewählten Objektes kannst du über ct\posx, usw. abfragen. Die Farbe mit ct\red, usw.


Ich hoffe er hilft dir weiter!

MfG.

Foppele

BeitragSo, Dez 02, 2007 1:18
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich hätte noch ne andere Idee und zwar eine Sphere um das suchende Objekt erstellen und die dann in einer Schleife gross skalieren und die Kollisionen checken...

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group