STATUS:
======

Minor TODO's are documented in the code. Grep for 'TODO'



Parser:
======

Complete except:

- file.C: relative URL handling needs to be checked with RURL specs.

Would be nice:

- parsing the same included worlds over and over again can be avoided
	by introducing a world::instantiate() method.

- EXTERNPROTO's and all nodes that refer to external files: start fetching
	files in background as soon as URL is read.

- extensions: (first check vrml3 draft specs): not really new features,
  but rather aids for making it more easy to edit VRML models manually:
  . INCLUDE "url"
  . PARM [simple type] name expression
  . appearance in Grouping nodes (default appearance of all children)


Scene Graph:
===========

Complete except:

- rather little attention has yet been spent to destructors.

Would be nice:

- dynamically loading of new node, importer and exporter classes,
so the library does not need to be recompiled in order to add new
nodes or new filters.


NODEGEN:
=======

Complete.

Would be nice:

- value range checking for non-SFNode|MFNode values, based on ranges
  specified with field values in the input description of a node.


world class and its helpers:
===========================

Complete.

Would be nice:

- hide StackManager by introducing selectors for current Viewpoint, and
  the other bindables


renderer class:
==============

- default geometry rendering callback needs checking
  (normals sometimes look incorrect), or even better: a complete
  rewrite.


standard nodes:
==============

(Non-browser specific stuff: browsers have to implement additional functionality
 for some nodes, e.g. geometry, material, lights, textures, ...)

- Geometry:
  . done: Box, Cone, Cylinder, ElevationGrid, Extrusion, IndexedFaceSet, Sphere, PointSet
  . to do: IndexedLineSet
  . to do: Text nodes: freetype library -> www.freetype.org

- Geometry Property nodes:
  . done: Coordinate, Color, Normal, TextureCoordinate

- Shape and Appearance: 
  . done: Shape, Appearance, Material, TextureTransform
  . to do: ImageTexture, PixelTexture, MovieTexture
    -> image representation and input library

- Grouping nodes:
  . done: Group, Transform, Inline
  . to do: Anchor, Billboard, Collision, LOD, Switch

- Light Sources:
  . done: DirectionalLight, PointLight, SpotLight

- Sensors:
  . done: TimeSensor
  . to do: Anchor, Collision, CylinderSensor, PlaneSensor, ProximitySensor,
    SphereSensor, TouchSensor, VisibilitySensor
 
- Interpolators: 
  . done: ColorInterpolator, CoordinateInterpolator, NormalInterpolator,
    OrientationInterpolator, PositionInterpolator, ScalarInterpolator
  . to do: ColorInterpolator should interpolate in HSV space rather than RGB
  . to do: NormalInterpolator should interpolate along an arc instead of along
    a line
  . to do: OrientationInterpolator should interpolate along an arc as well

- Sound sources:
  . to do: AudioClip, Sound

- Bindable nodes:
  . done: Background, Fog, NavigationInfo, Viewpoint

- Script node: to do
  . scripting language interfaces -> www.mozilla.org or KDE js library!

- to do: more testing!!!

Would be nice:

- Geometry:
  . octrees for efficient OpenGL rendering
  . ray-geometry intersection


phbrml nodes:
============

- PhBAppearance:
  . to do: uses separate 2D and 3D texture coordinates. Not very elegant.
  . to do: media, texture averaging, sub-surface scattering, polarisation interface

- Surface emission and scattering:
  . done: PhBHomogeneousSurface, PhBHeterogeneousSurface (needs more testing though),
    PhBTexturedSurface, PhB3DTexturedSurface
  . done: PhBHomogeneosSurface and PhBHeterogeneousSurface could share code, so do
	PhBTexturedSurface and PhB3DTexturedSurface
  . to do: texture averaging needs to be implemented
  . to do: EDF point + direction sampling needed (matters for textured emitters)
  . to do: InterpolatedSurface, LayeredSurface (sub-surface scattering)

- Surface emission models:
  . done: PhBEDF
  . done: PhBDiffuseEmitter
  . done: PhBPhongEmitter (needs more testing)
  . to do: SampledIsotropic, Textured, Procedural, light source description file
    formats used in industry

- Surface scattering models:
  . done: PhBSDF -> PhBSimpleBSDF and PhBFresnelBSDF
  . done: PhBDiffuseReflector & Refractor
  . done: PhBPerfectSpecularReflector & Refractor: refractor not reciprocal!
  . done: PhBPhongReflector & Refractor: refractor not reciprocal
  . done: PhBSchlickReflector, PhBWardReflector, PhBLafortuneReflector  (need more testing, e.g. albedoes)
  . to do: Sampled (what formats are there available??), Procedural

- Media:
  . done: PhBHomogeneousMedium with just a scalar index of refraction
  . to do: dispersion, absorption, scattering (phase functions), emission
  . to do: Textured, Interpolated

- Spectra:
  . done: Lxy, XYZ, Mixed, RGB
  . done: PhBMonitorCalibration: bindable node indicatinng how to
    convert RGB colors to spectra
  . to do: Monochromatic, BlackBody, Sampled, Tabulated, Interpolated, Procedural

- Textures:
  . done: PhB3DTextureTransform (2D uses standard TextureTransform)
  . PhBTextureProjection:
    done: Sphere, Cone, Cylinder, Box
    to do: Procedural
  . done: PhBToggleTexture, Noise, 3DSpiral, 3DChecker, 3DNoise
  . done: PhBPixelTexture: nr of channels can be anything, pixels are
    given as floating point numbers (not necessary in the range 
    [0,1]).
  . PhBImageTexture:
    to do: other image file formats except 24-bit PPM (cfr standard ImageTexture node)
  . to do: Procedural3D, Procedural (2D)

- Bump mapping:
  . work in progress: PhBBumpMap, NormalMap, BrushMap, ShadingFrameDistortion

- Displacement mapping: to do

- Background:
  . work in progress: SpherePhotoBackground (special TexturedBackground)
  . to do: Textured (environment maps!), Procedural, sky illumination models

- Atmosphere: to do

Would be nice:

- dispersion, polarisation
- more image based stuff


Filters (importers and exporters):
=================================

- vrml2_utf8 input/output filter are part of the core 
  library and should be complete.

- nff exporter: should be pretty complete

- mgf exporter: should be pretty complete, except
  . should also save PhBRML materials

- ply input filter (Ingo Wald)

- C++ export/shared object import filter: finished, except
  . to do: sould save version information, save strings in
  string pool and also export [S|M]FImage values
  . to do: more testing, akward crashes on Linux sometimes.

- rayshade importer: is work in progress (Ph.B.)


Programs ("browsers"):
=====================

- vrmlview:
  . awfully quick and dirty - clean it up.
  . implement textures & sensor node support
  . viewpoint nodes need to be transformed with current transform
  . Materials don't always come out as they should (conformance tests!!)

- vrmlconv: converts from any importer to any exporter
  supported in the library.

Ideas for new programs:

- vrmlfilt: to convert VRML file using extensions of this library to
	standard vrml'97


Documentation:
=============

to do:

- renderer class + rendering scene traversal details

- filter documentation


VRML'97 Conformance Testing:
===========================

- http://xsun.sdct.itl.nist.gov/~mkass/vts/html/



Philippe Bekaert
Max-Planck Insitut fuer Informatik, Saarbruecken, Germany
Philippe.Bekaert@mpi-sb.mpg.de


March 1, 2001