Mapping interactive 2D UI onto 3D in WPF
There’s been a super exciting update in WPF’s 3D arena that’s been recently announced that I want to talk about here, but before I get to it, some background to set the stage.
I was heavily involved in the initial definition and design of the 3D aspects of WPF, and our overriding goal was to provide a continuity of programming model from 2D into 3D, both in the “media” aspects of it (having media, imaging, 2D graphics and 3D graphics types behave in a compatible, naturally interoperable and composable manner), and in the UI aspects of it, so that 3D would fit nicely into the overall WPF UI paradigm.
Overall what we produced in WPF v1 is, I believe, unique in the industry with respect to its integration as described above. For instance, it’s straightforward to construct a full 2D interface in WPF, and then readily have it used as the material for a 3D object, including any live animations and video that the 2D UI might have. This is a uniquely powerful and enabling concept and capability that WPF provides.
However, given people and time constraints in the development of WPF, we weren’t able to do all we had wanted to on some of the UI aspects of integration. In particular, in the first version of WPF, we don't provide out-of-the-box support to interact with 2D UI that’s mapped onto 3D objects. Thus, I couldn’t press a button that’s part of a 2D UI mapped onto a 3D object, and have the app automatically recognize the button as pressed (at least not without an awful lot of app-specific work).
Not surprisingly, since 2D and 3D integration is really encouraged by WPF, this missing piece has become one of the most desired features for the 3D feature set. And thanks to the hard (and very clever) work of Kurt Berglund and others on the WPF 3D team, we now have an add-on that you can download and use in your apps to provide interactive 2D on 3D in a very nice way.
So, without further ado, go read about Interacting with 2D on 3D in WPF. And watch the accompanying Channel 9 video, download it, grok it, use it in your apps, etc.
I’ll resist the temptation to add some XAML here to show just how powerful and straightforward it is, since there’s a great sample and explanation already available at the link above.