1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362
|
This document tentatively describes a plan for how the Coin
development could proceed.
*** IMPORTANT NOTE: THIS DOCUMENT HAS NOT BEEN UPDATED FOR A LONG,
LONG TIME -- MANY ITEMS HAVE BEEN COMPLETED, SOME HAVE BEEN
OBSOLETED. IF YOU HAVE PARTICULAR QUESTIONS OR WISHES, PLEASE GET IN
TOUCH AT <mailto:coin-support@sim.no>. ***
Changelog:
19991031 mortene Created.
19991130 mortene A few minor changes (clarifications and
additions).
19991221 mortene Added time estimates.
==========================================================================
Revision: $Id$
==========================================================================
MILESTONE 1
===========
Goal: Make Coin a fully usable retained mode rendering library for
development of 3D applications on UNIX systems, Microsoft Windows and
BeOS. The library will provide the application programmer with a
documented API with functionality for scene graph rendering,
interaction with the 3D shapes in the scenes, and full import and
export capabilities of Inventor models.
State of library when milestone is met:
* an SoQt interface library against Troll Tech's Qt[1] fully
implemented according to the functionality provided by the Open
Inventor SoXt API, with the possible exception of missing support
for the more esoteric input devices (spaceball), and complex
rendering modes (overlay planes, stereo mode).
(Using the Qt library will be the only option when doing UNIX/X11
and MS Windows development with Coin on milestone 1.)
[Estimate for remaining work: ~ 1.5 man-months.]
* an SoBe interface library against the BeOS[2] GUI fully implemented
according to the functionality provided by the Open Inventor SoXt
API, with the possible exception of missing support for the more
esoteric input devices (spaceball), and complex rendering modes
(overlay planes, stereo mode).
[Estimate for remaining work: ~ 1.5 man-months.]
* import code should load all Open Inventor scene graph files, in the
open ASCII format aswell as the proprietary binary format.
This might not include the functionality needed to read iv-format
files with user extensions in the form of new, non-standard nodes,
nodekits, fields etc. This will then be done at a later milestone.
[Estimate for remaining work: < 1 man-week.]
* all basic geometry and utility classes implemented: SbBox*, SbColor,
SbCylinder, SbDict, SbLine, SbMatrix, SbName and SbString, SbPlane,
SbRotation, SbSphere, SbTime, SbVec*, SbViewVolume,
SbViewportRegion, SbXfBox3f, the most common list classes.
[Estimate for remaining work: < 1 man-week.]
* complete implementations of these action classes:
- the actions for rendering functionality:
SoGetBoundingBoxAction, SoBoxHighlightRenderAction,
SoGLRenderAction, SoLineHighlightRenderAction.
- actions for event handling, including interaction through
"picking": SoHandleEventAction, SoPickAction,
SoRayPickAction.
- scene graph export: SoWriteAction. The code belonging to
this action can export Open Inventor scene graphs in ASCII
or binary format.
- actions for miscellaneous scene graph operations:
SoCallbackAction, SoGetMatrixAction, SoSearchAction,
SoGetPrimitiveCountAction.
[Done.]
* complete support for image textures on all 3D objects which are
supposed to support them.
[Almost done.]
* all engine classes fully implemented according to what Open Inventor
provides.
[Estimate for remaining work: ~ 1 man-month.]
* all error classes fully implemented according to what Open Inventor
provides.
[Done.]
* all event classes fully implemented according to what Open Inventor
provides.
[Almost done.]
* all field classes fully implemented according to what SGI Open
Inventor[3] 2.1 provides.
[Estimate for remaining work: ~ 2 man-weeks.]
* all dragger classes fully implemented according to what Open
Inventor provides.
[Almost done.]
* all manipulator classes fully implemented according to what Open
Inventor provides.
[Almost done.]
* all nodekit classes fully implemented according to what Open
Inventor provides.
[Almost done.]
* all projector classes fully implemented according to what Open
Inventor provides.
[Almost done.]
* all sensor classes fully implemented according to what Open Inventor
provides.
[Almost done.]
* node classes implemented according to what SGI Open Inventor 2.1
provides, with these exceptions and/or limitations:
- nodes used for rendering various types of 3D text will
support a limited set of import routines for font data (or
maybe just a single static "inlined" font), as well as a
limited set of rendering capabilities.
- SoColorIndex node not supported.
- nodes used for rendering nurbs curves and nurbs surfaces
will only provide the rendering functionality which is
possible to accomplish with the nurb support in the GLU
OpenGL companion library.
- 2D bitmapped fonts will only be supported through native
import routines on the system.
- no network support for URLs in SoWWWAnchor and SoWWWInline.
[Estimate for remaining work: ~ 1 man-month.]
* bundles, caches, details and elements will be implemented as they
are needed, we will not be concerned about full Open Inventor
API-compatibility for these classes for milestone 1.
* no support for rendering in OpenGL colorindex mode.
* all API elements will be documented, albeit some of the
documentation will probably be a little on the sparse side.
* a few simple example programs will accompany the library.
* platform availability:
- fully supported: Linux, MSWindows (both with Troll Tech's
Qt), BeOS (native API)
- additional: most UNIX platforms (with Troll Tech's Qt)
MILESTONE 2
===========
Goal: Implement enough of the functionality missing from Coin to have
it replace QvLib as the fundamental import/export/rendering library
for Rational Reducer[4]. In addition, we add the ability to read data
from any URLs, local files aswell as over the network. In summary,
we'll have the necessary functionality at this milestone for a VRML
viewer with all the basic features, only lacking some minor
non-critical compatibility points with the ISO VRML 97 standard.
Additional features we need to supplant the functionality from
milestone 1:
* VRML 1 support in the form of VRML 1 node classes. These would
likely be more-or-less duplicates of the standard Open Inventor
nodes.
[Estimate for remaining work: ~ 1 man-month.]
* VRML 2 / ISO VRML 97 support. This includes import, export and
rendering. Support for playing sound and movies, and for parsing
embedded script languages will be postponed.
[Estimate for remaining work: ~ 2 man-months.]
* port our VRMLView framework into the GUI interface libraries to make
an SoQtSIMViewer/SoBeSIMViewer.
[Estimate for remaining work: ~ 1 man-month.]
* network library for loading URLs in all common protocols (HTTP, FTP,
etc).
[Estimate for remaining work: ~ 1 man-month.]
* add progress callbacks for operations which potentially can take a
long time to execute (import, export, others?).
[Estimate for remaining work: ~ 2 man-weeks.]
MILESTONE 3
===========
Goal: Make the Coin API be fully compatible with the SGI Open Inventor
2.1 API. Make all Open Inventor functionality available, provide
"shortcut" implementations on some of the most advanced features which
will be postponed until milestone 4. All existing applications written
for SGI Open Inventor 2.1 should be easily portable to Coin with no or
minimum effort at this stage.
Additional development necessary versus milestone 2:
* implementation of the SoXt library. This library provides an
interface between Coin and the X11 windowing system found on UNIX
computers, and is the GUI interface library originally shipped with
Open Inventor.
[Estimate for remaining work: ~ 1.5 man-months.]
* implementation of the SoWin library. This library provides an
interface between Coin and the Win32 API and the Microsoft
Foundation Classes (MFC) found on MS Windows platforms.
[Estimate for remaining work: ~ 1.5 man-months.]
* proper 2D and 3D font support. Load truetype fonts aswell as bitmap
fonts.
[Estimate for remaining work: ~ 1 man-month +.]
* 100% completed NURBS support.
[Estimate for remaining work: ~ 1 man-month.]
* implement support for automatic dynamic loading of user-extension
nodes, nodekits, etc (through dlopen() on UNIX systems and
LoadLibrary() on MSWin).
[Estimate for remaining work: ~ 1 man-week.]
* make sure the APIs for bundles, caches and element classes cover the
API calls offered by SGI Open Inventor 2.1 so even advanced
applications can be ported to Coin with ease.
[Estimate for remaining work: ~ 2 man-weeks.]
* support overlay planes in the GUI interface libraries which can
support them without doing terrible hacks.
[Estimate for remaining work: ~ 2 man-weeks.]
* support stereo mode viewing.
[Estimate for remaining work: ~ 2 man-weeks.]
* implement the tools shipped with Open Inventor: ivcat, ivinfo,
ivnorm, ivfix, ivview, ivAddVP, ivperf.
[Estimate for remaining work: ~ 2 man-weeks.]
* add example programs to show off most of the available features in
the library.
[Estimate for remaining work: ~ 1 man-month.]
* improve the documentation so it properly covers the functionality of
all components in the Coin library in a satisfactory manner.
[Estimate for remaining work: ~ 1 man-month.]
MILESTONE 4
===========
Goal: Make Coin library 100% compatible with the latest version of the
Open Inventor library from TGS[5], including _all_ functionality. Tune
the performance of Coin to be at least on par with the latest Open
Inventor.
Additional development since milestone 3:
* VRML 1 upgraders for automatic conversion VRML1->VRML2 upon file
import.
* Inventor-to-VRML conversion actions SoToVRML2Action and
SoToVRMLAction.
* support for collision detection, as offered by the latest TGS Open
Inventor.
* Large Model Viewing:
- action classes: SoGlobalSimplifyAction, SoReorganizeAction,
SoShapeSimplifyAction and SoSimplifyAction, along with
simplifiers SoSimplifier and SoDecimator.
- SoLevelOfSimplification node.
- SoRenderList and SoOctTreeOrdering for faster rendering.
* update the documentation to cover these new features.
MILESTONE 5
===========
Goal: Complete support for the ISO VRML 97 standard.
Development:
* implement support for sound according to the ISO VRML 97
specification.
* implement import for common movie formats (especially the one(s?)
mentioned in the standard) and otherwise integrate movieplaying into
the library where necessary.
* add support for embedded script language(s).
MILESTONES 6-
=============
Goal: Improve Coin even further beyond what is provided by Open
Inventor. We've got a bucket full of ideas here.
==============================================================================
REFERENCES:
===========
[1] <URL:http://www.troll.no/products/qt.html>
[2] <URL:http://www.be.com>
[3] <URL:http://www.sgi.com/Technology/Inventor/>
[4] <URL:http://www.sim.no/reducer_frontpage.html>
[5] <URL:http://www.tgs.com/Products/openinv-index.html>
|