将 QMultiSampleAntiAliasing 添加到 QForwardRenderer

2023-12-24

我正在尝试在 qt3d 中启用多重采样。 Qt3DExtras::Qt3DWindow 在初始化期间已经执行了以下操作:

format.setDepthBufferSize(24);
format.setSamples(4);
format.setStencilBufferSize(8);
setFormat(format);
QSurfaceFormat::setDefaultFormat(format);

这是一个好的开始。所以根据这个帖子 https://stackoverflow.com/questions/14474259/how-do-i-enable-multisampling-antialiasing-in-opengl-with-qt5,启用多重采样所需的唯一 OpenGL 调用是

glEnable(GL_MULTISAMPLE);

事实上,文档QMultiSampleAntiAliasing 的文档 https://doc.qt.io/Qt-5/qt3drender-qmultisampleantialiasing.html states:

注意:当使用 OpenGL 作为图形 API 时,如果 QMultiSampleAntiAliasing 已添加到渲染状态,则将调用 glEnable(GL_MULTISAMPLE)。

因此,为了将 QMultiSampleAntiAliasing 添加到 Framegraph,我提出了以下建议:

//For antialiasing
Qt3DRender::QRenderStateSet *multiSampleRenderStateSet = new Qt3DRender::QRenderStateSet;
Qt3DRender::QMultiSampleAntiAliasing *msaa = new Qt3DRender::QMultiSampleAntiAliasing;
multiSampleRenderStateSet->addRenderState(msaa);
this->activeFrameGraph()->setParent(multiSampleRenderStateSet);
this->setActiveFrameGraph(multiSampleRenderStateSet);

但显然,由于这会覆盖全局所有默认的 RenderStates,因此我的渲染结果非常混乱。我什至不确定多重采样是否已启用(或者之前是否已启用?)。

基本上,我的问题是:

将 QRenderState 添加到默认 QForwardRenderer 框架图的最简单方法是什么?尤其是 QMultiSampleAntiAliasing?


好吧,读完之后this http://lists.qt-project.org/pipermail/interest/2016-March/021359.html电子邮件线程,我现在使用以下几行:

//For antialiasing
Qt3DRender::QRenderStateSet *renderStateSet = new Qt3DRender::QRenderStateSet;

Qt3DRender::QMultiSampleAntiAliasing *msaa = new Qt3DRender::QMultiSampleAntiAliasing;
renderStateSet->addRenderState(msaa);
Qt3DRender::QDepthTest *depthTest = new Qt3DRender::QDepthTest;
depthTest->setDepthFunction(Qt3DRender::QDepthTest::LessOrEqual);
renderStateSet->addRenderState(depthTest);

this->activeFrameGraph()->setParent(renderStateSet);
this->setActiveFrameGraph(renderStateSet);

这显然恢复了 Qt3D 的默认 DepthTest,并给了我一个看似干净的渲染。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将 QMultiSampleAntiAliasing 添加到 QForwardRenderer 的相关文章

随机推荐

  • 删除as3中的空格

    如何从 as3 中的字符串中删除空格 我希望能够删除所有回车符 空格 制表符等 您可以使用正则表达式 var rex RegExp s r n gim var str String This is a string str str repl
  • 即使 Ant 任务失败,Ant 也会成功

    我一定缺少一个简单的设置 所以请原谅我 但我有两次注意到我的坏蚂蚁任务不会导致构建失败 例如 当源文件不存在时 Ant 复制 构建成功 Ant 解压缩 当任务报告 无法写入文件 或类似消息时 构建成功 Ant 执行错误 语法无效 构建成功
  • 如何在WPF中叠加图像?

    我有两个图像需要重叠 例如 我需要在实心矩形顶部有一个实心圆 所以 我可以看到整个圆 但只能看到矩形的角 我不希望圆圈是透明的 原本的circle png没有矩形边框 它的边界仅沿着圆的边界 因此 理想情况下 整个圆不应与矩形重叠 这是显示
  • 员工工资查询错误

    我正在尝试制作一家公司的薪资报告 我想通过使用如下查询来显示该公司的所有员工 select tab1 name tab1 job tab1 salary tab2 discount days tab1 salary tab1 salary
  • cmd中转义特殊字符

    我有一个 Windows bat 脚本 在其中尝试运行参数中包含密码的命令 我希望能够使用的密码是 gt lt 从我读到的here http ss64 com nt syntax esc html 我应该逃走 lt gt with 根据我的
  • glDrawArrays 上的 OpenGL ES EXC_BAD_ACCESS

    我在 OpenGL ES 1 1 中为我正在构建的 iPhone 游戏进行渲染时遇到问题 简而言之 我正在渲染 3 个项目 背景 效果很好 许多球形物体 效果很好 一个改变大小的简单线圆 我在这里遇到问题 基本上 当我在圆上调用 drawA
  • 如何生成 Identity Server 签名证书

    在身份服务器示例中 我们发现这样的代码Startup cs var certFile env ApplicationBasePath idsrv3test pfx var signingCertificate new X509Certifi
  • C++ 二进制文件和迭代器:使用 ifstreambuf_iterator 摆脱 1:1 的束缚?

    这个答案 https stackoverflow com a 13665583 2485710指出 C 不太适合对二进制文件进行迭代这一事实 但这正是我现在所需要的 简而言之 我需要以 二进制 方式操作文件 是的 所有文件都是二进制的 即使
  • 对 SVG 组进行动画处理

    我目前有以下 SVG
  • 使用 Lua 注册闭包

    我不想使用 lua CFunction 签名来编写从 Lua 调用的方法 而是使用我自己的函数签名来简化导出过程 void foo call t call int a char b char c table t d reading argu
  • Angular Reactive 表单嵌套 FormGroup 中的空值

    我有一个带有嵌套表单组的角反应表单 this form new FormGroup name new FormControl address new FormGroup line1 new FormControl line2 new For
  • Modernizr 可以异步加载脚本但按顺序执行它们吗?

    我正在尝试 Modernizer load 我有这个 Modernizr load load js jquery 1 6 1 js js jquery tools min js js myscript js 如果我理解正确的话 我可以使用这
  • 使用 OWIN 的混合模式身份验证

    我正在构建一个 MVC 5 应用程序 我需要根据 AD 和 SQL 数据库或 Web 服务对人员进行身份验证 要求是 如果一个人登录到公司网络或通过 VPN 连接 我必须登录他们而不要求提供凭据 如果用户通过互联网访问网站或没有 AD 帐户
  • 打印所需数量的倒​​星图案[关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 倒星图案由给定行数的星号组成 其中下一行少一个星号 直到最后一行剩下一个星号 每五个星号替换为 see image https i stac
  • Android AOSP 汽车模拟器

    我正在尝试构建一个汽车模拟器 因为 Android studio 3 5 未检测到系统映像 我已经在Android 8和9中尝试过并下载了所有工具 如何在AOSP中构建汽车模拟器 您需要 Mac 或 Linux 来构建模拟器 执行以下站点中
  • 使用不同格式选项实现 __str__ 方法的 Pythonic 方法是什么?

    我想创建一个 str 根据用户选择创建各种格式的字符串的方法 我想出的最好的办法就是制作一个 str kwargs 方法 这似乎工作正常 但它不兼容str obj or print obj 换句话说我必须使用print obj str st
  • (HTML + JS) 桌面客户端框架

    我计划为 Windows 和 Mac 编写一个桌面客户端 它将由网络技术 HTML JS 提供支持 因此 它应在用户桌面上的 WebKit 引擎上运行 最近 我看到一个有趣的方法来解决这个问题 加速器 http www appcelerat
  • 是否有使用 java 实现状态机的标准模式?

    我可以考虑的一种方法是有一个类来监听事件并将不同的状态存储在变量中 是否有使用 java 实现状态机的标准模式 我之前读过的文章现在似乎已经被删除了 但是如果你谷歌足够多 你应该能够找到其他关于如何实现的资源有限状态机使用Javaenums
  • 观察 Angularjs 控制器中的对象

    var app angular module myApp app controller myCtrl function scope scope form name my name age 25 scope watch form functi
  • 将 QMultiSampleAntiAliasing 添加到 QForwardRenderer

    我正在尝试在 qt3d 中启用多重采样 Qt3DExtras Qt3DWindow 在初始化期间已经执行了以下操作 format setDepthBufferSize 24 format setSamples 4 format setSte