Members: Arif Roktim Period 4
Team Name: Krusty Krab
All mdl files are under scripts/
To run a script, do $ make S=<path to script>
The script file can be tab completed
Example: $ make S=scripts/teapot.mdl
- Added
light
mdl command; I loop through all the lights - Add
mesh
mdl command
Demonstration: scripts/teapot_colorful_moving.mdl
- Do arithmetic on expressions
Expressions are always contained in parentheses. The available operators are
+
: Addition-
: Subtraction*
: Multiplication/
: Division//
: Integer Division
The type casting works like python 2:
For the first 4 operators, if either of the arguments is a float, the output is a float.
Otherwise, the output is an integer.
The output of integer division is always an integer.
The operators are evaluated according to the order of operations:
- Multiplication, Divison, and Integer Divison, all have the highest precedence.
- Addition and subtraction have lower precedence.
- Operators with same precedence are evaluated from left to right
Demonstration: scripts/expr.mdl
-- snip --
# Demonstration of expression evaluation
# Order of operations is respected:
# (250 + 1.0 / 2) => 250.5, so image is vertically centered
# If order of operations WASN'T respected, the above would evaluate to 125.5
# so image wouldn't be vertically centered
move (0 + 250) (250 + 1 / 2) 0
sphere shiny_purple -100 150 0 80
sphere shiny_teal 100 150 0 80
-- snip --
- Add ability to reference variables in expressions
Instead of manually changing the start
and end
frames for the vary
command
when you change the number of frames, you can instead specify the arguments in
terms of the number of frames.
Demonstration: scripts/var.mdl
frames 50
basename simple_torus_var
push
move (XRES / 3) (YRES / 2) 0
scale 2 2 2 bigenator
rotate y 360 spinny
rotate z 360 spinny
torus 0 0 0 75 125
vary spinny 0 (FRAMES - 1) 0 1
vary bigenator 0 (FRAMES / 2 - 1) 0 1
vary bigenator (FRAMES / 2) (FRAMES - 1) 1 0
This isn't limited to the vary
command. For example, the teapot mesh file
is very very small, so it has to be scaled up. You can scale the teapot based
on the screen resolution.
Demonstration: scripts/teapot_colorful_moving_vars.mdl
# scale the X and Y axis by a ratio of the resolutions
# We don't have a Z resolution for the screen
# so I took the average of the X and Y scales
scale (XRES / 7.5) (YRES / 7.5) ((XRES / 7.5 + YRES / 7.5) / 2)
mesh :teapot.obj
If you're interested in trying out different resolutions, modify lines 16
and 17
of graphics/src/main.rs
let mut screen = ScreenBuilder::default();
// Default xres and yres is 500
screen.xres = 500;
screen.yres = 500;
// Example:
//screen.xres = 723;
//screen.yres = 501;