From: Thomas R. <th...@pa...> - 2005-10-13 01:36:42
|
Hello everybody, as I said, I would like to work more the "Extreme Programming" way, not in a "Waterfall" model, so I would like to start with some design work. We all know that what we want to do, can be done (look at Quicktime!) so the open question for the plugins are just implementation details. What I want to start with is a discussion of the basic object model. If this is clear, I would suggest we can start implementing a standalone viewer prototype (because it's much easier to debug) and implant this code into the different platform specific plugins. In my opinion, the rough class structure should look like this: * panorama abstract base class, platform independent These objects should hold all the image data and viewing parameters of one panoramic image (node) for example [min,max,default] X [pan,tilt,fov] HDR, Hotspots,... Subclasses: -- cubic 6 cubefaces like QTVR -- cylindrical One image in cylindrical projection -- equirectlinear One image in equirectlinear projection .... * controller Platform independent class to manage user interaction, like turn, tilt, ... goto next node,... contains [current] X [pan,tilt,fov] listens to browser events provide events * Render abstract baseclass. Platform dependent. Displays the image on the screen Subclasses: -- Legacy simple draw pixel method -- Direct2D draw pixel method for older Computers/to less VRAM -- DirectX Win32 -- OpenGLBase Win32, Linux, MacOS,.... -- OpenGLEx Use Hardware accelerated HDR display .... * loader abstract baseclass, platform independent Decodes input files to panorama objects Subclasses: -- Quicktime VR -- PTViewer -- SPi-V ..... All these classes are packed into a small platform dependent plugin/stand alone player, which handles the low level input/output and distributes it to the classes, and listens to events of the controller/render class. The code structure/sharing will be more complex, because some things can be shared for the platform (Win32: activeX/Netscape/Standalone, ...) and some things for the browser (netscape: Win32/MacOS/Linux,...) but for this I would need to know more about all this things. But I think these layers are very small, so we can start with some prototypes for each platform, and than look, whats simmilar/reuseable. What do you think about these ideas? MfG, Thomas. |