PySide6.Qt3DRender.Qt3DRender.QShaderProgram

class QShaderProgram

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

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;

模型视图矩阵

模型视图

uniform mat4 modelView;

视图投影矩阵

viewProjectionMatrix

uniform mat4 viewProjectionMatrix;

模型视图投影矩阵

模型视图投影 mvp

uniform mat4 modelViewProjection; uniform mat4 mvp;

逆模型矩阵

逆模型矩阵

uniform mat4 inverseModelMatrix;

逆视图矩阵

inverseViewMatrix

uniform mat4 inverseViewMatrix;

逆投影矩阵

inverseProjectionMatrix

uniform mat4 inverseProjectionMatrix;

逆模型视图矩阵

逆模型视图

uniform mat4 inverseModelView;

逆视图投影矩阵

inverseViewProjectionMatrix

uniform mat4 inverseViewProjectionMatrix;

逆模型视图投影矩阵

逆模型视图投影

uniform mat4 inverseModelViewProjection;

模型法线矩阵

modelNormalMatrix

uniform mat3 modelNormalMatrix;

模型视图法线矩阵

模型视图法线

uniform mat3 modelViewNormal;

视口矩阵

viewportMatrix

uniform mat4 viewportMatrix;

逆视口矩阵

inverseViewportMatrix

uniform mat4 inverseViewportMatrix;

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

aspectRatio

uniform float aspectRatio;

曝光

曝光

uniform float exposure;

伽马

gamma

uniform float gamma;

时间(以纳秒为单位)

时间

uniform float time;

眼睛位置

eyePosition

uniform vec3 eyePosition;

皮肤调色板

skinningPalette[0]

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

RHI支持

在编写用于Qt 3D的RHI后端的GLSL 450着色器代码时,默认的uniforms将作为2个uniform缓冲对象提供。

这些绑定位置设置为0用于RenderView uniforms,1用于Command uniforms。

#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开始的绑定或自动让Qt 3D自动确定绑定。确保在不同的着色器阶段之间保持一致。

#version 450 core

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

layout(location=0) out vec4 fragColor;

void main()
{
    fragColor = myColor;
}

在向uniforms传递值时没有涉及任何变化。

对于上述示例,设置 myColor 可以通过以下方式完成:

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

纹理仍然需要定义为独立的uniforms。

#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

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

Access functions:
property formatᅟ: Qt3DRender.QShaderProgram.Format

保存了在ShaderProgram上提供的代码格式。默认是ShaderProgram .GLSL

Access functions:
property fragmentShaderCodeᅟ: QByteArray

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

Access functions:
property geometryShaderCodeᅟ: QByteArray

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

Access functions:
property logᅟ: str

保存当前着色器程序的日志。这对于诊断着色器程序的编译失败非常有用。

Access functions:
property statusᅟ: Qt3DRender.QShaderProgram.Status

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

Access functions:
property tessellationControlShaderCodeᅟ: QByteArray

保存此着色器程序使用的曲面细分控制着色器代码。

Access functions:
property tessellationEvaluationShaderCodeᅟ: QByteArray

保存此着色器程序使用的曲面细分评估着色器代码。

Access functions:
property vertexShaderCodeᅟ: QByteArray

保存此着色器程序使用的顶点着色器代码。

Access functions:
__init__([parent=None])
Parameters:

parentQNode

computeShaderCode()
Return type:

QByteArray

另请参阅

setComputeShaderCode()

属性 computeShaderCodeᅟ 的获取器。

computeShaderCodeChanged(computeShaderCode)
Parameters:

computeShaderCodeQByteArray

属性 computeShaderCodeᅟ 的通知信号。

format()
Return type:

格式

另请参阅

setFormat()

属性 formatᅟ 的获取器。

formatChanged(format)
Parameters:

format格式

属性 formatᅟ 的通知信号。

fragmentShaderCode()
Return type:

QByteArray

另请参阅

setFragmentShaderCode()

属性 fragmentShaderCodeᅟ 的获取器。

fragmentShaderCodeChanged(fragmentShaderCode)
Parameters:

fragmentShaderCodeQByteArray

属性 fragmentShaderCodeᅟ 的通知信号。

geometryShaderCode()
Return type:

QByteArray

另请参阅

setGeometryShaderCode()

获取属性 geometryShaderCodeᅟ 的Getter。

geometryShaderCodeChanged(geometryShaderCode)
Parameters:

geometryShaderCodeQByteArray

属性 geometryShaderCodeᅟ 的通知信号。

static loadSource(sourceUrl)
Parameters:

sourceUrlQUrl

Return type:

QByteArray

返回从sourceUrl加载的着色器代码。

log()
Return type:

字符串

属性 logᅟ 的获取器。

logChanged(log)
Parameters:

日志 – 字符串

属性 logᅟ 的通知信号。

setComputeShaderCode(computeShaderCode)
Parameters:

computeShaderCodeQByteArray

另请参阅

computeShaderCode()

属性 computeShaderCodeᅟ 的设置器。

setFormat(format)
Parameters:

format格式

另请参阅

format()

属性 formatᅟ 的设置器。

setFragmentShaderCode(fragmentShaderCode)
Parameters:

fragmentShaderCodeQByteArray

另请参阅

fragmentShaderCode()

属性 fragmentShaderCodeᅟ 的设置器。

setGeometryShaderCode(geometryShaderCode)
Parameters:

geometryShaderCodeQByteArray

另请参阅

geometryShaderCode()

属性 geometryShaderCodeᅟ 的设置器。

setShaderCode(type, shaderCode)
Parameters:

将着色器的type的着色器代码设置为shaderCode

另请参阅

shaderCode()

setTessellationControlShaderCode(tessellationControlShaderCode)
Parameters:

tessellationControlShaderCodeQByteArray

另请参阅

tessellationControlShaderCode()

属性 tessellationControlShaderCodeᅟ 的设置器。

setTessellationEvaluationShaderCode(tessellationEvaluationShaderCode)
Parameters:

tessellationEvaluationShaderCodeQByteArray

另请参阅

tessellationEvaluationShaderCode()

属性 tessellationEvaluationShaderCodeᅟ 的设置器。

setVertexShaderCode(vertexShaderCode)
Parameters:

vertexShaderCodeQByteArray

另请参阅

vertexShaderCode()

属性 vertexShaderCodeᅟ 的设置器。

shaderCode(type)
Parameters:

类型ShaderType

Return type:

QByteArray

返回type的着色器代码。

另请参阅

setShaderCode()

status()
Return type:

状态

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

属性 statusᅟ 的获取器。

statusChanged(status)
Parameters:

状态Status

属性 statusᅟ 的通知信号。

tessellationControlShaderCode()
Return type:

QByteArray

另请参阅

setTessellationControlShaderCode()

属性 tessellationControlShaderCodeᅟ 的获取器。

tessellationControlShaderCodeChanged(tessellationControlShaderCode)
Parameters:

tessellationControlShaderCodeQByteArray

属性 tessellationControlShaderCodeᅟ 的通知信号。

tessellationEvaluationShaderCode()
Return type:

QByteArray

另请参阅

setTessellationEvaluationShaderCode()

属性 tessellationEvaluationShaderCodeᅟ 的获取器。

tessellationEvaluationShaderCodeChanged(tessellationEvaluationShaderCode)
Parameters:

tessellationEvaluationShaderCodeQByteArray

属性 tessellationEvaluationShaderCodeᅟ 的通知信号。

vertexShaderCode()
Return type:

QByteArray

另请参阅

setVertexShaderCode()

属性 vertexShaderCodeᅟ 的获取器。

vertexShaderCodeChanged(vertexShaderCode)
Parameters:

vertexShaderCodeQByteArray

属性 vertexShaderCodeᅟ 的通知信号。