Skip to content


Switch branches/tags

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?

Latest commit


Git stats


Failed to load latest commit information.
Latest commit message
Commit time

WinOpto: a tool for learning elementary geometric optics

This program was developed for demonstrations of the laws of ray optics on the college physics lessons. The program allows you to create optical systems made of lenses, mirrors, and light sources, and observe the trajectories of light rays in those systems. At the time of development (2002) the program was the only one (at my knowledge) that allowed for observation of images of the objects in lenses and mirrors. The program was my graduation project at the Lyceum of Information Technologies 1533 (Лицей Информационных Технологий 1533).

You can download the program here

Here goes a super-compressed reference:

  • You can add optical tools (mirrors, lenses, shields, light sourses) by clicking on the corresponding toolbar buttons. When adding a object to the scene you will be presented with object properties dialog. All coordinates are based on the top-left corner of the screen.
  • The object properties dialog can be shown by double-clicking on the object on the screen or double-clicking on the object name in the object list modal window.
  • You can rotate mirrors, shields and light sources, and change the lenses’ focal length by clicking the object and dragging, while keeping Ctrl down.
  • You can resize mirrors, shields and lenses by clicking the object and dragging, while keeping Shift down.
  • You can move the objects by clicking and dragging.
  • You can delete an object by double-click while pressing Ctrl.
  • Light sources can be connected with segments. This enables you to demonstrate how complex images are transformed in mirrors and lenses; see the examples. To connect two light sources click the corresponding toolbar button and then click the two light sources on the scene to be selected as the endpoints of the segment.
  • You will only see the image of a light source in a lens/mirror only if this light source emits the light ray that falls on that lens/mirror. You will only see the image of a segment if both of its endpoints are visualized.
  • You can visualize the “ray propagation” of any given light source. To do it you will first need to choose “Select light source” from the Animation menu, then click on the desired light source on the scene. The animation start/stop/pause buttons will now be enabled on the toolbar.

The Samples folder contains the demonstration scenes (.osf extension). Files with .ocs extension are the color scheme files.

The src folder contains the program source code (tested to compile under Microsoft Visual C++ 2022 targeting win32 platform).



Software tool for learning elementary ray optics







No packages published