OpenGLでQUADSの選択ツールを実装するために、カラーリングとオフスクリーンレンダリングを使用しています。ただし、深度テストはオフスクリーンレンダリングでは機能しないようで、特定の角度と回転では、前面のQUADが選択されます。バッファや添付ファイルをどのように設定する必要があるかについて何か考えはありますか?この問題は私の法線と関係がありますか?それとも単に深度テストですか?個人的には深度テストだと思いますが、いまいましいことはうまくいきません!!!
バッファ用のMyinit関数は次のとおりです。
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にアタッチする」必要があると聞きました。(出典:この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);