小编Con*_*der的帖子

检测并删除网格的隐藏曲面

在过去的几周里,我一直致力于一种算法,该算法可以找到复杂网格的隐藏曲面并将其移除.这些隐藏的表面完全被遮挡,永远不会被看到.由于我正在使用的网格的性质,有大量这些隐藏的三角形.在某些情况下,隐藏表面比可见表面更多.由于手动删除它们对于较大的网格来说是禁止的,我希望用软件自动执行此操作.

我目前的算法包括:

  1. 在三角形的表面上生成多个点.
  2. 对于每个点,生成与三角形法线对齐的半球采样器.
  3. 将光线投射到半球中.
  4. 如果未被遮挡的光线少于一定数量,我将三角形标记为删除.

但是,这种算法引起了很多悲痛.这是非常不一致的.虽然算法没有发现一些"遮挡"的面部被遮挡,但我更担心由于当前实现的问题而被移除的非常明显的面部.因此,我想知道两件事,主要是:

  1. 有没有比光线追踪更好的方法来查找和删除这些隐藏的表面?
  2. 我应该调查非随机光线生成吗?我目前正在余弦加权半球中生成随机方向,这可能会导致问题.我没有调查过的唯一原因是因为我还没有找到一种算法来在半球中生成均匀间隔的光线.

注意:这是一个对象空间算法.也就是说,可以从任何角度看 - 而不是固定的相机.

c++ algorithm optimization raytracing mesh

8
推荐指数
1
解决办法
1352
查看次数

如何在QWidget子类之外调用QMessageBox Static API

我的Qt GUI应用程序中有一个实用程序类.但是,在我的便利课中,我想调用一个QMessageBox::critical(),warning()等等.该类不是a QWidget,因此我不能this作为父级传递.QObject然而,我的类是子类,因此它可以运行诸如信号和插槽之类的东西.因此,要解决这个问题 - 如果可能的话 - 我是否应该查看属性API而不是使用静态API?

舱位声明:

class NetworkManager : public QObject
Run Code Online (Sandbox Code Playgroud)

这是一个失败的静态API调用的示例:

QMessageBox::critical(this, tr("Network"), tr("Unable to connect to host.\n"),
QMessageBox::Ok | QMessageBox::Discard);
Run Code Online (Sandbox Code Playgroud)

那么,如果我要构建一个基于Property的API消息框,是否可以以QObject某种方式调用它?我还没有真正使用过基于属性的API,但我从文档中了解到它似乎使用了一个事件循环(即exec()).

c++ user-interface qt

3
推荐指数
2
解决办法
5391
查看次数

Qt/C++ 中的密码安全伪随机数生成器(跨平台)

我正在开发一个管理敏感数据的安全应用程序,所以我需要某种安全登录机制。我正在使用 Qt 库(C++ 版本),到目前为止,我找不到提供此 [加密安全伪随机数生成器] 的函数来在用户从我的应用程序创建帐户时获取 Salt。我知道应该如何将密码存储在数据库中,并且似乎在制作新盐时必须使用 CSPRNG。我看了又找了很长时间,试图找到一种在 Qt 中做到这一点的方法,但我刚刚得出的结论是,没有办法单独在 Qt 中做到这一点。而是至少有这样做的跨平台 C++ 方法?我可以包含一个库,但我更喜欢它是 LGPL,所以如果我将来选择开发一个专有/闭源应用程序,我仍然可以使用相同的方法。一些额外的信息是我现在很可能不会使用 SQL(MSSQL Express 服务器),所以我要添加 SQL 标记。如果有帮助,我可能也会使用 QSslSocket(用于客户端/服务器之间的加密)。如果你能阐明一些不是这个,我将不胜感激!

c++ sql qt password-encryption

1
推荐指数
1
解决办法
3952
查看次数