============================
HOOPS/OOC Technical Overview
============================
	  
Introduction
============

The HOOPS/OOC module is an out-of-core system that can render large amounts of data in the HOOPS graphical system. This system has been designed to handle point cloud datasets. Point cloud datasets are usually created by a 3D scanner which measures a large number of points on the surface of a target object, and then outputs a datafile that represents the visible surface of the object. As a result, a single point cloud file can contain millions to billions of points depending on the complexity of the model it represents.


The Architecture
================

HOOPS/OOC consist of two main parts: 1) preprocessing and 2) loading and rendering. In the preprocessing stage, the :doc:`HOOPS/OOC preprocessor </prog_guide/misc/ooc_preprocessor>` is used to load ASCII Point Cloud files point cloud files. The preprocessing mechanism performs analysis and sorts the data spatially. The result of the processing is a special purpose HSF file called an OOC file (<name>*.ooc*), which is an index file that contains a spatial description of the point cloud data in the form of a segment tree. It does not contain any actual data points. The point data itself is contained in node files (*.node*), located in a directory which has the same root name as the OOC file.

.. image:: images/OOCHLPreprocess.png

*A diagram of the preprocessing of point cloud data.*

Once the point cloud data has been streamlined into the HOOPS/OOC format, it can be loaded into HOOPS via the HOOPS/OOC Plug-in which is part the HIO Plug-in architecture under the :doc:`HOOPS/MVO </tech_overview/mvo_technical_overview>` module. The HOOPS/OOC HIO plug-in is used to read in a single OOC file, and then the HOOPS/3dGS database is populated with a scene graph that spatially describes the point cloud data. As areas of the model become visible on screen, HOOPS/3dGS makes requests to the HOOPS/OOC HIO plug-in for data in the part of the model. Note that the node data directory must reside in the same directory as the OOC file. HOOPS/3dGS and HOOPS/OOC work closely together to manage the amount of data loaded into memory so that performance and visual details are carefully balanced. 

.. image:: images/OOCHLLoad.png

*A diagram of the loading and rendering of processed point cloud data.*

For more information about the HOOPS/OOC module, please see the :doc:`OOC Programming Guide </prog_guide/misc/ooc_prog_guide>`.

