Не уверен, если у вас есть такая же проблема, но я также использую VTK через vtkExternalOpenGLRenderWindow
рендеринг в QQuickFramebufferObject
, и у меня были проблемы с прозрачностью.Я пытался включить поддержку глубинного пилинга, но это не сработало.Для меня это было все черное (не красное).В любом случае, я не включил глубинный пилинг и сделал следующее.
Вы, должно быть, создали класс Renderer, унаследованный от QQuickFramebufferObject::Renderer
.Этот класс создает объект кадрового буфера.Обратите внимание, что по умолчанию FBO создается без каких-либо вложений, что означает, что тесты глубины и трафарета OpenGL не будут работать при рендеринге в объект кадрового буфера без каких-либо буферов глубины или трафарета (прозрачные объекты не будут отображаться правильно).Но вы можете настроить создание этого фрейм-буфера, переопределив createFramebufferObject
:
QOpenGLFramebufferObject * createFramebufferObject( const QSize & p_size ) override
{
// If the GL_EXT_packed_depth_stencil extension is present, a combined depth and stencil buffer is attached.
// If the extension is not present, only a depth buffer is attached.
QOpenGLFramebufferObjectFormat format;
format.setAttachment( QOpenGLFramebufferObject::CombinedDepthStencil );
return new QOpenGLFramebufferObject( p_size, format );
}
Это решило мои проблемы с прозрачностью.Надеюсь, это поможет.