Tôi đang hiển thị đối tượng framebuffer ngoài khung hình OpenGL và muốn lưu nó dưới dạng hình ảnh. Lưu ý rằng FBO lớn hơn kích thước hiển thị. Tôi có thể đưa vào bộ đệm ngoài màn hình và sử dụng nó làm kết cấu, hoạt động. Tôi có thể "cuộn" texture lớn hơn này qua màn hình bằng cách sử dụng một offset, điều này làm tôi tự tin, rằng tôi render vào một bối cảnh lớn hơn cửa sổ.vấn đề tiết kiệm openGL FBO lớn hơn cửa sổ
Nếu tôi lưu bộ đệm ngoài màn hình vào một tệp hình ảnh, nó luôn bị cắt. Các đoạn mã cho tiết kiệm là:
void ofFBOTexture::saveImage(string fileName) {
glReadBuffer(GL_COLOR_ATTACHMENT0_EXT);
// get the raw buffer from ofImage
unsigned char* pixels = imageSaver.getPixels();
glReadPixels(0, 0, 1024, 1024, GL_RGB, GL_UNSIGNED_BYTE, pixels);
imageSaver.saveImage(fileName);
}
Xin lưu ý, rằng nội dung hình ảnh được cắt, phần nhìn thấy được lưu một cách chính xác (có nghĩa là không có lỗi trong các định dạng pixel, vấn đề GL_RGB vv), nhưng không gian còn lại là đầy một màu.
Vì vậy, câu hỏi của tôi là - tôi đang làm gì sai?
Tôi đang gặp vấn đề tương tự như bạn. Bạn có thể mở rộng về cách bạn có được biến fbo không? Tôi không thể tìm thấy những gì cần đưa vào để truy cập glGenFrameBuffers, đó là những gì tôi nghĩ được sử dụng. –
1. đây là một mô tả tốt: http://www.songho.ca/opengl/gl_fbo.html – razong
2. GLuint fbo; glGenFramebuffersEXT (1, &fbo); // 1 == số fbo để tạo glBindFramebufferEXT (GL_FRAMEBUFFER_EXT, fbo); – razong