我使用着色和離屏渲染來實現OpenGL上QUADS的選擇工具。但是深度測試似乎不適用於離屏渲染以及某些角度和旋轉,選擇了前面一個的QUAD。關於如何設置我的緩衝區和/或附件的任何想法? 這個問題與我的法線有什麼關係?或者只是深度測試?我個人認爲這是深度測試,我只是無法得到該死的東西工作!爲什麼深度測試不適用於顏色選擇的離屏渲染?
這裏是緩衝區我的初始化函數:
public void init(final GL2 gl) {
// setup
gl.glGenFramebuffers(frameBufferIds.capacity(), frameBufferIds);
gl.glGenRenderbuffers(renderBufferIds.capacity(), renderBufferIds);
gl.glBindRenderbuffer(GL2.GL_RENDERBUFFER, renderBufferIds.get(0));
//
ViewPort viewPort = ViewPort.getCurrent(gl);
gl.glRenderbufferStorage(GL2.GL_RENDERBUFFER, GL2.GL_RGBA, viewPort.getWidth(), viewPort.getHeight());
/**
* Comment 1
*/
// gl.glRenderbufferStorage(GL2.GL_RENDERBUFFER, GL2.GL_DEPTH_COMPONENT, viewPort.getWidth(), viewPort.getHeight());
// attach the render buffer to color attachment point
gl.glBindFramebuffer(GL2.GL_FRAMEBUFFER, frameBufferIds.get(0));
gl.glFramebufferRenderbuffer(GL2.GL_FRAMEBUFFER, GL2.GL_COLOR_ATTACHMENT0, GL2.GL_RENDERBUFFER, renderBufferIds.get(0));
/**
* Comment 2
*/
// gl.glFramebufferRenderbuffer(GL2.GL_FRAMEBUFFER, GL2.GL_DEPTH_ATTACHMENT, GL2.GL_RENDERBUFFER, renderBufferIds.get(0));
//
if (gl.glCheckFramebufferStatus(GL.GL_FRAMEBUFFER) != GL2.GL_FRAMEBUFFER_COMPLETE) {
System.out.println("Render Buffer problem!");
}
}
當我去掉了「備註1」和「評論2」的部分,我得到一個渲染緩衝問題。但我聽說除了顏色附件之外,我應該給「GL_DEPTH_ATTACHMENT」附加一個渲染緩衝區。「 。(來源:Look at this Q我不知道我該怎麼做
而且,這裏是我的使用代碼:
gl.glDisable(GL2.GL_DITHER);
// 1. render in offscreen
init(gl);
gl.glEnable(GL2.GL_DEPTH_TEST);
offscreenRender(gl, selectionType);
// 2. read pixel
gl.glReadBuffer(GL2.GL_DEPTH_ATTACHMENT);
gl.glReadBuffer(GL2.GL_COLOR_ATTACHMENT0);
gl.glReadPixels((int) (pos.x - pickWidth/2), (int) (viewPort.getHeight() - pos.y - pickWidth/2), pickWidth, pickWidth, GL2.GL_RGBA, GL2.GL_FLOAT, pointSelectionPixels);
謝謝你的回答! 我在「評論1」和「評論2」部分做了這個,它不起作用! –