상세 컨텐츠

본문 제목

WPF에서 도형의 투명도가 적용이 안될 때 해결 방법

프로그래밍/WPF

by TickTack 2022. 5. 19. 14:56

본문

WPF에서 코드로 도형을 그렸는데 투명도를 적용하고 싶어서 코드로 적용했지만

분명 디버깅해보면 아래와 같이 투명도 값은 적용이 되었는데 가려진 부분이 투과되어 보이지 않는 현상이 생깁니다.

3D를 그리다보니 발견한 현상인데 2D에서는 투명도를 코드로 적용할일이 없어서 확인해보지 않았습니다.

 

그려진 도형이 가려져있는 모습

 

위 사진의 분홍색 도형 밑에 또다른 도형들이 있어서 투명도를 적용하여 보여주려 했지만 가려져서 보이지 않습니다.

먼저 해당 현상의 원인은 WPF가 도형을 그릴 때 투명도 처리를 제대로 못(?) 하기 때문입니다.

따라서 투명도가 적용된 도형을 가장 마지막에 그려주어야 하는데요.

아래는 그릴 때 사용한 코드입니다. 저는 3D를 그렸기 때문에 명칭에 3D가 들어간 것입니다.

적용하는 방식은 개인에 따라 다르니 참고용으로 활용하시면 됩니다.

 

model3DGroup.Children.Add(geometryModel3DData.Model3DData);

 

위와 같이 단순하게 적용된 코드를 아래처럼 바꿔주고

 

// 투명도가 적용된 개체는 마지막에 적용해야 함.
if (diffuseMaterial.Brush.Opacity == 1)
{
    model3DGroup.Children.Add(geometryModel3DData.Model3DData);
}
else
{
    opacityModel3DGroupList.Add(geometryModel3DData);
}

 

아래처럼 마지막 부분에 따로 빼놓은 투명도가 있는 개체들을 적용하는 코드를 추가해주면 됩니다.

 

for (int i = 0; i < opacityModel3DGroupList.Count; i++)
{
    model3DGroup.Children.Add(opacityModel3DGroupList[i].Model3DData);
}

 

그렇게하면 투명도가 적용된 개체는 가장 마지막에 그려지게되고 정상적으로 아래와 같이 적용됩니다.

 

 

이상으로 WPF에서 투명도가 적용된 개체를 정상적으로 반영하는 방법에 대하여 알아보았습니다.

관련글 더보기

댓글 영역