ReFresco 06: 3d support in the scene graph ========================================== (Note the "scene graph" in the title. Here we are _not_ talking about providing GL to clients; certainly we want a way to say "here, have a chunk of screen to blast accelerated 3d at", but this is a separate problem. The topic of this ReFresco is how to handle 3d GUI widgetry that wants to use the Fresco scene graph model.) First, let's take as a point of departure that since computer monitors are 2d, and all useful existing GUIs are 2d, we want to support 2d as the basic thing. I'm not saying that we don't want to support 3d, but creating a real 3d GUI is an entire research project; it shouldn't be our first priority. That said, we could still do what we've done to day: make the entire system "sorta-3d", i.e. all vectors have 3 coordinates, etc. I'd argue against this approach. 2d-with-layering and 3d-with-occlusion have thoroughly different semantics; it confuses things to have all these vectors with 0 z-component, which is in fact ignored by the layout stuff, and it doesn't actually make sense to mix them up with solid objects anyway. What makes much more sense, and has a clean semantics, is to have both 3d subgraphs and 2d subgraphs. A 3d subgraph can be the child of a "pane" 2d graphic, and a 2d subgraph can be the texture of a 3d graphic. In this scheme, you know when you have 2d semantics, you know when you have 3d semantics, and you have clear places to describe how they interact. This approach also clearly breaks down the problem into pieces; it's possible to get 2d working without dealing with 3d at all, for instance -- this is useful for getting things working quickly, and also in the long run for things like embedded implementations that would like to eschew 3d altogether. (I suppose I should mention somewhere that this is exactly the approach taken by Microsoft's Avalon, though the idea came up in our discussions years before they ever published anything...)