ScaleEntity - unerwünschte Verschiebung

Übersicht BlitzBasic Blitz3D

Neue Antwort erstellen

 

Omenaton_2

Betreff: ScaleEntity - unerwünschte Verschiebung

BeitragFr, Feb 02, 2007 11:58
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich habe ein Raumschiff an das ein extra Objekt, ein Triebwerk-Strahl (Flammen ähnlich) angehängt ist (eigentlich sind es 2 Strahlen, aber als 1 Objekt).

Ich möchte den Strahl entsprechend der Einstellung des Triebwerkes an der Z Achse in die Länge ziehen. Das soll anzeigen, wie schnell das Schiff fliegt.
Das tue ich mit ScaleEntity wobei nur Z erhöht wird, bei den 2 anderen Stellen steht eine 1, also keine Änderung.
Das in die Länge ziehen funktioniert auch wie es soll. Der Strahl wird wenn ich die Triebwerleistung erhöhe länger, wenn ich die Leistung senke kürzer.

Jetzt das Problem:
Sobald ich den Strahl skaliere, verschiebt sich der Strahl ein deutliches Stück entlang der Z Achse nach hinten (also in die Richtung des Betrachters). Je öfter ich die Leistung erhöhe und den Strahl dehne, desto größer wird der Abstand zwischen den Ausgang des Raumschiffstriebwerkes und dem Strahl.

Ich weiß nicht, wieso es zu dieser Verschiebung kommt.
Ich habe gedacht, vielleicht könnte es daran liegen, wo der "Schwerpunkt" des Objektes liegt. Ich habe damit experimentiert und alles ausprobiert. Den Schwerpunkt an den "Stamm" des Triebwerkes gesetzt, in die Mitte hinten, ganz in die Mitte. Das alles hat nichts geholfen.
Der Strahl Objekt wird beim Einladen genau an die Stelle gesetzt, wo es hingehört. Nicht weil ich es in Code so platzieren, sondern weil ich es schon an der zu dem Schiff passenden Stelle abgespeichert habe. Also, es ist nicht bei Null Punkt.
Ich habe testweise den Strahl in 3D-Grafikprogramm genau in die Mitte gezogen und so abgespeichert. Darauf hin bleibt der Fehler bestehen, nur verschiebt sich der Strahl nun nicht nach Hinten sondern nach Vorne.
Also, das scheint schon mal eine gewisse Auswirkung haben.
Vielleicht müßte ich es irgendwie hinbekommen, daß das Objekt exakt mittig abgespeichert wird ?

Oder habe ich einfach die falsche Erwartungen. Ich möchte nämlich, daß der Strahl an dem Triebwerkausgangspunkt hängen bleibt und sich entlang der Z Achse nach hinten schiebt. Das geht vielleicht gar nicht, weil das Objekt sich gleichäßig nach Hinten UND nach Vorne in die Länge gezogen wird.
Wenn das so ist und wenn ich es nicht irgendwie hinbekomme den Strahl nur in eine Richtung, nach Hinten auszudehnen, dann muß ich wohl durch TranslateEntity dieser Bewegung entgegenwirken. Das ist aber unschöne Lösung, den ich vermeiden möchte.

Hat jemand Erfahrung mit soetwas oder hat jemand sonst eine Idee, wie ich den Strahl wie gewünscht skalieren könnte ? Ohne örtliche Verschiebung ?

biggicekey

BeitragFr, Feb 02, 2007 12:02
Antworten mit Zitat
Benutzer-Profile anzeigen
wenn du den strahl wirklich mit dem mittelpunkt auf die ursprungkoordinaten gepackt hast im 3dmodeller dann sollte es eigentlich zu keiner verschiebung mehr kommen.
sonst könntest du es noch mit SCALEMESH versuchen. (oder auch fitmesh)
#45 www.icekeyunlimited.de www.starcrusade.de
Gewinner BCC#17 !!! mit dotkiller
Nothing more to register - you've cleaned us out![/size]

hectic

Sieger des IS Talentwettbewerb 2006

BeitragFr, Feb 02, 2007 12:32
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich habe grade mal ein bischen rumgeforscht und kann nachvollziehen, warum man hier 'verzweifelt'. Aber eine Rätzelslösung habe ich denoch. Das mit dem verschieben des Koordinatenursprunges ist eine gute Idee, wenn Blitz3D sich bei ScaleEntity nicht sein 'eigenen' machen würde.

Lösung:
Verscheibe den Koordinatenursprung mit zB PositionMesh an die Stelle, die die Mitte des Objektes (Vertexmitte nicht Koordinatenursprung) genau gegenüber des Flammenursprungs liegt... Bähhh, schlecht zu erklären. Hier ein Bild

user posted image

Dein Koordinatenursprung muss da hin, wo der dicke fette schwarze Punkt eingezeichnet ist...

edit1:
VMitte ergibt sich aus (VMin+VMax)/2
L2 muss dann die Länge von L1 haben
Wenn man das alles dann richtig positioniert, kann man mit ScaleEntity einfach rumspielen und der Flammenursprung bleibt an der Stelle.

edit2:
VMitte lässt sich übrigens einfach im Zusammenhang mit Fitmesh ausrechnen.
 

Omenaton_2

BeitragFr, Feb 02, 2007 12:43
Antworten mit Zitat
Benutzer-Profile anzeigen
Vielen Dank für die schnelle und gute Anworten. Sobald ich dazu komme werde ich es ausprobieren.
 

Omenaton_2

BeitragSa, Feb 03, 2007 15:04
Antworten mit Zitat
Benutzer-Profile anzeigen
Nochmal danke für die Hilfe.
Hectic, die Methode hat so nicht sofort geholfen, aber von deinem Ansatz ausgehend habe ich schließlich durch herumprobieren die einfachste Lösung gefunden :
Ich habe das Strahl-Objekt in dem dem 3D-Editor exakt auf die Mitte gezogen (Kreuz), dann mußte ich den Schwerpunkt genau so weit nach hinten schieben, wie lang das Objekt ist. So geht es und so muß ich nichts in Code herumschieben.

Die Idee mit FitMesh ist auch gut. Das werde ich in der Zukunft bestimmt noch brauchen und damit könnte ich das machen, was ich eigentlich wünsche, skalieren nur in bestimmte Richtungen.
 

Dreamora

BeitragSa, Feb 03, 2007 18:22
Antworten mit Zitat
Benutzer-Profile anzeigen
Es gibt noch 2 andere Möglichkeiten in diesem Fall:

1. ScaleMesh. Damit wird die Geometrie verändert anstatt die gesamte Boundingbox einfach aufgeblasen

2. Wohl die sinnvollere: Pivot machen dort positionieren wo du das Streckungszentrum willst und es dann als Parent des Objektes setzen. Pivot dann skalieren und trala Smile
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

Neue Antwort erstellen


Übersicht BlitzBasic Blitz3D

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group