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


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.