최신 OpenGL 버전에 OpenCSG을 다시 구현했습니다.깊이 및 FBO로 CSA 그리기 MSAA의 앤티 앨리어싱 문제
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 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
그건 그렇고, 픽셀 형식에서 '슈퍼 샘플'을 지정하면 GL에 MSAA 대신 SSAA를 묻습니다. 이것은 OS X입니다. 필자는 수퍼 샘플링을 지원하는 OS X에서 하드웨어 가속화 픽셀 포맷을 만난 적이 없으며 소프트웨어 렌더러 만 지원합니다. 나는 당신도 당신의 픽셀 형식에서 그것을 제거하는 것이 좋습니다 것입니다. 이 시점에서 이것은 꽤 까다로워지고 있습니다 만, 문제의 유일한 정보가 픽셀 형식과 관련되어 있기 때문에 ... :) –