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

![]() |
HakkaiBetreff: 3D plane-mesh Y-Coordinate bei x,z herausfinden |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
||
![]() |
hecticSieger des IS Talentwettbewerb 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
LinePick![]() ![]() |
||
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D |
![]() |
Hakkai |
![]() Antworten mit Zitat ![]() |
---|---|---|
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. |
||
![]() |
hecticSieger des IS Talentwettbewerb 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
- 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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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? |
||
![]() |
hecticSieger des IS Talentwettbewerb 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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. |
||
![]() |
hecticSieger des IS Talentwettbewerb 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group