如何在 Qt 中创建 3D 对象模型的 2D 切片?
Posted
技术标签:
【中文标题】如何在 Qt 中创建 3D 对象模型的 2D 切片?【英文标题】:How to create 2D slices of 3D object model in Qt? 【发布时间】:2017-10-06 19:20:11 【问题描述】:我目前正在我的 Qt 程序中渲染一个 3D 模型(Wavefront .obj 格式)。现在,我正在使用 QML 中的 Scene3D 渲染模型,并且可以让它显示在查看区域中。我想做的是让用户单击模型并生成切片的 2D 横截面,我想在不同的窗口上绘制它。我对 3D 渲染还很陌生,而且很多 Qt 文档的描述性都不是很强。我一直在阅读 Qt 文档、试验和在线搜索,但没有运气。如何在 Qt 3D 中创建 3D 对象模型的 2D 切片,最好是在 QML 中?我可以使用哪些 Qt 库或类来实现这一点?
【问题讨论】:
我认为 Qt 中没有任何功能 【参考方案1】:不幸的是,模型存储为一组表面这一事实使这变得困难。 QT 可能没有内置的方法。
例如,考虑一个由人脸组成的模型可能缺少一张人脸。现在怎么办?你能从不同的角度始终如一地在这个差距上进行插值吗?横截面可能不包含任何顶点这一事实怎么办?
但是,当然可以解决。首先,只是不允许未封闭的表面(带孔的网格)。其次,要找到横截面的顶点,请在模型中的每条边与您正在使用的平面之间进行交集,如果有交点,那里就有一个点。第三,要找到边,查看顶点列表,任何两个来自网格中同一多边形的边都应该通过横截面中的边连接。要找到边缘的方向,请将多边形的法线投影到您使用的平面上。对于填充,我真的不知道该怎么做。我想这就是你想要的。
【讨论】:
谢谢,我们能够弄清楚如何使用画布和您建议的算法来绘制它。一个问题,如果模型缺失的是脸或有洞,我们可以做些什么来尝试填补这个洞? 哇,你成功了吗?凉爽的!要关闭表面,也许您可以使用ear-clipping。虽然它可能不起作用。如果一个面在一个完美的网格中倒置,我不知道有什么办法可以解决它。以上是关于如何在 Qt 中创建 3D 对象模型的 2D 切片?的主要内容,如果未能解决你的问题,请参考以下文章