Linepick bei mir nichts anderes als Rnd. Warum?

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

DG_

Betreff: Linepick bei mir nichts anderes als Rnd. Warum?

BeitragFr, Dez 29, 2006 23:45
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo,

ich hab mich an einer Funktion zum ermitteln einer Höhe eines Levelmeshes versucht. Nur leider liefert diese an der immer gleichen position unterschiedliche Werte. Hier der Code :

Code: [AUSKLAPPEN]
Function meshy#(mesh,x#,z#)
Local mesh_hoehe# = MeshHeight#(mesh)
Local mesh_y# = EntityY#(mesh)
;
EntityPickMode mesh,2
;
Local mesh2 = LinePick(x#,mesh_y#+mesh_hoehe#+5.0,z#,x#,mesh_y#-5.0,z#,mesh_hoehe#+11.0)
Local y# = PickedY#()
;
EntityPickMode mesh,0
;
Return y#
End Function


Diese Funktion soll die benötigte y Position zum positionieren eines Baumes/Busches/was so anfällt zurückliefern. Es sind keine anderen Objecte pickbar. Hierzu mal ein Bild, wie ich es mir vorgestellt habe :

user posted image

So weit so gut. Nur sieht es in der Realität etwas anders aus. Das Object steht zwar an der richtigen x und z position, nur steht es nach jedem start an einer anderen y position, obwohl ich nichts am code und den meshes ändere. Hierzu noch ein Bild :

user posted image

Hier noch der Code, der das Object setzt :

Code: [AUSKLAPPEN]
mmesh = CopyMesh(waldzeug)
mx# = Float#(23)
mz# = Float#(22)
my# = meshy#(terrain,mx#,mz#)   
myaw = Rand(0,360)
PositionEntity mmesh,mx#,my#,mz#
RotateEntity mmesh,0,myaw,0


wo liegt hier der Fehler? Ich steh grade ziemlich auf dem Schlauch Sad

Achso. am restlichem code und den meshes liegt es nicht. Der Code hat keinen weiteren Einfluss und die Meshes sind auch überprüft (doppelt und dreifach)

edit : ich hab das Gefühl, ich verwende linepick falsch. Ich hab nämlich nocheinmal in der Hilfe nachgeschaut. Ich dachte die parameter 4,5 und 6 stehen für die koordinaten des 2ten punktes, laut hilfe aber der abstand(?). Erklärt aber nicht, warum sich die position immer ändert und warum LinePick(x#,mesh_y#+mesh_hoehe#+5.0,z#,0,-1*mesh_hoehe#-5.0,0,mesh_hoehe#+11.0)
nicht funktioniert. Oder hab ich linepick total verpeilt?

DG_

BeitragMi, Jan 03, 2007 0:19
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo,

sorry für den Doppelpost, aber das Problem hat sich leider nicht gelöst. Hat denn keiner eine Lösung für mein Problem? Ich bin auch offen für komplett andere Lösungen um die Höhe einer bestimten Position herauszubekommen. Ich hab sogar schon versucht ne Sphere vom himmel fallen zu lassen und sobald sie kollidierte hab ich mit entityy() die höhe bekommen. Stellte sich leider nur als sehr ungenau herraus. Danke schonmal für die (hoffentlich kommenden) Antworten.
DG_ = Der Gärtner

Holzchopf

Meisterpacker

BeitragMi, Jan 03, 2007 0:32
Antworten mit Zitat
Benutzer-Profile anzeigen
Also wenn du schon sagst, dass sich das ganze ziemlich zufällig verhält, würd ich mal die Zeile
Code: [AUSKLAPPEN]
myaw = Rand(0,360)

auskommentieren...

Ich bin mir nicht ganz sicher, ob das überhaupt sein kann, aber vielleicht wird dein Mesh nicht wirklich um den Punkt gedreht, um den es gedreht werden soll, oder um den du denkst, dass es sich drehen würde.

Bist du dir sicher, dass die Funktion Zufallswerte zurückliefert oder könnte der Fehler eben auch ausserhalb liegen?
Erledige alles Schritt um Schritt - erledige alles. - Holzchopf
CC BYBinaryBorn - Yogurt ♫ (31.10.2018)
Im Kopf da knackt's und knistert's sturm - 's ist kein Gedanke, nur ein Wurm

DG_

BeitragMi, Jan 03, 2007 1:28
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo,

danke für die Antwort Smile Das mit der Rotation war schon richtig, hat also leider nichts gebracht. Das mit den zufälligen Returnwerten hat sich erledigt. Wo genau dafür der Fehler liegt weiß ich noch nicht, aber nachdem ich nun etwas den code aufgeräumt habe, gibt die funktion immer wieder die selben werte aus. Naja, dennoch funktioniert meine function nicht. Ich hab das ganze mal in einem kleinem Beispiel zusammengefasst.

Code: [AUSKLAPPEN]
Graphics3D 1024,768
;
Global boden = LoadanimMesh("landscape.b3d")
Global boden_unterseite = CopyMesh(boden)
FlipMesh boden_unterseite
EntityColor boden,0,255,0
EntityColor boden_unterseite,0,255,0
;
Global camera = CreateCamera()
Global campiv = CreatePivot(camera)
PositionEntity camera,0,10,0
CameraClsColor camera,69,172,255
CameraRange camera,.1,10000
;
Global sphere = CreateSphere()
ScaleEntity sphere,25,25,25
EntityColor sphere,255,0,0
PositionEntity sphere,10.0,meshy#(boden,10.0,11.0),11.0
;
SetBuffer BackBuffer()
While Not ende
    If KeyHit(1) exit
    Cls
    ; 
   UpdateWorld()
   RenderWorld()
   ;
   Color 0,0,0
   Rect 49,49,350,16
   Color 255,255,255
   Text 50,50,"Camera x/y/z : "+entityx(camera)+"/"+entityy(camera)+"/"+entityz(camera)
   ;
    TurnEntity camera,MouseYSpeed(),-MouseXSpeed(),0
    MoveMouse 1024/2,768/2
    RotateEntity camera,EntityPitch(camera),EntityYaw(camera),0
    MoveEntity camera,(KeyDown(205)-KeyDown(203))*5,0,(KeyDown(200)-KeyDown(208))*5
    ;
    Flip
Wend
End

Function meshy#(mesh,x#,z#)
Local mesh_hoehe# = MeshHeight#(mesh)
Local mesh_y# = EntityY#(mesh)
;
EntityPickMode mesh,2
;
Local mesh2 = LinePick(x#,mesh_y#+mesh_hoehe#+5.0,z#,0,-1*mesh_hoehe#-5.0,0,mesh_hoehe#+11.0)
Local y# = PickedY#()
;
;zum test, um die 2 messpunkte anzuzeigen
punkt_a = CreateSphere()
punkt_b = CreateSphere()
EntityColor punkt_a,0,0,255
EntityColor punkt_b,0,0,255
ScaleEntity punkt_a,20,20,20
ScaleEntity punkt_b,20,20,20
PositionEntity punkt_a,x#,mesh_y#+mesh_hoehe#+5.0,z#
PositionEntity punkt_b,0,-1*mesh_hoehe#-5.0,0
;
EntityPickMode mesh,0
;
DebugLog y#;returnwert dokumentieren
Return y#
End Function


Das zugehörige terrain : http://www.kram-hochladen.de/d...d=MzAzMTM=

Wie man sieht, landet die zu positionierende kugel unter dem Terrain. die Messpunkte scheinen allerdings richtig zu sitzen. Hab ich einfach den BLick für das offensichtliche verloren, oder hab ich einfach falsche Vorstellungen, wie das ganze funktionieren soll?


*|EDIT|* Ich hab nun eine Lösung gefunden. Ich hab den letzten Parameter von Linepick dank nicht genauen Lesens der Onlinehilfe (ja, hab mich schon für geschämt Smile ) falsch verstanden. Mit
LinePick(x#,mesh_y#+mesh_hoehe#+5.0,z#,0,-1*mesh_hoehe#-5.0,0,0)
funktioniert alles wunderbar.

MfG
DerGärtner_

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group