Qt World Summit: Submit your Presentation

Increase draw distance quality of Q3DSurface?

  • Hi,

    I am incredibly new to rendering in 3D period. I just "finished" writing an app that parses data from a USGS DEM file (an old 1992 digital elevation model format) and it works totally fine. I used the new to 5.7 "datavisualization" kit along with surface graph to accomplish this.

    However, the regions that will be rendered with this tool tend to be quite large. For example, the test file that I am using is 1201 x 1201 = 1,442,401 points (quite a lot lol), and this seems to have created an issue with the actual rendering of this information. When the camera is at its default zoom the entire model blurs into a grey blob no matter what I have the actual color set to. The lack of color is not really a big deal but its the fact that no edges can be discerned either that is annoying. I totally get that this is due to the incredibly high amount of points, but want to see if I can improve the look of it at a distance.

    As far as I can tell the only thing that affects the rendering itself is Q3DSurface, so the instance of Q3DSurface I have is the only place I could look to make these changes. I tried looking through the documentation of the Q3DSurface class but it doesn't list any members that seem to have anything to do with changing render modes/options, camera settings, etc, because it inherits so much from other classes. So then I tried browsing the members within creator by using the autocomplete functionality when you start typing the name of the instance and then " . ", but there are so many of them I am a bit lost and have no clue which might help me out. Normally I'd look through them with trial and error but the problem is that this is for a professor and is due later tomorrow. I've already done more than expected and have no problem submitting it as is, I was just hopping to have it so he could make out the details of the surface as a whole without having to zoom into certain parts.

    So basically, is there anything I can change camera, render mode, etc. wise about the 3D surface to improve detail at a distance? I understand that this may have serious performance impact implications but I'll deal with that when it comes to it.

    I know that one way would be to basically average certain sets of points together to essentially create a lower resolution version of the map that doesn't alias too much, (not sure the name but I know this is a technique used to have item detail fade at distances to save on resources), but unfortunately like I said I don't have time to implement something that complicated. It doesn't have to be perfect, just anything better than this:


    I can provide code if needed, but I actually don't think it is in this case. I'm pretty sure the only way I can change things is by calling members of the Q3DSurface I'm using which is the same no matter what my code is.

    Oh and also I'd appreciate it if anyone knew the way (if there is one) to turn the grid off if desired as that would improve the look of the map at very close distances.

    Thanks for any pointers!

  • Hi,
    disabling the grid: activeTheme()->setGridEnabled(false);
    disabling the titles: axisX()->setTitleVisible(false); axisY()->, axisZ()->
    disabling the labels: I could not find a switch so far. A workaround is to register a QValue3DAxisFormatter for all axis and override their recalculate methods like this: labelStrings().clear(); labelPositions().resize(0);

    In the app that parses the DEM file you can maybe just take every 10th (5th, whatever looks fine) point without averaging it. That's fast to implement I would think.

  • @m.sue

    Great find for the properties, and if I cannot find a way to tweak the rendering settings for draw distance then I guess that would be my best way to do it.