2009-03-16 15 views
0

Ich versuche, eine Cubemap zu machen, und ich fand Anweisungen hier: http://www.opengl.org/wiki/GL_EXT_framebuffer_object#Quick_example.2C_render_to_texture_.28Cubemap.29Wie kann ich auf eine Cubemap rendern?

glGenTextures(1, &color_tex); 
glBindTexture(GL_TEXTURE_CUBE_MAP, color_tex); 
glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); 
glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); 
glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_R, GL_CLAMP_TO_EDGE); 
glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_MIN_FILTER, GL_NEAREST); 
glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_MAG_FILTER, GL_NEAREST); 
//NULL means reserve texture memory, but texels are undefined 
glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X+0, 0, GL_RGBA8, 256, 256, 0, GL_BGRA, GL_UNSIGNED_BYTE, NULL); 
glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X+1, 0, GL_RGBA8, 256, 256, 0, GL_BGRA, GL_UNSIGNED_BYTE, NULL); 
glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X+2, 0, GL_RGBA8, 256, 256, 0, GL_BGRA, GL_UNSIGNED_BYTE, NULL); 
glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X+3, 0, GL_RGBA8, 256, 256, 0, GL_BGRA, GL_UNSIGNED_BYTE, NULL); 
glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X+4, 0, GL_RGBA8, 256, 256, 0, GL_BGRA, GL_UNSIGNED_BYTE, NULL); 
glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X+5, 0, GL_RGBA8, 256, 256, 0, GL_BGRA, GL_UNSIGNED_BYTE, NULL); 
//------------------------- 
glGenFramebuffersEXT(1, &fb); 
glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, fb); 
//Attach one of the faces of the Cubemap texture to this FBO 
glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT, GL_TEXTURE_CUBE_MAP_POSITIVE_X, color_tex, 0); 
//------------------------- 
glGenRenderbuffersEXT(1, &depth_rb); 
glBindRenderbufferEXT(GL_RENDERBUFFER_EXT, depth_rb); 
glRenderbufferStorageEXT(GL_RENDERBUFFER_EXT, GL_DEPTH_COMPONENT24, 256, 256); 
//------------------------- 
//Attach depth buffer to FBO 
glFramebufferRenderbufferEXT(GL_FRAMEBUFFER_EXT, GL_DEPTH_ATTACHMENT_EXT, GL_RENDERBUFFER_EXT, depth_rb); 

ich die Art und Weise wie oben beschrieben ein Gesicht eines Cubemap zu einem fbo zu binden, aber einen Fehler GL_FRAMEBUFFER_UNSUPPORTED_EXT bekam. Ich frage mich, ob dies daran liegt, dass meine Grafikkarte diese Funktion nicht unterstützt oder dass es in meinem Code einige Fehler gibt?

Und ist es möglich, dass ich auf 6 separate 2d fbo Texturen rendere und eine Cubemap mit diesen Texturen erstelle?

Dank

Antwort

4

This page definiert die Funktion isExtensionSupported(), die Sie nutzen könnten. Es ist (sehr) eine gute Übung, zur Laufzeit alle Extensions zu testen, von denen Ihr Code abhängt.

Nur weil es gebaut, d. H. Ihre Header definiert die erforderlichen Erweiterungen, bedeutet nicht, dass die Binärdatei nicht auf einem System mit einem anderen Satz von unterstützten Erweiterungen endet.

Es ist eine gute Idee, eine bekannte, getestete Funktion auszuwählen, um auf Erweiterungen zu testen, oder Zeit zu investieren, um die subtilen Probleme zu verstehen, die auftreten können, wenn der Test nicht richtig codiert ist. Dies hat hauptsächlich mit Teilstrings zu tun und erzeugt keine falschen Präfixtreffer.

+0

Danke für Ihre Beratung, mein Programm ist jetzt alles in Ordnung :) –

Verwandte Themen