Geometry Processing, Spring 2026

Michael Kazhdan


Assignment 1: One-Ring Smoothing

Due on February 7 (Saturday) at 11:59 PM


Overview

In this assignment you will implement a simple smoothing algorithm in which, at each time-step, a vertex's position is replaced by the average positions of the vertices in its one-ring neighborhood.

Getting Started

You should use the code (GeometryProcessing.zip) as a starting point for your assignment. We provide you with numerous files, but you should only have to change OneRingSmoothing/OneRingSmoothing.cpp.

After you download the files, the first thing to do is compile the OneRingSmoothing executable.


How to Invoke the Executable

The executable runs on the command line. It takes a geometry file as input, either in ply or in obj file format (determined by the file extension) and opens up an OpenGL-based viewer visualizing progressive smoothing of either a signal defined at the vertices or the geometry itself.
To see the supported command line arguments, run the executable without an argyments:
% OneRingSmoothing
To smooth the geometry itself, invoke the executable as:
% OneRingSmoothing --in <input geometry> --geometry
To smooth a signal defined over the geometry, invoke the executable as:
% OneRingSmoothing --in <input geometry>
In the latter case, one of two things will happen:
  1. If the geometry containts a per-vertex signal, the visualization will smooth that signal.
  2. If the geometry does not contain a per-vertex signal, the visualization will smooth a manually prescribed signal, defined by having the user place down positive sources and negative sinks at different vertices.

How to Interact with the Executable

Upon invocation, the executable will open an OpenGL window where the smoothing will be animated.
The basic supported interfaces are: In addition, when smoothing a manually prescribed signal, the following interfaces are supported:

What You Have to Do

You will need to mofiy the OneRingSmoothing/OneRingSmoothing.cpp file to support both signal and position smoothing.
Stubs for both can be found in the OneRingSmoothingViewer::animate member function.
Please see the assignment description for additional details.

Question


What to Submit

Please submit your implementation on canvas.
For this assignment, you should submit: