# SURFER core development

## project

## Status

## How to participate

Check out the jsurf repository on github and contact the author. Contributions in form of expert knowledge without actually working on the source code are welcome as well.

## Credits

- Programming

jsurf is the core of the SURFER program and many other projects for visualizing real algebraic surfaces. It is able to produce images of a single algebraic surface quite quickly and robust. This projects aims for extending the capabilities of jsurf towards rendering of multiple implicit surfaces with transparencies.

# Overview

The visualization algorithm of jsurf uses ray casting, i. e. it is based on the computation of the intersections of the surface and certain rays starting at the virtual eye point. The current implementation only allows to deal with a single surface to improve rendering speed. Also transparency is not possible since only the intersection closest to the viewer is determined.

# Tasks

In order to allow for multiple surfaces, the internals of the ray casting process have to be rewritten. In addition, the file format has to be extented, maybe redesigned from scratch since it is currently only a list of key-value pairs. Then, a parser has to be written for the new file format.

Achieving transparency without decreasing performance requires to review the existing algorithms for finding the real roots of univariate polynomials. A nice side project would be to implement root finding algorithms which are also robust for general (differentiable?) functions. This would provide the first step towards visualization of general implicit surfaces.

# Required skills

- Multiple surfaces, transparency: computer graphics, ray tracing, Java programming
- File Format: compiler/parser construction, Java programming
- Speed improvements: algebra, numerical analysis, algorithms and data structures, root finding of univariate polynomials
- General implicit surfaces: same as above but for methods are not restricted to polymomials