PySide6.Qt3DRender.Qt3DRender.QShaderProgram¶
- class QShaderProgram¶
封装一个着色器程序。更多…
概要¶
属性¶
方法¶
def
__init__()def
format()def
log()def
setFormat()def
setShaderCode()def
shaderCode()def
status()
插槽¶
信号¶
静态函数¶
def
loadSource()
注意
本文档可能包含从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:
parent –
QNode
- computeShaderCode()¶
- Return type:
另请参阅
setComputeShaderCode()
属性
computeShaderCodeᅟ的获取器。- computeShaderCodeChanged(computeShaderCode)¶
- Parameters:
computeShaderCode –
QByteArray
属性
computeShaderCodeᅟ的通知信号。- format()¶
- Return type:
格式
另请参阅
setFormat()
属性
formatᅟ的获取器。- formatChanged(format)¶
- Parameters:
format –
格式
属性
formatᅟ的通知信号。- fragmentShaderCode()¶
- Return type:
另请参阅
setFragmentShaderCode()
属性
fragmentShaderCodeᅟ的获取器。- fragmentShaderCodeChanged(fragmentShaderCode)¶
- Parameters:
fragmentShaderCode –
QByteArray
属性
fragmentShaderCodeᅟ的通知信号。- geometryShaderCode()¶
- Return type:
另请参阅
setGeometryShaderCode()
获取属性
geometryShaderCodeᅟ的Getter。- geometryShaderCodeChanged(geometryShaderCode)¶
- Parameters:
geometryShaderCode –
QByteArray
属性
geometryShaderCodeᅟ的通知信号。返回从
sourceUrl加载的着色器代码。- log()¶
- Return type:
字符串
属性
logᅟ的获取器。- logChanged(log)¶
- Parameters:
日志 – 字符串
属性
logᅟ的通知信号。- setComputeShaderCode(computeShaderCode)¶
- Parameters:
computeShaderCode –
QByteArray
另请参阅
computeShaderCode()
属性
computeShaderCodeᅟ的设置器。- setFormat(format)¶
- Parameters:
format –
格式
另请参阅
format()
属性
formatᅟ的设置器。- setFragmentShaderCode(fragmentShaderCode)¶
- Parameters:
fragmentShaderCode –
QByteArray
另请参阅
fragmentShaderCode()
属性
fragmentShaderCodeᅟ的设置器。- setGeometryShaderCode(geometryShaderCode)¶
- Parameters:
geometryShaderCode –
QByteArray
另请参阅
geometryShaderCode()
属性
geometryShaderCodeᅟ的设置器。- setShaderCode(type, shaderCode)¶
- Parameters:
type –
ShaderTypeshaderCode –
QByteArray
将着色器的
type的着色器代码设置为shaderCode。另请参阅
shaderCode()- setTessellationControlShaderCode(tessellationControlShaderCode)¶
- Parameters:
tessellationControlShaderCode –
QByteArray
另请参阅
tessellationControlShaderCode()
属性
tessellationControlShaderCodeᅟ的设置器。- setTessellationEvaluationShaderCode(tessellationEvaluationShaderCode)¶
- Parameters:
tessellationEvaluationShaderCode –
QByteArray
另请参阅
tessellationEvaluationShaderCode()
属性
tessellationEvaluationShaderCodeᅟ的设置器。- setVertexShaderCode(vertexShaderCode)¶
- Parameters:
vertexShaderCode –
QByteArray
另请参阅
vertexShaderCode()
属性
vertexShaderCodeᅟ的设置器。- shaderCode(type)¶
- Parameters:
类型 –
ShaderType- Return type:
返回
type的着色器代码。另请参阅
setShaderCode()- status()¶
- Return type:
状态
返回当前着色器程序的状态。
属性
statusᅟ的获取器。- statusChanged(status)¶
- Parameters:
状态 –
Status
属性
statusᅟ的通知信号。- tessellationControlShaderCode()¶
- Return type:
另请参阅
setTessellationControlShaderCode()
属性
tessellationControlShaderCodeᅟ的获取器。- tessellationControlShaderCodeChanged(tessellationControlShaderCode)¶
- Parameters:
tessellationControlShaderCode –
QByteArray
属性
tessellationControlShaderCodeᅟ的通知信号。- tessellationEvaluationShaderCode()¶
- Return type:
另请参阅
setTessellationEvaluationShaderCode()
属性
tessellationEvaluationShaderCodeᅟ的获取器。- tessellationEvaluationShaderCodeChanged(tessellationEvaluationShaderCode)¶
- Parameters:
tessellationEvaluationShaderCode –
QByteArray
属性
tessellationEvaluationShaderCodeᅟ的通知信号。- vertexShaderCode()¶
- Return type:
另请参阅
setVertexShaderCode()
属性
vertexShaderCodeᅟ的获取器。- vertexShaderCodeChanged(vertexShaderCode)¶
- Parameters:
vertexShaderCode –
QByteArray
属性
vertexShaderCodeᅟ的通知信号。