LDRAM

LDRAM is my software for creating brick movies using LDRAW and POV-RAY.  LDRAM (named for LDRaw AniMation, and becasue it turns LDRAW upside down) provides a scripting language that takes a scene and actors created in LDRAW, repositions them, and renders individual frames.  It then takes all those frames and combines them into a single movie.

This program is not yet ready for distribution – there are still some things that I would like to add in – but it does function.  I have set it aside for several years, having gotten busy with other projects, but it is something I feel I should get back to.  Here are a few examples (I have not posted the scene files, just the motion scripts, since it is the scripts that are what I am focusing on.  The scene files simply create the models).

This first scene is long, and does nothing for the first five seconds.  Then on brick will rise into the air, move to the left while rotating 270 degrees, and then lower itself back down onto the other brick.

#SCENE “twobricks.mpd”;

5 SHIFT (brick2, !{0, -40, 0}, 5);
10 SHIFT (brick2, !{-80, 0, 0}, 5);
10 ROTATE (brick2, @{0, -270, 0}, 5);
15 SHIFT (brick2, !{0, 16, 0}, 5);
25 END;

This next scene, quite a bit shorter,  just moves the lightsaber into Darth Vader’s hand, using an absolute positioning system expressed as a matrix.

#SCENE “HandTest.mpd”;

.5 TRANSLATE (LightSabre,
#{
-27.864, 42.373, -0.393,
0.965926, 0.12941, -0.224144,
0.258819, -0.482963, 0.836516,
0, -0.866025, -0.5
}, 1.5, ABSOLUTE);
2.5 END;

This final test adds a little bit more, including adding classes and frames-of-reference.  Here, the lightsaber starts on the table at a position relative to the “world,” but ends in Luke’s hand in a position relative to that hand.  This in theory makes it easier to write scripts, because you don’t need to know where in the world (literally) Luke’s hand is to put the lightsaber in it.

#SCENE “Jedi.mpd”;
#USE “TestClass.ldram”;

0 ROTATE (CAMERA_GLOBE, @{30,-30,0}, &1, ABSOLUTE);
0 ADD (Luke::RightArm, Luke::RightHand, Hand);
.5 SHIFT (LightSabre, !{0,-8, 0}, .5);
1 SHIFT (LightSabre, !{160,0, 0}, 1.5);
2.5 ADD (Luke::RightArm::Hand, LightSabre, ls);
2.5 TRANSLATE (Luke::RightArm::Hand::ls, #{
0, 17.076, -5.776,
1, 0, 0,
0, -0.965926, 0.258819,
0, -0.258819, -0.965926}, 1.5, ABSOLUTE);
5 END;