ShaderProgram QML 类型

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

导入声明import Qt3D.Render 2.7
实例化 QShaderProgram

属性

方法

详细描述

ShaderProgram 类封装了一个着色器程序。着色器程序由多个不同的着色器组成,如顶点着色器和片元着色器。

Qt3D 将在着色器内省阶段自动填充一组默认的统一变量。

默认统一变量关联 Qt3D 参数名GLSL 声明
ModelMatrixmodelMatrixuniform mat4 modelMatrix;
ViewMatrixviewMatrixuniform mat4 viewMatrix;
ProjectionMatrixprojectionMatrixuniform mat4 projectionMatrix;
ModelViewMatrixmodelViewuniform mat4 modelView;
ViewProjectionMatrixviewProjectionMatrixuniform mat4 viewProjectionMatrix;
ModelViewProjectionMatrixmodelViewProjection
mvp
uniform mat4 modelViewProjection;
uniform mat4 mvp;
InverseModelMatrixinverseModelMatrixuniform mat4 inverseModelMatrix;
InverseViewMatrixinverseViewMatrixuniform mat4 inverseViewMatrix;
InverseProjectionMatrixinverseProjectionMatrixuniform mat4 inverseProjectionMatrix;
InverseModelViewMatrixinverseModelViewuniform mat4 inverseModelView;
逆视图投影矩阵inverseViewProjectionMatrixuniform mat4 inverseViewProjectionMatrix;
逆模型视图投影矩阵inverseModelViewProjectionuniform mat4 inverseModelViewProjection;
模型法线矩阵modelNormalMatrixuniform mat3 modelNormalMatrix;
模型视图法线矩阵modelViewNormaluniform mat3 modelViewNormal;
视口矩阵viewportMatrixuniform mat4 viewportMatrix;
逆视口矩阵inverseViewportMatrixuniform mat4 inverseViewportMatrix;
纵横比
(表面宽度 / 表面高度)
aspectRatiouniform float aspectRatio;
曝光exposureuniform float exposure;
伽玛gammauniform float gamma;
时间
(纳秒级别)
timeuniform float time;
眼睛位置eyePositionuniform 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 或自动开始绑定,让 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 可用以下方式实现

Parameter { name: "myColor"; value: "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));
}

属性文档

computeShaderCode : string

持有此着色器程序所使用的计算着色器代码。


computeShaderGraph : string

持有此着色器程序构建器所使用的计算着色器图的 URL。


format : enumeration

持有在 ShaderProgram 上提供的代码的格式。默认是 ShaderProgram.GLSL


fragmentShaderCode : string

持有此着色器程序所使用的片段着色器代码。


fragmentShaderGraph : string

持有此着色器程序构建器所使用的片段着色器图的 URL。


geometryShaderCode : string

持有此着色器程序所使用的几何着色器代码。


geometryShaderGraph : string

持有此着色器程序构建器所使用的几何着色器图的 URL。


log : string [只读]

持有当前着色器程序的日志。这在诊断着色器程序的编译失败时很有用。


status : enumeration [只读]

持有当前着色器程序的状态。


tessellationControlShaderCode : string

持有此着色器程序所使用的着色器代码。


tessellationControlShaderGraph : string

持有此着色器程序构建器所使用的着色器图的 URL。


tessellationEvaluationShaderCode : string

存储这个着色器程序使用的镶嵌评估着色器代码。


tessellationEvaluationShaderGraph : string

存储这个着色器程序构建器使用的镶嵌评估着色器图的URL。


vertexShaderCode : string

存储这个着色器程序使用的顶点着色器代码。


vertexShaderGraph : string

存储这个着色器程序构建器使用的顶点着色器图的URL。


方法文档

string loadSource(url sourceUrl)

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


© 2024 The Qt Company Ltd. 本文档中的文档贡献归其各自的版权所有者所有。提供的文档受GNU自由文档许可协议版本1.3的条款约束,由自由软件基金会出版。Qt和相应的标志是芬兰和/或世界其他地区The Qt Company Ltd.的商标。所有其他商标均为其各自所有者的财产。