OpenGL Assignment

This project was created by Dan Lynch and Barry Martin.

Below is a list of some of the features of vim3d:

  • orthogonal snapping for drawing curves

  • undo/redo command history

  • insert commands and watch geometry recook

  • input and output

    • read & write scene files

    • read & write obj files

    • write out framebuffer to image file

      • can set up renders to generate animation sequences

  • computational geometry

    • sweep

    • hallway

    • revolve

    • extrude faces

    • extend lines

    • circle/ellipse faces

    • cubes

    • grid meshes

    • perlin noise

      • generating terrain

  • history

    • undo and redo commands

    • allows you to go back and insert a command

      • for example, you revolve, and wanted to do a bspline interpolate before

  • normals

    • computes normals

    • also smooth normals computations when vertices are shared

  • textures

    • custom commands for s and t values

    • procedural objects fully texture mapped

  • relative references

    • control attributes/parameters of one object based on another

    • allows switching between camera

    • look at objects

    • follow path objects

  • animations

    • channels

    • read music files to control objects

    • generate sinusoidal functions for animation

  • windows

    • splitting windows horizontally or vertically

  • geometry

    • diffuse

    • specular

    • ambient

    • emission

    • shininess

  • lights

    • spot

      • spot cutoff angle

      • direction

      • spot exponent

    • directional

    • point lights

    • linear, constant, quadratic attenuation

  • objects

    • object groups

    • object hierarchies

      • ability to write out a combined obj of nested objects

  • display lists

    • display lists are enabled by default, but can be toggled off

Here are a list of some of the keyboard commands (not vim3d commands) to toggle various features

a: toggle lights display
t: toggle textures
s: smooth shading
u: undo
v: redo
w: wireframe
o: orthogrid
2: top view
i: insert new curve
j: select previous object
l: select next object
n: display lights as geometry
p: points display
5: toggle display lists on/off
6: toggle terminal display on/off
9: capture current frame buffer to disk
8: toggle orthogonal snapping for drawing
0: toggle display mode

There are many commands, so only a few will be listed here. To enter command mode, type ':'

bezier <lod>
bezier2 <lod>
bspline <lod>
adding objects
add cam
add grid <divisionsX> <divisionsZ> <step> <dx> <dz>
add sphere
add channel
file some.obj
o cat.obj
This names a selected object:
name <somename>
Load a scene file (with these types of commands)
load <sceneName>
Load in a channel for animation
load channel <Channelfile>
Register an animation with an object and a channel
register <object> <param> <channel> [<freqScalar> <scalar> <offset><timeShift> <start> <end>]
Write out the selected geometry as an obj file
write some.obj
Sweep the the specified cross-section along the selected curve
sweep <crossSection> [<hallway>, <onpath>]
Create a relative reference, for example, control the color of an object based on another objects position.
reference <refObject> <refParam> <object> <param> [<freqScalar> <scalar><offset> <timeShift> <start> <end>]
Modify the polygons of an object, or texture coordinates
poly <centoid|zmin|zmax|...|texture> [<s> <t>]
Put an object along a path over time
path <target> <path> [<dx> <dy> <dz> <freqscalar> <timeShift> <start> <end>]
Modify the timeline
timeline <play|stop|set> [<arg>]
change the view to model or channel view
view <model|channel>
Split the screen vertically
Split the screen horizontally
Multiply texture coordinates
poly st <s> <t>
Generate texture coordinates
poly texture <s> <t>
Modify polygons based on their vertex positions
poly ymin
poly zmax
poly centroid
Compute normals or smooth normals(blending)
compute smooth
Group objects hierarchically
obj group <obj1> <obj2> ... <objn>
obj child <parentObj> <childObj>
Copy objects (to objects or just plain copy). The geo option will keep the geometry and its matrix referenced, otherwise only the polygons of the object will be referenced. If align is specified, the template object will be considered a curve and a coordinate frame will be built for each point copied and the objects will align themselves to the curve.
copy <object>
copy <object> <templatePoints> [<align> <geo>]
Write out a hierarchical group as a single obj
geo write <somelobj>