Hallo ihr zwei
,
ich werde den Mast dann einfach um einen Meter in den Untergrund verlängern. Habe das Modell noch etwas herunterskaliert, es ar doch ein bisschen zu groß. Ich habe mir jetzt diverse .mdl und .msh-Dateien von Bahnübergängen angeguckt, um durch den Animationsaufbau zu blicken, darunter auch der von dir, DarkMo. Das Thema ist noch komplizierter als ich dachte.
Eine Animation von einer Ampel o.ä. erfolgt ja dadurch, dass die beleuchteten Streuscheiben sich hinter einem Objekt befinden, um dann zur entsprechender Zeit vor das Objekt gesetzt zu werden und dann nach entsprechender Zeit wieder hinter dem Objekt zu verschwinden.
Das klingt erstmal ganz einfach. Bei mir befinden sich die beleuchteten Streuscheiben (gelb und rot) derzeit passend direkt vor der Textur der unbeleuchteten Streuscheiben und perfekt an den Signalschirm angepasst. Sie sitzen jetzt am Punkt -0.05 und sind nicht zu sehen.
function data()
return {
boundingInfo = {
bbMax = { 0.084, 0.48314, 2.44, },
bbMin = { -0.10796, -0.48314, -0.0, },
},
collider = {
params = {
},
type = "MESH",
},
lods = {
{
children = {
{
id = "railroad/andreaskreuz.msh",
transf = {
-0.0, -0.08314, 0.048, 0.0, -0.0, 0.4, 0.69282, 0.0, -0.8, 0.0, -0.0, 0.0, -0.0, 0.0, 0.0, 1.0,
},
type = "MESH",
}, {
id = "railroad/signalschirm.msh",
transf = {
-0.0, -0.8, 0.0, 0.0, -0.0, 0.0, 0.8, 0.0, -0.8, 0.0, -0.0, 0.0, -0.0, -0.0, -0.0, 1.0,
},
type = "MESH",
}, {
id = "railroad/BUES72_Lampe_gelb_unten.msh",
transf = {
0.0, 0.0, -0.79982, 0.0, 0.0, -0.79982, 0.0, 0.0, -0.79982, -0.0, -0.0, 0.0, -0.05, 0.0, 2.67102, 1.0,
},
type = "MESH",
}, {
id = "railroad/BUES72_Lampe_rot_unten.msh",
transf = {
0.0, 0.0, -0.79982, 0.0, 0.0, 0.79982, 0.0, 0.0, 0.79982, 0.0, 0.0, 0.0, -0.05, 0.0, 3.03068, 1.0,
},
type = "MESH",
},
},
events = {
close = {
[3] = {
forward = true,
name = "gelb_unten",
},
[4] = {
forward = true,
name = "rot_unten",
},
},
idle_closed = {
[4] = {
forward = true,
name = "rot_unten_dauerhaftein",
},
},
open = {
[4] = {
forward = true,
name = "ausschalten",
},
},
},
matConfigs = {
{ 0, },
},
static = false,
visibleFrom = 0,
visibleTo = 2500,
},
},
metadata = {
availability = {
yearFrom = 0,
yearTo = 0,
},
cost = {
price = 0,
},
},
}
end
Alles anzeigen
In der mesh-Datei muss ich ja die Animationsfolge festlegen. Zum Start der Animation soll die gelbe Scheibe von Position -0.05 auf Position -0.09841 gesetzt werden. Nach 3 Sekunden soll die gelbe Scheibe von Position -0.09841 auf Position -0.05 gesetzt werden, um dann für den Rest der Animation nicht mehr sichtbar zu sein.
function data()
return {
animations = {
gelb_unten = {
type = "KEYFRAME",
params = {
origin = {
0, 0, 0,
},
keyframes = {
{
time = 0,
rot = { 0, 0, 0 },
transl = { 0, 0, 0.09841 }
},
{
time = 3000,
rot = { 0, 0, 0 },
transl = { 0, 0, 0.09841 }
},
{
time = 3001,
rot = { 0, 0, 0 },
transl = { 0, 0, 0 }
},
{
time = 9999,
rot = { 0, 0, 0 },
transl = { 0, 0, 0 }
}
}
}
}
},
matConfigs = {
{ 0, },
},
subMeshes = {
{
indices = {
normal = {
count = 120,
offset = 664,
},
position = {
count = 120,
offset = 424,
},
tangent = {
count = 120,
offset = 784,
},
uv0 = {
count = 120,
offset = 544,
},
},
materials = {
"railroad/lampe_gelb.mtl",
},
},
},
vertexAttr = {
normal = {
count = 24,
numComp = 3,
offset = 240,
},
position = {
count = 144,
numComp = 3,
offset = 0,
},
tangent = {
count = 160,
numComp = 4,
offset = 264,
},
uv0 = {
count = 96,
numComp = 2,
offset = 144,
},
},
}
end
Alles anzeigen
Die Differenz zwischen -0,05 und -0.09841 sind -0,04841, um die die gelbe Scheibe bewegt werden muss. Die rote Scheibe wird erst nach drei Sekunden sichtbar:
function data()
return {
animations = {
rot_unten = {
type = "KEYFRAME",
params = {
origin = {
0, 0, 0,
},
keyframes = {
{
time = 0,
rot = { 0, 0, 0 },
transl = { 0, 0, 0 }
},
{
time = 3000,
rot = { 0, 0, 0 },
transl = { 0, 0, 0 }
},
{
time = 3001,
rot = { 0, 0, 0 },
transl = { 0, 0, -0.09841 }
},
{
time = 9999,
rot = { 0, 0, 0 },
transl = { 0, 0, -0.09841 }
}
}
}
},
rot_unten_dauerhaftein = {
type = "KEYFRAME",
params = {
origin = {
0, 0, 0,
},
keyframes = {
{
time = 0,
rot = { 0, 0, 0 },
transl = { 0, 0, -0.09841 }
},
{
time = 9999,
rot = { 0, 0, 0 },
transl = { 0, 0, -0.09841 }
}
}
}
},
ausschalten = {
type = "KEYFRAME",
params = {
origin = {
0, 0, 0,
},
keyframes = {
{
time = 0,
rot = { 0, 0, 0 },
transl = { 0, 0, -0.09841 }
},
{
time = 2000,
rot = { 0, 0, 0 },
transl = { 0.0, 0, -0.09841 }
},
{
time = 2001,
rot = { 0, 0, 0 },
transl = { 0.0, 0, 0 }
}
}
}
}
},
matConfigs = {
{ 0, },
},
subMeshes = {
{
indices = {
normal = {
count = 120,
offset = 664,
},
position = {
count = 120,
offset = 424,
},
tangent = {
count = 120,
offset = 784,
},
uv0 = {
count = 120,
offset = 544,
},
},
materials = {
"railroad/lampe_gelb.mtl",
},
},
},
vertexAttr = {
normal = {
count = 24,
numComp = 3,
offset = 240,
},
position = {
count = 144,
numComp = 3,
offset = 0,
},
tangent = {
count = 160,
numComp = 4,
offset = 264,
},
uv0 = {
count = 96,
numComp = 2,
offset = 144,
},
},
}
end
Alles anzeigen
Über ein event in der .mdl-Datei werden die Animationen verknüpft:
events = {
close = {
[3] = {
forward = true,
name = "gelb_unten",
},
[4] = {
forward = true,
name = "rot_unten",
},
},
idle_closed = {
[4] = {
forward = true,
name = "rot_unten_dauerhaftein",
},
},
open = {
[4] = {
forward = true,
name = "ausschalten",
},
},
},
matConfigs = {
{ 0, },
},
static = false,
visibleFrom = 0,
visibleTo = 2500,
},
},
Alles anzeigen
Für das Schließen (von aus auf gelb) wird, wenn ich das überhaupt richtig verstanden habe, das event "close" gebraucht, von gelb auf rot benutzt man dann "idle_closed", bis der Zug dann den Bahnübergang verlassen hat, und dann braucht man noch das event "open", um von rot wieder auf den Ausgangszustand zurückzukehren. Den Part habe ich einfach "ausschalten" genannt. Was bedeuten denn diese forward = true & false? Ich blick da einfach nicht durch...
Sobald ich im ModelViewer auf "Play" drücke, stürzt selbiger ab 
Gruß
EDIT:
Die Animationen "gelb_unten" und "rot_unten" müssen natürlich auch über die eckigen Klammern [3] und [4] zugeordnet werden. Wenn man den Wald vor lauter Bäumen nicht sieht...
Die Animation wird jetzt auch abgespielt, nur mit den Koordinaten bin ich noch nicht zufrieden...




