- 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;
模型视图矩阵
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])#
- 参数:
parent –
QNode
- computeShaderCode()#
- 返回类型:
另请参阅
setComputeShaderCode()
属性
computeShaderCode
的获取器。- computeShaderCodeChanged(computeShaderCode)#
- 参数:
computeShaderCode –
QByteArray
属性
computeShaderCode
的通知信号。- format()#
- 返回类型:
格式
另请参阅
setFormat()
属性
format
的获取器。- formatChanged(format)
- 参数:
format –
Format
属性
format
的通知信号。- fragmentShaderCode()
- 返回类型:
另请参阅
setFragmentShaderCode()
属性
fragmentShaderCode
的获取器。- fragmentShaderCodeChanged(fragmentShaderCode)
- 参数:
fragmentShaderCode –
QByteArray
属性
fragmentShaderCode
的通知信号。- geometryShaderCode()
- 返回类型:
另请参阅
setGeometryShaderCode()
属性
geometryShaderCode
的获取器。- geometryShaderCodeChanged(geometryShaderCode)
- 参数:
geometryShaderCode –
QByteArray
属性
geometryShaderCode
的通知信号。- static loadSource(sourceUrl)
- 参数:
sourceUrl –
QUrl
- 返回类型:
从
sourceUrl
加载着色器代码。- log()
- 返回类型:
str
属性
log
的获取器。- logChanged(log)
- 参数:
log – str
属性
log
的通知信号。- setComputeShaderCode(computeShaderCode)#
- 参数:
computeShaderCode –
QByteArray
另请参阅
computeShaderCode()
设置属性
computeShaderCode
的值。- setFormat(format)#
- 参数:
format –
Format
另请参阅
format()
设置属性
format
的值。- setFragmentShaderCode(fragmentShaderCode)#
- 参数:
fragmentShaderCode –
QByteArray
另请参阅
fragmentShaderCode()
设置属性
fragmentShaderCode
的值。- setGeometryShaderCode(geometryShaderCode)#
- 参数:
geometryShaderCode –
QByteArray
另请参阅
geometryShaderCode()
设置属性
geometryShaderCode
的值。- setShaderCode(type, shaderCode)#
- 参数:
type –
ShaderType
shaderCode –
QByteArray
将着色器代码
shaderCode
设置到指定类型type
的着色器。另请参阅
shaderCode()
- setTessellationControlShaderCode(tessellationControlShaderCode)#
- 参数:
tessellationControlShaderCode –
QByteArray
另请参阅
tessellationControlShaderCode()
设置属性
tessellationControlShaderCode
的值。- setTessellationEvaluationShaderCode(tessellationEvaluationShaderCode)#
- 参数:
tessellationEvaluationShaderCode –
QByteArray
另请参阅
tessellationEvaluationShaderCode()
设置属性
tessellationEvaluationShaderCode
的值。- setVertexShaderCode(vertexShaderCode)#
- 参数:
vertexShaderCode –
QByteArray
另请参阅
vertexShaderCode()
设置属性
vertexShaderCode
.- shaderCode(type)#
- 参数:
type –
ShaderType
- 返回类型:
返回指定类型的着色器代码。
另请参阅
setShaderCode()
- status()#
- 返回类型:
状态
返回当前着色器程序的状态。
属性
status
的获取器。- statusChanged(status)#
- 参数:
status –
Status
status
属性的通知信号。- tessellationControlShaderCode()#
- 返回类型:
另请参阅
setTessellationControlShaderCode()
属性
tessellationControlShaderCode
的获取器。- tessellationControlShaderCodeChanged(tessellationControlShaderCode)#
- 参数:
tessellationControlShaderCode –
QByteArray
tessellationControlShaderCode
属性的通知信号。- tessellationEvaluationShaderCode()#
- 返回类型:
另请参阅
setTessellationEvaluationShaderCode()
属性
tessellationEvaluationShaderCode
的获取器。- tessellationEvaluationShaderCodeChanged(tessellationEvaluationShaderCode)#
- 参数:
tessellationEvaluationShaderCode –
QByteArray
tessellationEvaluationShaderCode
属性的通知信号。- vertexShaderCode()#
- 返回类型:
另请参阅
setVertexShaderCode()
属性
vertexShaderCode
的获取器。- vertexShaderCodeChanged(vertexShaderCode)#
- 参数:
vertexShaderCode –
QByteArray
属性
vertexShaderCodeʵ
的通知信号。