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에서 투명도가 적용된 개체를 정상적으로 반영하는 방법에 대하여 알아보았습니다.
C# WPF ListBox의 TextBox중 하나에 Focus가 걸렸을 때 찾는 방법 (0) | 2023.05.24 |
---|---|
WPF ''{DependencyProperty.UnsetValue}'은(는) 'Background' 속성의 올바른 값이 아닙니다.' 오류 해결 방법 기록 (0) | 2022.11.24 |
WPF에서 Rhino의 3dm 파일 불러오는 방법 (2) | 2022.05.17 |
WPF에 Winform 컨트롤 가져오기 (0) | 2022.02.20 |
WPF의 그라디언트(그라데이션) 관련 xaml 코드 분석 (0) | 2020.12.10 |
댓글 영역