3D plane-mesh Y-Coordinate bei x,z herausfinden

Übersicht BlitzBasic Blitz3D

Neue Antwort erstellen

Hakkai

Betreff: 3D plane-mesh Y-Coordinate bei x,z herausfinden

BeitragFr, Jul 11, 2008 21:49
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo,
Wie in der Überschrifft erklärt, suche ich die Y-Coordinate für mein in Milkshape erzeugtes Plane, welches sich in Y-Koordinaten an vielen Stellen unterscheidet. Dafür habe ich jeweils die x,z koordinate vorgegeben.
Nun weiss ich auch nicht ob das unter die Kategorie Collision fällt, da es evtl. nur damit geprüft werden kann, aber diess würde sicher zu lange dauern, da ich jedesmal ein object von x,-20,z bis x,20,z fahren lassen müsste um herauszufinden wo es Kollidiert. Da ich nicht glaube dass es so gemacht wird, würde ich gern Wissen wie man soetwas elegant lösst, falls diess überhaupt möglich ist.
Grüße,
Hakkai

hectic

Sieger des IS Talentwettbewerb 2006

BeitragFr, Jul 11, 2008 22:00
Antworten mit Zitat
Benutzer-Profile anzeigen
LinePick + PickedY sollten da weiter helfen.
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D

Hakkai

BeitragFr, Jul 11, 2008 22:29
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke, den Befehl PickedY hab ich schon ganz verdrengt gehabt.

__ Edit __

nun habe ich

Code: [AUSKLAPPEN]
   
LinePick(sp1_x,sp1_y - 100,sp1_z,0,200,0) ;für spielerx,y,z
sp1_y = PickedY()


angewandt, dabei bewegt sich der spieler in y-coordinate, beim bewegen des Mauszeigers. An ganz anderer Stelle im Code habe ich ein Camerapick verwendet, kann diess der Auslöser für das Problem sein. Irgendwo stand ja das sich PickedY() immer auf das letzte Pick-command bezieht, diess scheint aber nicht der Fall.

__ Edit __
Es ist fast so als würde er das Linepick nicht von den Spieler x,z koordinaten sondern von der Mausposition aus machen, ebend genau wie beim camerapick.

__ Edit __
Mit diesem Linepick komm ich irgendwie nicht zu rande, dabei scheint es doch so logisch.

hectic

Sieger des IS Talentwettbewerb 2006

BeitragSa, Jul 12, 2008 1:54
Antworten mit Zitat
Benutzer-Profile anzeigen
- Wenn du sowas wie TerrainY haben willst, dann muß erstmal LinePick von oben nach unten geführt werden. Auch muß die X/Z -Zielkoordinate die selbe wie die Startkoordinate sein. Etwas anderes wäre auch auch nicht logisch, da LinePick eine virtuelle 3D-Linie im Raum ist.

Also:

Code: [AUSKLAPPEN]
LinePick(sp1_x, +100, sp1_z,    sp1_x, 0, sp1_z)


wobei +100 und 0 von mir frei gesetzte Werte sind. Die musst du noch anpassen.
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D

Hakkai

BeitragSa, Jul 12, 2008 2:28
Antworten mit Zitat
Benutzer-Profile anzeigen
Ok, das es von oben nach unten gehen muss wusste ich nicht.

Code: [AUSKLAPPEN]

LinePick(sp1_x,sp_y+100,sp1_z,0,sp_y-100,0)
sp1_y = PickedY()


sp1_x = X coordinate wo sich der Spieler befindet
sp1_z = Z coordinate wo sich der Spieler befindet

und nun will ich den Spieler immer am Boden halten, dazu benötige ich die Y-Coordinate, aber die muss ich ebend für ein Mesh-plane ermitteln.

Das seltsame ist nur dass wenn ich den Spieler nun bewege, er sich in Y Richtung mit der Maus-Y coordinate bewegt. Er geht also ständig auf und ab, je nachdem wie die Maus sich bewegt. Aber da die beiden Zeilen wie oben genau nacheinander stehen, kann ein evtles Camerapick ja nicht wirken, oder?

hectic

Sieger des IS Talentwettbewerb 2006

BeitragSa, Jul 12, 2008 12:52
Antworten mit Zitat
Benutzer-Profile anzeigen
Also nochmal, wenn du sowas wie TerrainY haben willst, muß jeweils in X und Z die Koordinate gleich sein. Und zwar beim starten der Linie als auch wohin sie hinführt. Du willst doch immer nach unten auf Kollisions prüfen oder etwa nicht. Denn so wie du es jetzt hast, geht die Kollisionslinie je weiter man von dem Mapmittelpunkt entfernt ist, immer schräger.

Beispiel:

Code: [AUSKLAPPEN]
  1         2    Objekte
  |        /
  |       /
  |      /
  |     /
---------------    Mesh-Terrain
  |   /
  |  /
  | /
  |/


Auch sollte die Linie nicht unbedingt weiter führen als nötig. Dein sp_y+100 sollte daher die höhst mögliche Stelle deines Mesh-Terrains beinhalten und dein sp_y-100 eben die nidrigste Stelle abtasten. Dafür würde ich persönlich das sp_y weg machen, außer wenn bewegte Objekte im Spielfeld die den selben Kollisionstype haben.

Das sp_y kann man drin lassen, wenn man eine art ''Gleiter'' baut, der ab einer bestimmten Höhe nicht auf den Boden kollidieren soll. Dann muß man aber dafür sorge tragen, dass die Y-Bewegung niemals größer als die Länge der Linie ist.
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D

Hakkai

BeitragSa, Jul 12, 2008 13:39
Antworten mit Zitat
Benutzer-Profile anzeigen
Die Ziel-koordinate ist absolut?
In der Anleitung steht doch dx,dy,dz was doch der Veränderung zur Anfangskoordinate entspricht.

Dachte ich würde das schon wie in 1 von dir beschrieben, machen.
Danke, für den Hinweis, hoffe es klappt.

__ Edit __
Ah Danke du hast mich auf den richtigen Weg gebracht, aber die 2. Koordinate entspricht glaube tatsächlich dem Unterschiede zur Startkoordinate.

__ Edit __
Es lag daran das ich den Y Start zu klein und das Ende zu hoch engestellt hatte, damit wurde mit dem linepick kein Object gepickt und es hat tatsächlich noch das Camerapick gewirkt.

Danke für deine Mithilfe.



__ Edit __
Gibt es bei Linepick die Möglichkeit das 2. entity für den Pick zurückzugeben, da ich den Pickmode für mein Modell benötige und das Linepick dann dieses Auswählt, obwohl es den Boden unter ihm zurückgeben soll.

__ Edit __
Hat sich erledigt, als Start_y einfach die Person_y verwenden.

hectic

Sieger des IS Talentwettbewerb 2006

BeitragSa, Jul 12, 2008 17:00
Antworten mit Zitat
Benutzer-Profile anzeigen
Sorry, stimmt hast Recht! Die Zielkoordinate ist relativ zu der Startkoordinate (hab ich eben mal ausprobiert).
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D

Hakkai

BeitragSo, Jul 13, 2008 21:07
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi, habe nicht vor erst ein neues Thema zu starten, also frage ich gleich. Wie bekomme ich einen speziellen Vertex in meinem mit Milkshape erstellten Mesh verändert(in Y coordinate.

Bei:
Code: [AUSKLAPPEN]

If MouseDown(1) = True
   
EndIf

würde ich die Y-coordinate des ausgewählten Vertex gerne verändern.

Code: [AUSKLAPPEN]

CameraPick(camera,MouseX(),MouseY()) ; #### frage ab ob objekt gepickt wurde ;wird auch ohne klick gewählt !!! ständige aktuallisierung
pointer_posx = PickedX(); #### wo wurde dabei auf x gepickt
pointer_posy = PickedY() + 10 ;3d_y = z ;tiefe
pointer_posz = PickedZ()

If PickedEntity() = gegner1
   sel_cursor = 2
Else
   sel_cursor = 1
EndIf

bm = PickedSurface()
bm2 = PickedTriangle()
bm3 = TriangleVertex(bm, bm2, 0)

TFormPoint VertexX(bm,bm3), VertexY(bm,bm3), VertexZ(bm,bm3), boden01, 0

ShowEntity bm4
PositionEntity bm4, TFormedX(), TFormedY(), TFormedZ()

If MouseDown(1) = True
   
EndIf



__ Edit __
Ok, vertexcoords() war die Lösung

Neue Antwort erstellen


Übersicht BlitzBasic Blitz3D

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group