문제

이전 프로젝트를 새로운 Qt5 OpenGL 클래스로 포팅하려고 합니다.FBO를 사용하여 텍스처를 렌더링하고 싶습니다.이전 코드에서는 필요에 따라 FBO에 연결하는 여러 텍스처를 활용했습니다.따라서 특정 텍스처 개체를 연결하고, 렌더링을 수행하고, 다른 텍스처를 연결하고, 다른 작업을 수행하고, 새로 연결된 텍스처에 출력을 렌더링하는 등의 작업을 수행합니다.

Qt5 OpenGL 클래스를 사용하여 이 작업을 어떻게 수행할지 궁금합니다.예를 들어, 특정 항목을 첨부하는 방법을 알 수 없습니다. QOpenGLTexture a에 이의를 제기하다 QOpenGLFrameBufferObject 그래서 나는 그것에 렌더링할 수 있습니다.나는 거기에 있다는 것을 알 수 있다 texture() 방법과 takeTexture() 방법.하지만 둘 다 텍스처 ID만 반환합니다.또한 활성 텍스처 단위를 어떻게 변경할 수 있나요?예를 들어, 셰이더 프로그램의 두 텍스처에서 샘플링하고 싶습니다.따라서 두 개의 텍스처를 서로 다른 텍스처 단위에 바인딩해야 합니다.

명확히 하자면, 새 API에서 제가 겪고 있는 주요 문제는 QOpenGLFrameBufferObject 그것은 a를 반환할 것이다 QOpenGLTexture 물체.오직 toImage() 방법과 texture() 그리고 takeTexture() 행동 양식.그냥 구축해도 될 것 같아요 QOpenGLTexture 사용하여 QImage 에서 돌아왔다 toImage().하지만 그게 효율적일지는 잘 모르겠습니다.

에 관해서는 texture() 그리고 takeTexture(), 새 클래스를 사용하여 반환 값을 어떻게 사용할 수 있는지 모르겠습니다.

도움이 되었습니까?

해결책

예, QOpenGLFrameBufferObject는 QOpenGLTexture보다 우선하므로 QOpenGLTexture를 사용하거나 노출하지 않습니다.추가해야 하지만 실제로는 QOpenGLFBO를 여러 첨부 파일을 지원하도록 다시 작성해야 합니다.

이 외에도 GL 호출을 수동으로 사용할 때의 문제점은 무엇입니까?

GLuint textureId = fbo->texture();
glActiveTexture(GL_TEXTURE4);
glBindTexture(GL_TEXTURE_2D, textureId);

glActiveTexture(GL_TEXTURE9);
glBindTexture(GL_TEXTURE_3D, anotherTexture);

QOpenGLTexture *yetAnother = getTexture();
yetAnother->bind(2);

program->setUniformValue("samplerForTheFBOTexture", GL_TEXTURE4 - GL_TEXTURE0);
program->setUniformValue("my3dSampler", GL_TEXTURE9 - GL_TEXTURE0);
program->setUniformValue("anotherSampler", 2);
// or use layout (binding = ) in GLSL

등.

다른 팁

QOpenGLFramebufferObject에 대한 다중 렌더링 대상(MRT)을 지원하기 위해 Qt bugtracker에 기능 요청을 추가했습니다.현재 진행 중이며 코드 검토만 보류 중인 것으로 보입니다.

https://bugreports.qt.io/browse/QTBUG-39235

따라서 향후 Qt 버전의 변경 로그를 계속 지켜봐 주시기 바랍니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top