class QShaderProgram#

封装了一个着色器程序。 更多

Inheritance diagram of PySide6.Qt3DRender.Qt3DRender.QShaderProgram

概述#

属性#

方法#

槽函数#

信号#

静态函数#

备注

本文档可能包含自动从C++转换为Python的代码片段。我们始终欢迎对此片段的翻译做出贡献。如果您发现翻译存在问题,也可以通过在https:/bugreports.qt.io/projects/PYSIDE创建工单的方式告知我们。

详细描述#

着色器程序由多个不同的着色器组成,例如顶点和片元着色器。

当在着色器内省阶段遇到它们时,Qt3D将自动填充一组默认的全局统一变量。

默认全局统一变量

相关Qt3D参数名称

GLSL声明

模型矩阵

modelMatrix

uniform mat4 modelMatrix;

视图矩阵

viewMatrix

uniform mat4 viewMatrix;

投影矩阵

projectionMatrix

uniform mat4 projectionMatrix;

模型视图矩阵

modelView

uniform mat4 modelView;

视图投影矩阵

viewProjectionMatrix

uniform mat4 viewProjectionMatrix;

模型视图投影矩阵

modelViewProjection mvp

uniform mat4 modelViewProjection; uniform mat4 mvp;

逆模型矩阵

inverseModelMatrix

uniform mat4 inverseModelMatrix;

逆视图矩阵

inverseViewMatrix

uniform mat4 inverseViewMatrix;

逆投影矩阵

inverseProjectionMatrix

uniform mat4 inverseProjectionMatrix;

逆模型视图矩阵

inverseModelView

uniform mat4 inverseModelView;

逆视图投影矩阵

inverseViewProjectionMatrix

uniform mat4 inverseViewProjectionMatrix;

逆模型视图投影矩阵

inverseModelViewProjection

uniform mat4 inverseModelViewProjection;

模型法线矩阵

modelNormalMatrix

uniform mat3 modelNormalMatrix;

模型视图法线矩阵

modelViewNormal

uniform mat3 modelViewNormal;

视口矩阵

viewportMatrix

uniform mat4 viewportMatrix;

逆视口矩阵

inverseViewportMatrix

uniform mat4 inverseViewportMatrix;

宽高比(表面宽/表面高)

aspectRatio

uniform float aspectRatio;

曝光度

exposure

uniform float exposure;

伽玛

gamma

uniform float gamma;

时间(纳秒)

time

uniform float time;

眼睛位置

eyePosition

uniform vec3 eyePosition;

蒙皮资源集

skinningPalette[0]

const int maxJoints = 100; uniform mat4 skinningPalette[maxJoints];

RHI 支持#

当编写包含 Qt 3D RHI 后端的 GLSL 450 着色器代码时,默认的统一变量将以 2 个统一缓存对象的形式提供。

这些绑定位置设置为 0 作为渲染视图的绑定,1 作为命令的绑定。

#version 450 core

layout(location = 0) in vec3 vertexPosition;

layout(std140, binding = 0) uniform qt3d_render_view_uniforms {
  mat4 viewMatrix;
  mat4 projectionMatrix;
  mat4 uncorrectedProjectionMatrix;
  mat4 clipCorrectionMatrix;
  mat4 viewProjectionMatrix;
  mat4 inverseViewMatrix;
  mat4 inverseProjectionMatrix;
  mat4 inverseViewProjectionMatrix;
  mat4 viewportMatrix;
  mat4 inverseViewportMatrix;
  vec4 textureTransformMatrix;
  vec3 eyePosition;
  float aspectRatio;
  float gamma;
  float exposure;
  float time;
  float yUpInNDC;
  float yUpInFBO;
};

layout(std140, binding = 1) uniform qt3d_command_uniforms {
  mat4 modelMatrix;
  mat4 inverseModelMatrix;
  mat4 modelViewMatrix;
  mat3 modelNormalMatrix;
  mat4 inverseModelViewMatrix;
  mat4 modelViewProjection;
  mat4 inverseModelViewProjectionMatrix;
};

void main()
{
    gl_Position = (projectionMatrix * viewMatrix * modelMatrix * vertexPosition);
}

对于用户定义的统一缓存对象,使用从 2 或 auto 开始的绑定,让 Qt 3D 自动确定绑定。确保在不同的着色器阶段之间保持一致。

#version 450 core

layout(std140, binding = auto) uniform my_uniforms {
  vec4 myColor;
};

layout(location=0) out vec4 fragColor;

void main()
{
    fragColor = myColor;
}

用于统一变量的值传递时没有涉及任何变化。

对于上述示例,设置 myColor 可以使用

QParameter *parameter = new QParameter();
parameter->setName("myColor");
parameter->setValue(QVariant::fromValue(QColor(Qt::blue)));

纹理仍然需要定义为独立的统一变量。

#version 450 core

layout(binding=0) uniform sampler2D source;

layout(location=0) out vec4 fragColor;

void main()
{
    fragColor = texture(source, vec2(0.5, 0.5));
}
class ShaderType#

此枚举识别了所使用的着色器的类型。

常数

描述

Qt3DRender.QShaderProgram.Vertex

顶点着色器

Qt3DRender.QShaderProgram.Fragment

片元着色器

Qt3DRender.QShaderProgram.TessellationControl

分割控制着色器

Qt3DRender.QShaderProgram.TessellationEvaluation

分割评估着色器

Qt3DRender.QShaderProgram.Geometry

几何着色器

Qt3DRender.QShaderProgram.Compute

计算着色器

class Status#

此枚举识别了所使用的着色器的状态。

常数

描述

Qt3DRender.QShaderProgram.NotReady

着色器尚未编译和链接

Qt3DRender.QShaderProgram.Ready

着色器已成功编译

Qt3DRender.QShaderProgram.Error

编译着色器时发生错误

class Format#

此枚举识别了所使用的着色器代码的格式。

常数

描述

Qt3DRender.QShaderProgram.GLSL

OpenGL

Qt3DRender.QShaderProgram.SPIRV

Vulkan, OpenGL 5

备注

当使用 from __feature__ import true_property 时,可以直接使用属性,否则通过访问器函数使用。

property computeShaderCodeᅟ: QByteArray#

存储此着色器程序使用的计算着色器代码。

访问函数
属性formatᅟ: Qt3DRender.QShaderProgram.Format#

存储在ShaderProgram上提供的代码的格式。默认为ShaderProgram .GLSL

访问函数
属性fragmentShaderCodeᅟ: QByteArray#

存储此着色器程序使用的片段着色器代码。

访问函数
属性geometryShaderCodeᅟ: QByteArray#

存储此着色器程序使用的几何着色器代码。

访问函数
属性logᅟ: str#

存储当前着色器程序的日志。这有助于诊断着色器程序的编译失败。

访问函数
属性statusᅟ: Qt3DRender.QShaderProgram.Status#

存储当前着色器程序的状态。

访问函数
属性 tessellationControlShaderCode: QByteArray#

包含此着色器程序使用的细分控制着色器代码。

访问函数
属性 tessellationEvaluationShaderCode: QByteArray#

包含此着色器程序使用的细分评估着色器代码。

访问函数
属性 vertexShaderCode: QByteArray#

包含此着色器程序使用的顶点着色器代码。

访问函数
__init__([parent=None])#
参数:

parentQNode

computeShaderCode()#
返回类型:

QByteArray

另请参阅

setComputeShaderCode()

属性 computeShaderCode 的获取器。

computeShaderCodeChanged(computeShaderCode)#
参数:

computeShaderCodeQByteArray

属性 computeShaderCode 的通知信号。

format()#
返回类型:

格式

另请参阅

setFormat()

属性 format 的获取器。

formatChanged(format)
参数:

formatFormat

属性 format 的通知信号。

fragmentShaderCode()
返回类型:

QByteArray

另请参阅

setFragmentShaderCode()

属性 fragmentShaderCode 的获取器。

fragmentShaderCodeChanged(fragmentShaderCode)
参数:

fragmentShaderCodeQByteArray

属性 fragmentShaderCode 的通知信号。

geometryShaderCode()
返回类型:

QByteArray

另请参阅

setGeometryShaderCode()

属性 geometryShaderCode 的获取器。

geometryShaderCodeChanged(geometryShaderCode)
参数:

geometryShaderCodeQByteArray

属性 geometryShaderCode 的通知信号。

static loadSource(sourceUrl)
参数:

sourceUrlQUrl

返回类型:

QByteArray

sourceUrl 加载着色器代码。

log()
返回类型:

str

属性 log 的获取器。

logChanged(log)
参数:

log – str

属性 log 的通知信号。

setComputeShaderCode(computeShaderCode)#
参数:

computeShaderCodeQByteArray

另请参阅

computeShaderCode()

设置属性 computeShaderCode 的值。

setFormat(format)#
参数:

formatFormat

另请参阅

format()

设置属性 format 的值。

setFragmentShaderCode(fragmentShaderCode)#
参数:

fragmentShaderCodeQByteArray

另请参阅

fragmentShaderCode()

设置属性 fragmentShaderCode 的值。

setGeometryShaderCode(geometryShaderCode)#
参数:

geometryShaderCodeQByteArray

另请参阅

geometryShaderCode()

设置属性 geometryShaderCode 的值。

setShaderCode(type, shaderCode)#
参数:

将着色器代码 shaderCode 设置到指定类型 type 的着色器。

另请参阅

shaderCode()

setTessellationControlShaderCode(tessellationControlShaderCode)#
参数:

tessellationControlShaderCodeQByteArray

另请参阅

tessellationControlShaderCode()

设置属性 tessellationControlShaderCode 的值。

setTessellationEvaluationShaderCode(tessellationEvaluationShaderCode)#
参数:

tessellationEvaluationShaderCodeQByteArray

另请参阅

tessellationEvaluationShaderCode()

设置属性 tessellationEvaluationShaderCode 的值。

setVertexShaderCode(vertexShaderCode)#
参数:

vertexShaderCodeQByteArray

另请参阅

vertexShaderCode()

设置属性 vertexShaderCode .

shaderCode(type)#
参数:

typeShaderType

返回类型:

QByteArray

返回指定类型的着色器代码。

另请参阅

setShaderCode()

status()#
返回类型:

状态

返回当前着色器程序的状态。

属性 status 的获取器。

statusChanged(status)#
参数:

statusStatus

status 属性的通知信号。

tessellationControlShaderCode()#
返回类型:

QByteArray

另请参阅

setTessellationControlShaderCode()

属性 tessellationControlShaderCode 的获取器。

tessellationControlShaderCodeChanged(tessellationControlShaderCode)#
参数:

tessellationControlShaderCodeQByteArray

tessellationControlShaderCode 属性的通知信号。

tessellationEvaluationShaderCode()#
返回类型:

QByteArray

另请参阅

setTessellationEvaluationShaderCode()

属性 tessellationEvaluationShaderCode 的获取器。

tessellationEvaluationShaderCodeChanged(tessellationEvaluationShaderCode)#
参数:

tessellationEvaluationShaderCodeQByteArray

tessellationEvaluationShaderCode 属性的通知信号。

vertexShaderCode()#
返回类型:

QByteArray

另请参阅

setVertexShaderCode()

属性 vertexShaderCode 的获取器。

vertexShaderCodeChanged(vertexShaderCode)#
参数:

vertexShaderCodeQByteArray

属性 vertexShaderCodeʵ 的通知信号。