Nothing still on this? Anyone? And before this gets assigned to a similar issue, like (https://github.com/mrdoob/three.js/pull/14526) please note the use case here is the type of view it is being used on. Its different.
The use-case for 14526 is that its taking into account multiple objects, omitting the direction of the object face being clicked on, and then increasing the field of view to keep all selected objects in the view. That is a use case. Used for perhaps selecting 3D objects in world space for a multi-select. Hugely useful for the 3D industrial industry, modeling, CAD style use cases, I’m sure, but most of us now make UI for the corporate world. The corporate world still uses grids and reads off of 2D surfaces. So lets remove the idea of the frustum needing to be at a different orientation than the object being zoomed to. Let’s, in fact, assume the frustum needs to in exactly the same orientation as the object-face being clicked on because it is always going to be a flat box of content that needs to be in full view, whatever size “IT” (as in just one) is. The user will be navigating a flat plane of boxes. Those boxes may be seamless, or have buttons or text in them, but they always need to be in view. If a box is then zoomed into view, and the next box needs to be in view, the user should be able to navigate, at the current zoom, to the next box (pan). Again, camera angle does not change and zoom only changes to fit the object. This is a mode for traversing objects nested in a flat plane. Its called “tabbing” in the 2D interface world.
3D is useful in charts. Its useful in large data and informational analytics but if its going to be useful in Materials and libs like Angular, Kendo, JQuery or plain vanilla JS, then its got to model the current UI concepts of the day and then expand on the abilities of 3D. Some of us are trying to do just that.
A grid in 3D has the ability to hold a lot more data and transform that data in ways that just arent possible in 2D. But being able to traverse data in a 3D grid, as a 2D flat surface, is a huge mindf**k (mindfork) for most corporate devs. The steam blows right out their ears and the lights shut off. We need WebGL and libs like Three in the corporate world now. Big data and expanding global markets is not making it easy for 2D UI nowadays. Solutions for everything from hierarchical org charts and forecasting grids to global data point representations and regional charts are requiring some expensive custom solutions. We need Three to recreate controls we have now.
Using Three to create a globe of the earth, with zooming, and with select-able countries, was easy. Even adding libraries to map the lat and long of the countries was easy. But using the camera, and controls, to zoom to a flat surface and pan across its clickable objects, is not only difficult, but the community isnt even considering the use-case of objects being in a flat grid structure. This would be used for tabbing to the next form object, or the next box, circle, navigation-item, in the group, or parent. We need to have a common navigation of readable items.
Being able to render a layout grid would be huge. Copying parts of material lib controls would be huge and should be a project of Three JS right now. Now that ES6 versions of the Three modules exists… let’s give the corporate community some much needed attention here. WebGL is far superior to single threaded browsers and from hierarchical organization charts, to global mapping, to large data point visualizations, hands down, Three is the best candidate for the job.
Just think about it for a second…
Three Material for Scaleable Web Applications
Three Cubic Grid (Each column can represent 6 sides of data, features compound sorting, compound filtering, linear table cell-data transforms, multi-column-multi-face-filtering, data modeling)
Three Material Layout Grid (100+ columns, auto zooming, responsive to screen size and smart-child-scaling)
Three Material Form (input, dropdown, search box, multi-select-list, dragdrop-list, text-box, radio-buttons, check-box, password)
Three Material SVG Buttons and Icons…
I digress now but the case is the objects that are being viewed. Are they embedded in a flat 2D surface, like readable object (textNodes, navigation blocks, buttons, etc.) or are they standalone 3D objects that are being observed with trackball control style navigation? If ‘observational’ then Observation Modes are x,y,z ,custom). If ‘readable’ then Readable Modes are x,y,z,custom)
Could ones scene have a case where it needs trackball style observational control AND readable controls? Yes. Assume a scene with a clickable 3D globe and grids of data that are layered on top of the 3D globe. This is a common set of use cases in the industry and transitioning between the navigation modes should be of great importance.