Anmelden

Archiv verlassen und diese Seite im Standarddesign anzeigen : Expression 2 holos, um eine Achse rotieren



1mannlan
23.11.2009, 17:43
Hi,

ich habe mich vor kurzem mit den holos aus Expression 2 befasst und habe jetzt auch schon einiges gelernt. Nun habe ich aber ein Problem. Möchte ich z.B. einen tetraeder um seine eigene Achse rotieren lassen, tue ich das ja mit:


holoAng(N,ang(0,Variable,0)

Soweit so gut. Nun habe ich aber das Problem, das ich zum beispiel 2 Objekte um einen gemeinsamen punkt rotieren lassen möchte. dabei meine ich nicht das sie zb direkt über der Expression schweben, sonder z.B. versetzt sind [ holoPos(N,vec(0,10,0)) ]
Sollen sie jetzt beide z.B. die drehungen der Expression übernehmen. Klappt dies nicht, weil ja jede nur um seine eigene achse rotiert und nicht um den punkt selber.

Ich habe hier mal einen Zeichung gemacht falls ihr nicht versteht was ich meine.

http://www.myfiles.i3h.de/myfiles/bild.JPG

Hoffe ihr könnt mir helfen :P

THX

Xasir
23.11.2009, 18:02
Sollte so gehen



interval(100)
A=A+0.1 # geschwindigkeit
if(A1>1000000000){A=0}
holoCreate(3)
holoPos(3,entity():toWorld(vec(cosr(A1)*250,sinr(A 1)*250,0))) #250 ist für den radius
Dreht sich immer um das expression um es um etwas anderes kreisen zu lassen entity() durch das entsprechende ersetzen

1mannlan
23.11.2009, 18:43
Du hast es anscheindend falsch verstanden, es soll nicht um das objekt kreisen, sonder sich mit dem objekt winkeltreu bewegen, dh ein zweiteiliger pfeil, sollte immer zb in die blickrichtung zeigen in die ich sehe, wenn du es probierst zu bauen, wirst du merken was ich meine.

trozdem thx

Xasir
23.11.2009, 19:01
aso oops. hmm da binn ich im moment auch n bissen überfordert

Quabit
24.11.2009, 14:37
Ich hoffe ich hab dein Problem richtig verstanden.

Diese E2 erstellt einen Pfeil aus zwei Holo´s, die um die E2 kreisen:


@name
@inputs
@outputs
@persist T
@trigger
runOnTick(1)

Pos = entity():pos()

if(first()) {
holoCreate(1,Pos+50)
holoModel(1,"hqcylinder2")
holoScale(1,vec(1,1,4))
holoAng(1,ang(90,0,0))
holoCreate(2,entity():pos()+50)
holoModel(2,"hqcone")
holoAng(2,ang(90,0,0))
holoScale(2,vec()+2)
}

T++
X = cos(T)*100
Y = sin(T)*100

holoPos(1,Pos+vec(X,Y,50))
holoAng(1,ang(90,T+90,0))

## Position der Spitze

Holo = holoEntity(1)
Size = Holo:boxSize():z()+holoEntity(2):boxSize():z()+2

holoPos(2,Holo:pos()+Holo:up()*Size)
holoAng(2,ang(90,Holo:angles():yaw(),0))


Hast du das so gemeint?

Pij
24.11.2009, 15:14
Soll nicht um den Chip kreisen. Der Pfeil soll z.B. 50 Units westlich vom Chip gespawnt werden. Wenn man den Chip um die eigene Y-Achse dreht, soll der Pfeil dies auch tun, aber auf der Stelle bleiben.

Quabit
24.11.2009, 15:32
Ah, jetzt versteh ichs.

Sollte jetzt passen:


@name
@inputs
@outputs
@persist
@trigger
runOnTick(1)

Pos = entity():pos()

if(first()) {
holoCreate(1,Pos+50)
holoModel(1,"hqcylinder2")
holoScale(1,vec(1,1,4))
holoAng(1,ang(90,0,0))
holoCreate(2,entity():pos()+50)
holoModel(2,"hqcone")
holoAng(2,ang(90,0,0))
holoScale(2,vec()+2)
}


holoPos(1,Pos+vec(0,50,50))
holoAng(1,entity():angles()+ang(90,0,0))

## Position der Spitze

Holo = holoEntity(1)
Size = Holo:boxSize():z()+holoEntity(2):boxSize():z()+2

holoPos(2,Holo:pos()+Holo:up()*Size)
holoAng(2,entity():angles()+ang(90,0,0))

1mannlan
24.11.2009, 21:06
YEA so hab ichs gemeint, thx!
Aber die schwierigere Frage, kannst du mir erklären wie dus gemacht hast? werde darraus nicht ganz schlau...

Quabit
25.11.2009, 11:06
Ist recht Simple.

Das erste Holo, also die Basis, übernimmt einfach die Angles der E2 (+90 Pitch, damit es gekippt ist).

Mit E:up() bekommt man die Richtung der oberen Seite eines entities, und mit boxSize():z() die Größe der Z-Achse. Size ist hier die Länge der Z-Achsen beider Holos.

boxSize() funktioniert nicht richtig mit Holos, normalerweiße müsste man beide Z-Achsen noch durch 2 Teilen, da man ja nur die Länge von der Spitze bis zur Mitte (E:pos()) braucht. Deshalb muss man hier einfach Size austesten.

Richtung*Größe + Postion = Position der oberen Seite als Weltkoordinaten. Da kann man jetzt das zweite Holo platzieren.


Ich hoffe das ist halbwegs verständlich, hab gerade nicht viel Zeit ;)