最新のOpenGLバージョンでOpenCSGを再実装しました。MSAAによるアンチエイリアシングの問題、深さとFBOでCSGを描画する
PixelFormatAttributes:
NSOpenGLPFAColorSize , 24 ,
NSOpenGLPFAAlphaSize , 8 ,
NSOpenGLPFADepthSize , 32 ,
NSOpenGLPFAStencilSize , 8 ,
NSOpenGLPFAAccelerated ,
NSOpenGLPFADoubleBuffer ,
NSOpenGLPFASupersample ,
NSOpenGLPFASampleBuffers, 1 ,
NSOpenGLPFASamples , 4 ,
FBO仕様:(マルチサンプルとFBOにレンダリングしようとしたが、ラインはより強く、目に見えるなって、一番下のスクリーンショットに見て)
- 2のべき乗で作成したテクスチャ、 GL_RGBA(試みGL_RGBA8とGL_RGBA32F)
- GL_DEPTH24_STENCIL8(GL_DEPTH32_STENCIL8、無結果を試みた)
単にアルゴリズムGoldfeather:シェーダで
while (i < depth complexity) {
take channel for render
merge layers if no free channel
render each layer with stencil func, mask and depth params to channel (FBO)
}
merge layers (taking texture from FBO and render objects again with applying shader below)
私がマージするためのコードを持っている(FBOからの結果テクスチャOpenCSG it's setupProjectiveTextureに、試験のためのレンダリングの上に重なる):
vec2 ndcPos = gl_FragCoord.xy/sizetexture.xy;
vec4 maskColor = texture2D(maskTexture, ndcPos.xy);
if (maskColor[channel] < 0.5) {
discard;
}
FBOが十分なテクスチャを得ていないか、適切なサイズになっていないように見えます。
EDIT:
これらの線はメッシュのみを減算した場所が重複して表示されます。
EDIT 2:
非MSAA FBOにレンダリングし、結果にFXAAを適用すると修正されました。
32ビットカラーバッファ+ 8ビットアルファが私に特に珍しくありません。通常、ピクセルフォーマットは、32ビット(未使用の8ビット)RGB + 0 Aまたは24ビットRGB + 8ビットA、ほとんど決して32ビットRGB + 8ビットA(40ビットカラーを生成する)バッファ)。 CGLは最も近いフォーマットにマッチするので、違いはありませんが、根本的に奇妙なものを求めています。 –
@ AndonM.Coleman実際にあなたは正しい、変更されます!しかし、それは私の問題を解決しませんでした。私は類似の問題を解決する方法に関するいくつかの記事を見つけました: 1. http://www.alphanew.net/index.php?section=articles&site=multisampling 2. http://mtnphil.wordpress.com/2013/06/ 26/know-your-ssao-artifacts/ 私はネイティブスピーカーではないので、完全に理解しにくいです。多分後で分かるでしょう。 – SAKrisT
ちなみに、あなたのピクセルフォーマットに 'Supersample'を指定すると、MSAAではなくSSAAをGLに求めています。これはOS Xです。私は、ソフトウェアレンダラーだけがスーパーサンプリングをサポートするOS X上でハードウェアアクセラレーションされたピクセルフォーマットに遭遇したことはありません。私はあなたのピクセル形式からもそれを削除することをお勧めします。この時点でこれはかなり厄介なものになっていますが、問題の唯一の情報は現在あなたのピクセル形式に関連しているので... :) –