2010-05-03 46 views
6

Tôi gặp sự cố khi hiển thị kết xuất và khung hình chữ nổi framebuffer với OpenGLES trên iPhone.Hiển thị kết cấu hoặc framebuffer ngoài màn hình

alt text http://j.imagehost.org/0923/IMG_0020.pngalt text http://j.imagehost.org/0725/IMG_0019.png

hình ảnh đầu tiên cho thấy gạch mạt chược render để CAEAGLLayer trực tiếp và điều này là đúng. Thứ hai hiển thị các ô được hiển thị cho bộ đệm khung hình ngoài màn hình, được sao chép vào kết cấu bằng cách sử dụng glCopyTexImage2D và kết cấu được hiển thị là CAEAGLLayer. Cả hai đều sử dụng quad trắng đục cho nền. Tôi cũng đã thử render trực tiếp đến texture nhưng hiệu ứng lại giống với framebuffer ngoài màn hình.

Mã của tôi để tạo bộ đệm khung:

GLuint framebuffer; 
    glGenFramebuffersOES(1, &framebuffer); 
    glBindFramebufferOES(GL_FRAMEBUFFER_OES, framebuffer); 

    GLuint renderbuffer; 
    glGenRenderbuffersOES(1, &renderbuffer); 
    glBindRenderbufferOES(GL_RENDERBUFFER_OES, renderbuffer); 
    glRenderbufferStorageOES(GL_RENDERBUFFER_OES, GL_RGB8_OES, 
      512, 512); 

    glFramebufferRenderbufferOES(GL_FRAMEBUFFER_OES, GL_COLOR_ATTACHMENT0_OES, 
      GL_RENDERBUFFER_OES, renderbuffer);

tôi vẽ tất cả gạch từ một bản đồ kết cấu với một cuộc gọi đến glDrawElements sử dụng VBO để thông qua dữ liệu xen kẽ đỉnh (tọa độ, kết cấu phối hợp, màu sắc). Tôi sử dụng định dạng kết cấu RGBA8888, vẽ từng hình ảnh trên hai hình tam giác (quad) với chức năng hòa trộn glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA). Tôi không sử dụng bộ đệm độ sâu (trong mọi trường hợp).

Ai đó có thể cho tôi biết vấn đề có thể là gì không?

+1

là gì không chính xác về những hình ảnh render? Bạn mong đợi họ trông như thế nào? – Frogblast

+0

@Frogblast Phần đầu tiên, không được hiển thị cho bộ đệm khung và kết cấu không chính xác, là chính xác. – sfider

+0

Không đủ mã được hiển thị. Các FBO có lẽ không phải là vấn đề. – karx11erx

Trả lời

0

Có vẻ như bạn chưa đăng đủ mã nhưng từ những gì được đăng, có vẻ như bạn đã hợp nhất với nhau vai trò của kết cấu và biểu tượng kết xuất trong FBO của bạn. (tiêu đề bài viết của bạn cho biết kết xuất thành texture) Bạn cũng quên xác định bộ đệm vẽ của mình.

Bộ đệm kết xuất được gắn với FBO thường được sử dụng làm Bộ đệm độ sâu. Vì vậy hãy thử như sau:

GLuint framebuffer; 
glGenFramebuffersOES(1, &framebuffer); 
glBindFramebufferOES(GL_FRAMEBUFFER_OES, framebuffer); 

//set up the Depth Buffer 
GLuint renderbuffer; 
glGenRenderbuffersOES(1, &renderbuffer); 
glBindRenderbufferOES(GL_RENDERBUFFER_OES, renderbuffer); 
glRenderbufferStorageOES(GL_RENDERBUFFER_OES, GL_DEPTH_COMPONENT24, 
     512, 512); 

glFramebufferRenderbufferOES(GL_FRAMEBUFFER_OES, GL_DEPTH_ATTACHMENT, 
     GL_RENDERBUFFER_OES, renderbuffer); 
//set up the texture that you will be rendering to 
glActiveTexture(GL_TEXTURE0); 
GLuint textureID; 
glGenTextures(1, &textureID); 
glBindTexture(GL_TEXTURE_2D, textureID); 
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); 
//add various other texture parameters here 
glTexStorage2D(GL_TEXTURE_2D, 1, GL_RGB8_OES, 512,512); 
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, textureID, 0); 
// define your draw buffers 
GLenum drawBuffers[1] = {GL_COLOR_ATTACHMENT0}; 
glDrawBuffers(1, drawBuffers); 

hy vọng rằng sẽ giúp

Các vấn đề liên quan