将统一值传递给顶点和片段着色器

Posted

技术标签:

【中文标题】将统一值传递给顶点和片段着色器【英文标题】:Passing uniform values to into vertex and fragment shaders 【发布时间】:2018-09-13 14:42:38 【问题描述】:

如何?

我知道在QMaterial 中可以做到这样的事情:

self.colorParameter = Qt3DRender.QParameter("color", color)
self.addParameter(self.colorParameter)

还有其他方法吗?

我的目标是传递一些统一的值并不时更改它们。

【问题讨论】:

glUniform*() 由于某种原因无法正常工作? @genpfault 感谢您的评论。不,我用的是qt3d,我不能用这个。 查看github.com/qt/qt3d/tree/5.11/src/extras/defaults At 已经实施的材料。这应该向您展示如何将参数传递给着色器。 再次感谢@Florian Blume。现在可以了! 我很高兴它有效 :) 在下面为其他人发布您的答案! 【参考方案1】:

正如@Florian Blume 所建议的,我正在发布我的答案:

class MyMaterial(Qt3DRender.QMaterial):
    def __init__(self, parent):
        super().__init__(parent)
        # some code ...

        self.parameter_position = Qt3DRender.QParameter("position", QVector3D(0, 0, 0))
        self.addParameter(self.parameter_position)

    def update_position(self, position):
        self.removeParameter(self.parameter_position)
        self.parameter_position.setValue(position)
        self.addParameter(self.parameter_position)

【讨论】:

以上是关于将统一值传递给顶点和片段着色器的主要内容,如果未能解决你的问题,请参考以下文章

OpenGL:为啥我不能将单个浮点数从顶点着色器传递到片段着色器?

使用金属顶点和片段着色器将 MTLTexture 传递给 SCNProgram

如果几何着色器处于活动状态,如何将信息从顶点着色器传递到片段着色器?

如何将数据从顶点着色器传递到片段着色器,中间有着色器[重复]

OpenGL着色器没有将变量从顶点传递到片段着色器

在顶点和片段着色器中访问同名统一失败