Qt3DRender::QShaderProgram Class
class Qt3DRender::QShaderProgram封装着色器程序。更多
头文件: | #include <QShaderProgram> |
CMake: | find_package(Qt6 REQUIRED COMPONENTS 3drender) target_link_libraries(mytarget PRIVATE Qt6::3drender) |
qmake: | QT += 3drender |
在 QML 中: | ShaderProgram |
继承: | Qt3DCore::QNode |
状态: | 已废弃 |
公共类型
enum | Format { GLSL, SPIRV } |
enum | ShaderType { Vertex, Fragment, TessellationControl, TessellationEvaluation, Geometry, Compute } |
enum | Status { NotReady, Ready, Error } |
属性
|
|
公共功能
QByteArray | computeShaderCode() const |
Qt3DRender::QShaderProgram::Format | format() const |
QByteArray | fragmentShaderCode() const |
QByteArray | geometryShaderCode() const |
QString | log() const |
void | setFormat(Qt3DRender::QShaderProgram::Format format) |
void | setShaderCode(Qt3DRender::QShaderProgram::ShaderType type, const QByteArray &shaderCode) |
QByteArray | shaderCode(Qt3DRender::QShaderProgram::ShaderType type) const |
Qt3DRender::QShaderProgram::Status | status() const |
QByteArray | tessellationControlShaderCode() const |
QByteArray | tessellationEvaluationShaderCode() const |
QByteArray | vertexShaderCode() const |
公共插槽
void | setComputeShaderCode(const QByteArray &computeShaderCode) |
void | setFragmentShaderCode(const QByteArray &fragmentShaderCode) |
void | setGeometryShaderCode(const QByteArray &geometryShaderCode) |
void | setTessellationControlShaderCode(const QByteArray &tessellationControlShaderCode) |
void | setTessellationEvaluationShaderCode(const QByteArray &tessellationEvaluationShaderCode) |
void | setVertexShaderCode(const QByteArray &vertexShaderCode) |
信号
void | computeShaderCodeChanged(const QByteArray &computeShaderCode) |
void | formatChanged(Qt3DRender::QShaderProgram::Format format) |
void | fragmentShaderCodeChanged(const QByteArray &fragmentShaderCode) |
void | geometryShaderCodeChanged(const QByteArray &geometryShaderCode) |
void | logChanged(const QString &log) |
void | statusChanged(Qt3DRender::QShaderProgram::Status status) |
void | tessellationControlShaderCodeChanged(const QByteArray &tessellationControlShaderCode) |
void | tessellationEvaluationShaderCodeChanged(const QByteArray &tessellationEvaluationShaderCode) |
void | vertexShaderCodeChanged(const QByteArray &vertexShaderCode) |
静态公共成员
QByteArray | loadSource(const QUrl &sourceUrl) |
详细说明
着色器程序由多个不同的着色器(如顶点和片段着色器)组成。
如果在着色器检查阶段遇到默认制服,Qt3D 将自动填充一组默认制服。
默认着色器 | 相关 Qt3D 参数名称 | GLSL 声明 |
---|---|---|
模型矩阵 | 模型矩阵 | 统一 mat4 modelMatrix; |
视图矩阵 | viewMatrix | uniform mat4 viewMatrix; |
投影矩阵 | projectionMatrix | uniform mat4 projectionMatrix; |
模型视图矩阵 | 模型视图 | 统一 mat4 modelView.ViewProjectionMatrix |
视图投影矩阵 | viewProjectionMatrix | uniform mat4 viewProjectionMatrix; |
模型视图投影矩阵 | modelViewProjection mvp | uniform mat4 modelViewProjection; uniform mat4 mvp; |
反向模型矩阵 | inverseModelMatrix | uniform mat4 inverseModelMatrix; |
inverseViewMatrix | inverseViewMatrix | uniform mat4 inverseViewMatrix; |
反向投影矩阵 | inverseProjectionMatrix | uniform mat4 inverseProjectionMatrix; |
反向模型视图矩阵 | 逆模型视图矩阵 | uniform mat4 inverseModelView; |
InverseViewProjectionMatrix | inverseViewProjectionMatrix | uniform mat4 inverseViewProjectionMatrix; |
反向模型视图投影矩阵 | inverseModelViewProjection | uniform mat4 inverseModelViewProjection; |
模型正态矩阵 | modelNormalMatrix | uniform mat3 modelNormalMatrix; |
模型视图正态矩阵 | modelViewNormal | uniform mat3 modelViewNormal; |
视口矩阵 | viewportMatrix | uniform mat4 viewportMatrix; |
反向视口矩阵 | inverseViewportMatrix | uniform mat4 inverseViewportMatrix; |
宽高比 (曲面宽/曲面高 | 宽高比 | uniform float aspectRatio; |
曝光 | 曝光 | 统一浮点曝光; |
伽玛 | gamma | 均匀浮动伽马值; |
时间 (纳秒 | 时间 | 统一浮点时间; |
眼睛位置 | eyePosition | uniform vec3 eyePosition; |
蒙皮调色板 | skinningPalette[0] | const int maxJoints = 100; uniform mat4 skinningPalette[maxJoints]; |
支持 RHI
在编写与Qt 3D 的 RHI 后端一起使用的 GLSL 450 着色器代码时,默认制服将作为 2 个制服缓冲区对象提供。
这些对象的绑定位置设置为:RenderView 统一对象的绑定位置为 0,Command 统一对象的绑定位置为 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 开始的绑定或自动绑定,让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)); }
成员类型文档
enum QShaderProgram::Format
该枚举用于确定着色器代码的格式。
常量 | 值 | 说明 |
---|---|---|
Qt3DRender::QShaderProgram::GLSL | 0 | OpenGL |
Qt3DRender::QShaderProgram::SPIRV | 1 | Vulkan、OpenGL 5 |
enum QShaderProgram::ShaderType
该枚举用于标识所使用的着色器类型。
常量 | 值 | 描述 |
---|---|---|
Qt3DRender::QShaderProgram::Vertex | 0 | 顶点着色器 |
Qt3DRender::QShaderProgram::Fragment | 1 | 片段着色器 |
Qt3DRender::QShaderProgram::TessellationControl | 2 | 镶嵌控制着色器 |
Qt3DRender::QShaderProgram::TessellationEvaluation | 3 | 细分评估着色器 |
Qt3DRender::QShaderProgram::Geometry | 4 | 几何着色器 |
Qt3DRender::QShaderProgram::Compute | 5 | 计算着色器 |
enum QShaderProgram::Status
该枚举用于确定所使用着色器的状态。
常量 | 值 | 说明 |
---|---|---|
Qt3DRender::QShaderProgram::NotReady | 0 | 着色器尚未编译和链接 |
Qt3DRender::QShaderProgram::Ready | 1 | 已成功编译着色器 |
Qt3DRender::QShaderProgram::Error | 2 | 编译着色器时发生错误 |
属性文档
computeShaderCode : QByteArray
保存此着色器程序使用的计算着色器代码。
访问功能:
QByteArray | computeShaderCode() const |
void | setComputeShaderCode(const QByteArray &computeShaderCode) |
通知信号:
void | computeShaderCodeChanged(const QByteArray &computeShaderCode) |
format : Format
保存ShaderProgram 上提供的代码格式。默认为ShaderProgram.GLSL。
访问功能:
Qt3DRender::QShaderProgram::Format | format() const |
void | setFormat(Qt3DRender::QShaderProgram::Format format) |
通知信号:
void | formatChanged(Qt3DRender::QShaderProgram::Format format) |
fragmentShaderCode : QByteArray
保存此着色器程序使用的片段着色器代码。
访问功能:
QByteArray | fragmentShaderCode() const |
void | setFragmentShaderCode(const QByteArray &fragmentShaderCode) |
通知信号:
void | fragmentShaderCodeChanged(const QByteArray &fragmentShaderCode) |
geometryShaderCode : QByteArray
保存此着色器程序使用的几何着色器代码。
访问功能:
QByteArray | geometryShaderCode() const |
void | setGeometryShaderCode(const QByteArray &geometryShaderCode) |
通知信号:
void | geometryShaderCodeChanged(const QByteArray &geometryShaderCode) |
[read-only]
log : const QString
保存当前着色器程序的日志。这有助于诊断着色器程序的编译故障。
访问功能:
QString | log() const |
通知信号
void | logChanged(const QString &log) |
[read-only]
status : const Status
保存当前着色器程序的状态。
访问功能:
Qt3DRender::QShaderProgram::Status | status() const |
通知信号:
void | statusChanged(Qt3DRender::QShaderProgram::Status status) |
tessellationControlShaderCode : QByteArray
保存此着色器程序使用的细分控制着色器代码。
访问功能:
QByteArray | tessellationControlShaderCode() const |
void | setTessellationControlShaderCode(const QByteArray &tessellationControlShaderCode) |
通知信号
void | tessellationControlShaderCodeChanged(const QByteArray &tessellationControlShaderCode) |
tessellationEvaluationShaderCode : QByteArray
保存此着色器程序使用的细分评估着色器代码。
访问功能:
QByteArray | tessellationEvaluationShaderCode() const |
void | setTessellationEvaluationShaderCode(const QByteArray &tessellationEvaluationShaderCode) |
通知信号
void | tessellationEvaluationShaderCodeChanged(const QByteArray &tessellationEvaluationShaderCode) |
vertexShaderCode : QByteArray
保存此着色器程序使用的顶点着色器代码。
访问功能:
QByteArray | vertexShaderCode() const |
void | setVertexShaderCode(const QByteArray &vertexShaderCode) |
Notifier 信号:
void | vertexShaderCodeChanged(const QByteArray &vertexShaderCode) |
成员函数 文档
[static invokable]
QByteArray QShaderProgram::loadSource(const QUrl &sourceUrl)
返回从sourceUrl 加载的着色器代码。
注: 可通过元对象系统和 QML 调用此函数。请参见Q_INVOKABLE 。
void QShaderProgram::setShaderCode(Qt3DRender::QShaderProgram::ShaderType type, const QByteArray &shaderCode)
将type 的着色器代码设置为shaderCode 。
另请参阅 shaderCode() 。
QByteArray QShaderProgram::shaderCode(Qt3DRender::QShaderProgram::ShaderType type) const
返回type 的着色器代码。
另请参见 setShaderCode().
Qt3DRender::QShaderProgram::Status QShaderProgram::status() const
返回当前着色器程序的状态。
注: 属性状态的获取函数。
© 2025 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.