У меня есть этот вершинный шейдер в GLSL, который я использую с пользовательским эффектом / материалом Qt3D :
attribute vec3 vertexPosition;
attribute vec3 vertexNormal;
varying vec3 worldPosition;
varying vec3 worldNormal;
uniform mat4 modelMatrix;
uniform mat3 modelNormalMatrix;
uniform mat4 modelViewProjection;
void main()
{
worldNormal = normalize( modelNormalMatrix * vertexNormal );
worldPosition = vec3( modelMatrix * vec4( vertexPosition, 1.0 ) );
gl_Position = modelViewProjection * vec4( vertexPosition, 1.0 );
}
Я понимаю, что varying
данные (out
данные в более новых версиях, если GLSL) передаются из моего вершинного шейдера в фрагмента шейдера.
Могу ли я перейти между шейдерными вершинными фрагментами и получить доступ к данным varying
/ out
в моем коде C ++?Есть ли практический пример, на который я могу сослаться?
Моя цель - обнаруживать и получать глобальные / мировые позиции с определенным условием, например, иметь z
, который больше 10
, как показано ниже,Мне нужно иметь доступ к этим z > 10
позициям в моем коде C ++.
// ...
varying vec3 higherThanTen;
// ...
void main()
{
// ...
if ( worldPosition.z > 10 ) {
higherThanTen = worldPosition;
}
// ...
}