Qt3DRender::QShaderProgram Class
class Qt3DRender::QShaderProgram셰이더 프로그램을 캡슐화합니다. 더 보기...
| 헤더: | #include <qshaderprogram.h> |
| 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 선언 |
|---|---|---|
| ModelMatrix | modelMatrix | uniform mat4 modelMatrix; |
| ViewMatrix | viewMatrix | uniform mat4 viewMatrix; |
| 투영 행렬 | projectionMatrix | uniform mat4 투영행렬; |
| 모델 뷰 행렬 | modelView | uniform mat4 modelView; |
| ViewProjectionMatrix | viewProjectionMatrix | uniform mat4 뷰투영행렬; |
| ModelViewProjectionMatrix | modelViewProjection mvp | uniform mat4 modelViewProjection; uniform mat4 mvp; |
| InverseModelMatrix | inverseModelMatrix | uniform mat4 inverseModelMatrix; |
| InverseViewMatrix | 역뷰 행렬 | uniform mat4 inverseViewMatrix; |
| 역투영 행렬 | 역투영 행렬 | uniform mat4 inverseProjectionMatrix; |
| InverseModelViewMatrix | inverseModelView | uniform mat4 inverseModelView; |
| 역 뷰 투영 행렬 | 역 뷰 투영 행렬 | uniform mat4 inverseViewProjectionMatrix; |
| 역모델 뷰 투영 행렬 | 역모델뷰투영행렬 | uniform mat4 inverseModelViewProjection; |
| 모델 법선 행렬 | modelNormalMatrix | uniform mat3 모델법선행렬; |
| 모델 뷰 법선 행렬 | modelViewNormal | uniform mat3 modelViewNormal; |
| 뷰포트 행렬 | 뷰포트 행렬 | uniform mat4 뷰포트 행렬; |
| InverseViewportMatrix | inverseViewportMatrix | uniform mat4 inverseViewportMatrix; |
| AspectRatio (표면 너비 / 표면 높이) | aspectRatioxml-ph-0000@deepl.internal (표면 너비 / 표면 높이) uniform float aspectRatio; | uniform float aspectRatio; |
| 노출 | 노출 | uniform float exposure; |
| 감마 | 감마 | 균일한 부동소수점 감마; |
| 시간 (나노초 단위) | time | uniform float time; |
| EyePosition | 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부터 시작하거나 '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));
}멤버 유형 설명서
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 : QString
현재 셰이더 프로그램의 로그를 저장합니다. 이는 셰이더 프로그램의 컴파일 오류를 진단하는 데 유용합니다.
액세스 함수:
| QString | log() const |
알림 신호:
| void | logChanged(const QString &log) |
[read-only] status : 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) |
알림 신호:
| 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
현재 셰이더 프로그램의 상태를 반환합니다.
참고: status 속성에 대한게터 함수입니다.
© 2026 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.