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