【问题标题】:Vertex shader to create and animate geometry in QQuickItem顶点着色器在 QQuickItem 中创建和动画几何体
【发布时间】:2013-09-18 21:38:17
【问题描述】:

我正在阅读此 Qt 错误报告中的 cmets:

https://bugreports.qt-project.org/browse/QTBUG-32741

该错误报告建议使用带有 QSGGeometry 的顶点着色器并在 C++ 中制作动画。我知道 QML 方面支持着色器,但是如何从通过 QQuickItem 的 C++ 子类处理的 QSGGeometry 材质访问着色器(正如我解释错误报告所建议的那样)?据我所知,QML 中访问的顶点着色器通常用于变形现有几何体,而不是真正用于创建新几何体或动画几何体。

或者报告是否建议完全绕过 QML 来完成这项任务?

将数据传递给顶点着色器以进行原始绘图并将 GL 视口作为快速项会非常酷,但我认为 QML 着色器不是为此而设计的。

【问题讨论】:

    标签: qt qml qtquick2


    【解决方案1】:

    QQuickItem 的子类中,覆盖updatePaintNode() 方法应创建(并在需要时更新)QSGGeometryNode 的实例,并使用为特定几何类型配置的QSGGeometry 进行设置。这将允许您直接控制顶点缓冲区对象(只有一个,但具有任意顶点属性布局)并使用您的自定义着色器。

    请参阅 qt 文档中的“自定义几何”example。完整项目在官方repository

    更有趣的例子是"Texture in SGNode"。它使用QQuickWindow::beforeRendering() 信号能够运行完全任意的OpenGL 代码。在此示例中,自定义渲染转到帧缓冲区对象。后来这个 FBO 被用作 QSGSimpleTextureNode 子类中的纹理。

    【讨论】:

    • 似乎 QSGGeometry 的 API 与 OpenGL 绘图 API 不太一样,对吗?我找不到有关实际 API 的信息并弄清楚如何使用它,这是一个常见的绘图工具集吗? qt-project.org/doc/qt-5.0/qtquick/qsggeometrynode.html
    • QSGGeometry 是用于 VBO 的抽象。使用顶点和片段着色器完成绘图。
    猜你喜欢
    • 2016-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-28
    • 1970-01-01
    • 1970-01-01
    • 2020-03-10
    • 1970-01-01
    相关资源
    最近更新 更多