OVITO manages multiple viewports, which show the three-dimensional scene from different directions.
There is always one selected viewport, called the active viewport. It can be accessed from
a script through the activeViewport
variable, which holds a reference to a Viewport
object.
A Viewport
object provides various properties and functions that allow to set the position, orientation,
and projection parameters of the virtual camera. For instance, to set up a camera with perspective projection,
positioned at the xyz coordinates (100, 85, 50), and looking toward the origin, you would call the Viewport.perspective()
function:
activeViewport.perspective( Point(100, 85, 50), // The camera's position Vector(-100, -85, -50), // The viewing direction 70.0 * Math.PI/180.0) // The field of view angle
The third parameter specifies the vertical field of view (FOV) of the camera. We have set it to a 70 degree angle, which needs to be converted to radians first.
Alternatively, we can set up a camera with parallel projection as follows:
activeViewport.ortho(Point(0,0,0), Vector(0,-1,0), 30.0))
Here we made the camera look along the negative Y-axis. Note that, for parallel cameras, the FOV parameter determines the size of the visible region (in this case 30.0 length units in the vertical direction).
To let OVITO render a picture of the current viewport, use the Viewport.render()
function:
activeViewport.render()
This will start the rendering process using the current render settings such as image size, output filename, background color etc.
Note that if you started OVITO with the --nogui command line switch to disable the graphical user interface of the program, OpenGL rendering is not possible. This is because the program runs in a headless mode, which doesn't require a graphics terminal and allows to execute scripts on remote machines. Unfortunately, this restriction also means you cannot use the normal OpenGL-based renderer anymore to create output images. The software-based Tachyon renderer therefore becomes the default when using the --nogui switch.
You can modify the current render settings before calling render()
by changing the corresponding properties of the renderSettings
object, which is part of the global ovito
object:
rs = ovito.renderSettings rs.imageWidth = 320 // Sets the width in pixels of the output image rs.imageHeight = 240 // Sets the height in pixels of the output image rs.filename = "frame.png" // Sets the output filename rs.saveToFile = true // Set this flag, otherwise the generated image will not be saved to disk. // Control which frames should be rendered: rs.renderingRangeType = RenderSettings.CURRENT_FRAME // Render only the current animation frame (default) rs.renderingRangeType = RenderSettings.ANIMATION_INTERVAL // Render all frames of the animation interval rs.renderingRangeType = RenderSettings.CUSTOM_INTERVAL // Render a custom interval of frames
As a shortcut, you can directly pass the parameters to the render()
function as an object literal. For example:
activeViewport.render({ filename : "output_image.png", imageWidth : 320, imageHeight : 240 })