2011-01-13 7 views
1

8 비트 알파 채널이있는 텍스처를 렌더링하는 데 문제가 있습니다. 즉, 1 비트로 병합되고 glBlendFunc()가 아무 것도하지 않는 것처럼 보입니다. 하는 장면 뒤에 설정 한 OpenGL은 상태의 다양성, 그 중 분명 하나있다OpenGL 멀티 비트 알파 텍스처

glEnable(GL_BLEND); 
glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA); 


glBegin(GL_QUADS); 
{ 

    glTexCoord2f(0, 0); 
    glVertex2f(0, 0); 

    glTexCoord2f(1, 0); 
    glVertex2f(356, 0); 

    glTexCoord2f(1, 1); 
    glVertex2f(356, 356); 

    glTexCoord2f(0, 1); 
    glVertex2f(0, 356); 

}

glEnd(); 

말할 필요 : 여기

는 직접 모드 통화입니다

블렌딩 단계를 방해 할 수 있다는 것을 모르는 상태가 있습니까?

나는 blendfunc가 맞습니까? 그건 내가 봤어 인터넷 페이지에서 올바른 것 - 나는 GDEBugger에서 텍스처를 확인했습니다 그래서 이미지가 확실히 8 비트 알파 채널로로드되었습니다뿐만 아니라 알파 채널과 하나의 비트와 함께 이미지를 시도하고있다 알파 채널.

도움이 될 것입니다.


편집 :

답변에 대응 : 나는 토양 이미지 로딩 라이브러리를 사용하고, 나는거야 소스를 통해 살펴보고이 일을하는 방법을 참조하십시오. 지금 당장은 이미 렌더링 된 장면 위에이 이미지를 렌더링 할뿐입니다. 실제로는 깊이 문제에 직면하지 않았습니다. 사실 깊이 버퍼 테스트가 꺼져 있습니다.

+1

잘 보이는, 어떤 제대로 보이지 않습니다 당신의 질감 코드, 당신의 glTexImage2D 호출을 게시 할 수 있습니다. –

+0

내가 말했듯이, 그것은 라이브러리를 거치며 - 알파 이미지 로더 예제를 찾고 시도해 볼 수도 있습니다 - 정적으로 재 빌드하고 디버깅해야합니다 – Tomas

+0

gDEBugger에서 볼 수 있듯이 모든 것이 순서대로 보입니다 - 이미지에 GL_COMPRESSED_ST3C_RBGA_DXT5_EXT 형식이 있습니다. – Tomas

답변

1

투명도는 가장 먼 것부터 가장 가까운 것으로 분류 된 프리미티브가있는 혼합 함수 (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA)를 사용하여 가장 잘 구현됩니다.

폴리곤이 맨 앞으로 정렬되는지 확인합니다. 그렇지 않으면 블렌딩이 잘못된 효과를 갖습니다.

텍스처를로드 할 때 glTexImage2D 호출이 GL_RGBA 또는 GL_BGRA를 사용하는지 확인해야합니다.

편집 : 또한

, glEnable (GL_ALPHA_TEST)와 glAlphaFunc를 사용하여 알파 기능을 설정해야합니다.

http://www.gamedev.net/topic/105082-glalphafunc/

+0

알파 테스트였습니다. 이봐 요, 그게 가능하도록 맹세 했어. 오 잘. – Tomas

0

또 다른 중요한 부분을 게시하지 않았습니다. 즉, 질감을 만들고 구성한 방법입니다. 그리고 문제는 당신이 게시 한 코드가 아니라 거기에 있다고 생각합니다.

위의 경우에 블렌드를 작동 시키려면 텍스처에 알파 채널을 설정해야합니다.