> On 9 Mar 2023, at 22:00, Sean Murphy via Interest <interest@qt-project.org> 
> wrote:
> 
> I'm trying out the Qt 3D classes for the first time and am in need of a 
> couple pointers.
> At a high level, I have the following:
> - 1 view, 1 scene, 1 camera, and 1 QOrbitCameraController
>  - in the scene, I create 7 entities, each a child of the root entity
>    - each of the entities contains a mesh that is sourced from a
>      corresponding .obj file
> 
> Then my main window contains 7 radio buttons to toggle which entity is 
> visible at any
> given time. The radio buttons are mutually exclusive, so the goal is that 
> only one entity
> is visible at any time. I'm having two main issues with the setup so far:
> 
> Issue 1: QEntity::setEnabled(false) doesn't seem to make the entity invisible
>  Each radio button is connected to a corresponding slot which just does the 
> following:
> 
>    void MainWindow::slotEntity1Toggled(bool checked)
>    {
>      qDebug() << __FUNCTION__ << checked;
>      Entity1 ->setEnabled(checked);
>    }
> 
>  When the button becomes enabled (checked == true) the entity does in fact 
> become
>  visible. But when the button is disabled (checked == false), the entity is 
> still
>  visible in the view. If at that point I resize the application (and 
> therefore the
>  view) then the old entity disappears. It appears I need the 3D version of a
>  repaint(), but so far I haven't found where that is (or even which class I 
> should be
>  looking at). I did try explicitly calling repaint() on the QWidget that 
> holds the
>  view, but that didn't force the 3D scene to re-render, so far I've only been 
> able
>  to get it to redraw by resizing the widget.
> 
>  From the qDebug() statement in there, I can see that this slot is getting 
> called
>  as expected. Every time it's called with "true" the entity changes from
>  invisible->visible without requiring any window resizing. But every time 
> this function
>  is called with "false", I have to resize the window to get the entity to 
> disappear
unless you have setup your scene to be refresh ondemand 
(QRenderSettings::renderPolicy
set to QRenderSettings::OnDemand), Qt3D should constantly re-render.

Please provide more details on how the view is setup.


> Issue 2: Is there any sort of "fit in view" functionality for 3D views?
> 
>  Since I'm only allowing the user to display one entity at a time, I'd like 
> to be
>  able to automatically set the camera settings to zoom as needed to fit the 
> entire
>  entity within the view, so the user doesn't have to manually zoom in/out as 
> they
>  switch between entities.
> 
>  I've used the 2D classes QGraphicsView & QGraphicsScene fairly extensively 
> and I'm
>  used to using QGraphicsView::fitInView(QGraphicsItem*) and have the 
> QGraphicsView set
>  the transform needed to fit that item within the view. I was hoping that Qt 
> 3D has
>  something similar, but so far I haven't stumbled across it. I don't know 
> enough about
>  the Qt 3D classes yet to know if there's some easy way to compute the 
> correct transform
>  required to set this up?
> 
>  The .obj files I'm playing around with have VASTLY different scale factors 
> so a
>  camera setting for one entity often doesn't work well for another.
There’s relevant methods on the QCamera class.



Mike


> Other pertinent information:
> - Using Qt 5.15.2, but could switch to Qt 6 if required.
> - I would prefer to stick with QWidget & C++, not QML
> - I'm extremely new to Qt 3D, OpenGL, etc. so go ahead and make the 
> assumption that
>   I know nothing about anything in that realm. It's an accurate assumption, 
> and I won't
>   be offended!
> 
> Thanks,
> Sean
> 
> 
> 
> 
> 
> 
> This e-mail, including any attached files, may contain confidential 
> information, privileged information and/or trade secrets for the sole use of 
> the intended recipient. Any review, use, distribution, or disclosure by 
> others is strictly prohibited. If you are not the intended recipient (or 
> authorized to receive information for the intended recipient), please contact 
> the sender by reply e-mail and delete all copies of this message.
> _______________________________________________
> Interest mailing list
> Interest@qt-project.org
> https://lists.qt-project.org/listinfo/interest

—
Mike Krus | mike.k...@kdab.com | Senior Software Engineer & Teamlead
KDAB (UK) Ltd., a KDAB Group company
Tel: UK Office +44 1625 809908   Mobile +44 7833 491941
KDAB - The Qt Experts, C++, OpenGL Experts

_______________________________________________
Interest mailing list
Interest@qt-project.org
https://lists.qt-project.org/listinfo/interest

Reply via email to