Hi, On Tuesday 01 Dec 2015 04:27:30 Tom Kulaga wrote: > Hi All, Qt3D Team, > > I've been tinkering with Qt3D recently for an electronics CAD project I'm > working on. > > I've got a few questions about as to approaches I could/should take to help > me make it work. > > A lot of the items I will be drawing will be "meta items" of sorts. They > will be moveable as one item, but contain different sub parts, on different > "layers". > > Taking a look at this image below taken from Altium: > https://i.ytimg.com/vi/pW_kpk5lQlM/maxresdefault.jpg > > You can see the different subparts to this particular component, The > different coloured circles, and the numbers. Would I have a different > Qt3DRender::QGeometryRenderer for each bit. Possibly sub-classing it, to > add in the "layer" information (where layer here basically means different > colour).
I would suggest using as few geometry renderer's as possible as these translate to draw calls under the hood. To this end I would take a look at the per vertex color material that allows you to associate a colour with each vertex. That way a single geometry renderer can be used to draw the different coloured sub objects you describe. > If I take this approach and each component say has about 5 or 6 > Qt3DRender::QGeometryRenderers associated with it, and I have about 30000 > of these guys. Will Qt3D handle that nicely? Not likely. This would translate into 30k draw calls per frame which is too much for OpenGL which prefers to have fewer draw calls (a few thousand per frame) but with larger sets of data to process. To bring this number down, the best way would be to use instancing. Take a look at http://code.qt.io/cgit/qt/qt3d.git/tree/examples/qt3d/instanced-arrays-qml to see one way of doing this with Qt3D. With instancing it is possible to draw many 10's of thousands of instances of a base object with each instance able to be customised in any way that you can parametrise in your shaders, typically things like position, scale, orientation, colour etc. > > Another question that I have is am I able to group these > Qt3DRender::QGeometryRenderer, so that when I draw my Item, all the > "layers" are drawn. Or would I have different The vertex data in one big > Qt3DRender::QGeometryRenderer with some primitive restarts and different > per-vertex colours? > > I also want to enable picking (which I've seen from the qt3d examples is > very easy and simple). If I enable an object picker onto these 300000 > Entities, will that cause any significant performance problems? (This will > definitely vary depending on machine, I guess im just asking conceptually > if its the right thing to do). The downside with instancing is that we do not yet support picking with instanced items out of the box. This is because you could be doing anything inside your shaders on a per instance basis. To make this work in the future in a general way we would need the user to specify some additional information about how the shaders transform each instance. Perhaps we can look into this for Qt 5.8 if there is interest. There may be a way to mix instancing with the builtin picking by using instanced rendering to draw the bulk of your objects, then falling back to regular entities for those items that need to be pickable. Or you could implement your own picking code to work with instancing in the short term given that you will know how you transform each instance. > > Any help would be appreciated. Hope this helps give you some ideas to investigate, Sean -- Dr Sean Harmer | [email protected] | Managing Director UK KDAB (UK) Ltd, a KDAB Group company Tel. +44 (0)1625 809908; Sweden (HQ) +46-563-540090 Mobile: +44 (0)7545 140604 KDAB - Qt Experts _______________________________________________ Interest mailing list [email protected] http://lists.qt-project.org/mailman/listinfo/interest
