텍스처를 부분적으로 투명하게 렌더링하는 방법은 무엇입니까?


13

Good Morning StackOverflow, openGL을 사용하여 텍스처의 일부를 투명하게 렌더링하는 방법을 찾지 못하는 것처럼 지금 약간의 문제가 있습니다.

여기 내 설정이 있습니다 : 벽을 나타내는 쿼드 가이 질감으로 덮여 있습니다 (업로드 목적으로 PNG로 변환). 분명히, 나는 유리창을 제외하고는 벽이 불투명하기를 원합니다. 벽 뒤에는 풍경을 보여주는 또 다른 비행기가 있습니다. 창문 뒤에서 풍경을보고 싶습니다. 각 텍스처는 알파 채널이있는 TGA입니다.

"가로"가 먼저 렌더링 된 다음 벽이 렌더링됩니다. 나는이 효과를 달성하는 것으로 충분하다고 생각했지만 분명히 그렇지 않습니다. 창문의 투명한 부분은 검은 색이며 벽을 지나갈 때만 풍경이 나타납니다.

GLBlendFunc ()를 활성화 한 후 바이올린을 사용하려고했지만 트릭을 수행하지 않는 것 같습니다.

중요한 단계를 잊고 있습니까?

감사합니다 :)


안녕하세요, gdse에 오신 것을 환영합니다. 태그를 거의 편집하지 않았으므로 질문에 태그를 배치하는 것을 좋아하지 않습니다 (특히 태그에서 태그를 사용하는 경우 :)). 그리고 당신의 질문에. 고정 파이프 라인 또는 자체 셰이더를 사용하고 있습니까?
— Notabene

편집 해 주셔서 감사합니다. "고정 파이프 라인"의 의미는 확실하지 않지만 모든 정점을 수동으로 빌드하고 셰이더를 사용하지 않습니다. 그것이 중요하다면 학교 할당을 위해 OpenGL의 마지막 버전을 사용하지 않습니다 (openGL 3이라고 생각합니다).
— megamoustache

사진을 질문에 포함시킬 수 있다면 좋을 것입니다. 원래 위치에서 사라진 것 같습니다.
— 또는 매퍼

답변:


19

언급 한 모든 것 (알파 채널이있는 텍스처, 벽 + 창을 그리기 전에 풍경 그리기) 외에도 두 가지 작업을 더 수행해야합니다.

먼저 OpenGL의 블렌딩 기능을 활성화해야합니다.

glEnable(GL_BLEND);

둘째, OpenGL에 블렌드 픽셀의 색상을 계산하는 방법 (OpenGL은 "단편"이라고 부름)을 알려야합니다. 이 경우 다음과 같은 간단한 것으로 괜찮을 것입니다.

glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);

블렌딩이 설정되면 OpenGL은 glBlendFunc에서 제공하는 기능 매개 변수에 따라 픽셀 색상을 결합합니다. 특히 "source.color * source.alpha + destination.color * (1-source.alpha)"를 수행합니다. 여기서 "source"는 현재 렌더링중인 텍스처이고 "destination"은 프레임 버퍼 (가로). 따라서 알파 채널이 흰색이면 벽 색상이, 알파 채널이 검은 색이면 풍경 색상이 표시됩니다. 알파 채널이 회색이면 두 색상 사이에 약간의 크로스 페이드가 나타납니다.

창이 완전히 투명하면 다른 방법으로 두 다각형을 그리는 순서는 중요하지 않지만 알파 임계 값과 같은 고급 개념이 시작됩니다. 현재 상황에 필요하지 않을 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.