The basis model required for your augmented reality system seems to be an event based architecture:
- Different applications react on events or trigger themselves events. For example by providing video frames, calculating the position and movements based on accelerometers, provide/update objects to render.
- Your GUI application integrates all the events relevant for the display, and send events to translate user commands for the back-ebnd application
This article explain the basic principles of such an architecture, and identifies event processing style:
- In your case I suspect that you can forget simple event processing,
- Go directly to stream event processing because you'll merge the video stream and the 3D rendering streams
- You might perhaps even need complex event processing (CEP) to coordinate different streams, and correlate them (i.e. correlate the video with the movement captors to influence the position of the 3D objects to be rendered.
The practical techniques to implement such event based architecture all involve some kind of IPC mechanisms, such as message based systems, shared memory, socket based (be it ad-hoc protocol or standardized webservice protocols). The choice will depend on OS and performance constraints.
But one question remains: do you really need different applications ? If not, you should really consider a multithreaded applications, which will faciliatet sharing of data with very low latency and maximized use of CPU. For a computing intensive augmented reality model, this could really be an interesting alternative. An of course, this approach is compatible with the plugin approach mentionned by Rafi.