Ich habe versucht, Shadow-Mapping für eine lange Zeit zu implementieren, und ich verwende Lance Williams 'Technik (die die Szene zweimal rendert, einmal im Lichtraum und einmal im Ansichtsraum). Jedoch, wenn ich glCheckFramebufferStatus
auf GL_FRAMEBUFFER
rufe, bekomme ich GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT
, nach Ich habe glFramebufferTexture2D
darauf genannt. Ich bin verwirrt, weil dieser Fehler ausgelöst wird, wenn keine Textur oder renderbuffer an den Framebuffer angeschlossen ist, aber ich denke, dass ich do eine Textur anhängen.Get GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT mit Tiefentexturierung
Hier ist mein Code in init
laufen:
gl.glEnable(GL2.GL_TEXTURE_2D);
// generate stuff
IntBuffer ib = IntBuffer.allocate(1);
gl.glGenFramebuffers(1, ib);
frameBuffer = ib.get(0);
gl.glBindFramebuffer(GL2.GL_FRAMEBUFFER, frameBuffer);
ib = IntBuffer.allocate(1);
gl.glGenTextures(1, ib);
depthTexture = ib.get(0);
gl.glBindTexture(GL2.GL_TEXTURE, depthTexture);
// prevents 'shadow acne'
gl.glPolygonOffset(2.5f, 0);
// prevents multiple shadows
gl.glTexParameteri(GL2.GL_TEXTURE_2D, GL2.GL_TEXTURE_WRAP_S, GL2.GL_CLAMP_TO_EDGE);
gl.glTexParameteri(GL2.GL_TEXTURE_2D, GL2.GL_TEXTURE_WRAP_T, GL2.GL_CLAMP_TO_EDGE);
// prevents (or expects!!!) pixel-y textures
gl.glTexParameteri(GL2.GL_TEXTURE_2D, GL2.GL_TEXTURE_MIN_FILTER, GL2.GL_NEAREST);
gl.glTexParameteri(GL2.GL_TEXTURE_2D, GL2.GL_TEXTURE_MAG_FILTER, GL2.GL_NEAREST);
// store one value in all four components of pixel
gl.glTexParameteri(GL2.GL_TEXTURE_2D, GL2.GL_DEPTH_TEXTURE_MODE, GL2.GL_INTENSITY);
gl.glFramebufferTexture2D(GL2.GL_FRAMEBUFFER, GL2.GL_DEPTH_ATTACHMENT, GL2.GL_TEXTURE_2D, depthTexture, 0);
gl.glTexImage2D(GL2.GL_TEXTURE_2D, 0, GL2.GL_DEPTH_COMPONENT16, 1024, 1024, 0, GL2.GL_DEPTH_COMPONENT, GL2.GL_FLOAT, null);
gl.glDrawBuffer(GL2.GL_NONE);
gl.glReadBuffer(GL2.GL_NONE);
int FBOStatus = gl.glCheckFramebufferStatus(GL2.GL_FRAMEBUFFER);
// FBOStatus == GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT
EDIT: Ich auch diese Methode in einem praktisch leeren Projekt lief (den Fehler zu werfen)
Was bedeutet '(GL2.GL_TEXTURE_2D, GL2.GL_DEPTH_TEXTURE_MODE, GL2.GL_INTENSITY) '? Wie verwenden Sie "INTENSITÄT" als Modus? –
Es sollte alle vier Komponenten des Ausgabevektors auf einen Wert setzen. – clabe45