programing

WPF 3D는 복잡한 애플리케이션을 위한 DirectX와 OpenGL의 좋은 대안입니까?

linuxpc 2023. 5. 11. 21:08
반응형

WPF 3D는 복잡한 애플리케이션을 위한 DirectX와 OpenGL의 좋은 대안입니까?

저는 WPF의 3D 기능을 학습과 몇 가지 구현을 위해 사용해 보았는데, 매우 능력이 있다는 것을 알게 되었고 DirectX 11도 배우고 있는데 WPF에서 3D 수업을 사용하는 것에 비해 매우 까다롭습니다.저는 WPF 3D를 매우 기본적인 용도로만 사용해 왔습니다. 제 질문은 다음과 같습니다.

WPF 3D가 DirectX 및 OpenGL의 대안이 되는 3D 모델링 도구, 게임 엔진 및 3D 시뮬레이션 등과 같은 고급 응용 프로그램에도 똑같이 좋습니까?

같은 리그에 다른 것이 있다면 그것도 언급해주세요.

좋은 질문입니다.답은 그것이 달렸다는 입니다!

몇 년 전에 OpenGL에서 CAD 스타일의 3D 렌더링 애플리케이션을 개발했습니다.여기에는 최대 1,000,000개의 물체가 있는 석유 굴착 장치의 CAD 모델이 표시되어야 했고 사용자가 세부사항을 바로 확대하거나 축소하거나 물체를 이동할 수 있어야 했습니다.WPF는 너무 느리기 때문에 이러한 유형의 애플리케이션에 적합하지 않을 것이라고 확신할 수 있습니다.이 애플리케이션은 C++/CLI를 사용하여 개발되었으며 에서 브리지되었습니다.NET GUI(Toolbar, window)에서 C++(OpenGL)(렌더 표면)로 전환할 수 있으며, Thunking으로 인해 네이티브 C++/OpenGL 애플리케이션에 성능 저하가 발생했습니다.따라서 최고의 성능을 원한다면 DirectX나 OpenGL로 네이티브 C++이길없습니다.

WPF는 간단한 3D 애플리케이션을 위해 고성능 3D 그래픽과 부드러운 상호 작용을 제공할 수 있습니다.예를 들어, 3D 차트 표면이나 3D 회전목마, 심지어 3D CAD 모델 뷰어도 모델이 상당히 단순하기만 하면 됩니다.개체 수가 증가하기 시작하면 렌더링 엔진이 이를 처리할 수 없다는 것을 알게 됩니다. 이때 GPU에 직접 액세스할 수 있는 렌더링 엔진으로 전환해야 합니다.

하프하우스 솔루션(Managed + DirectX)은 SharpDX를 사용해 보십시오.이는 기본적으로 Managed DirectX의 오픈 소스 구현이며 매우 강력하고 다용도입니다.네이티브 C++ 대비 관리되는 C++의 성능 타격은 미미하며(~5%) 올바르게 수행될 경우 관리되는 DirectX의 성능이 매우 우수할 수 있습니다.

D3를 통해 DirectX를 WPF와 직접 통합했습니다.DImage. 도면에 DirectX11을 사용하는 WPF 3D 차트 제어에서 이를 달성했습니다(WPF3D가 아님).이는 기본 DirectX에서 WPF로 직접 공유되지만 여기서 고속 WPF 드로잉 플러그인을 만드는 데 사용한 SharpDX에서도 마찬가지로 좋은 결과를 얻을 수 있습니다.

WPF3D의 쇼케이스를 위해 이 링크를 사용해 보는 것을 제안합니다.WPF3D는 시각적으로 매우 매력적이고 때로는 복잡한 예를 만들 수 있지만, 1,000,000개의 물체 오일 리그는 찾을 수 없습니다;)

마지막으로 WPF 3D에서 하고 싶었던 것은 무엇입니까?단지 관심사일 뿐입니다. 아니면 구현해야 할 특정 프로젝트가 있습니까? 그리고 그것이 적합한지 알고 싶으십니까?

3D 그래픽에는 두 가지 모델이 있습니다. 1. 파이프라인 또는 무한 루프 접근 방식(3D 게임, 100,000개 이상의 객체가 있는 하드 레벨 3D CAD 시스템 - 메시) 2.OnDraw, OnPaint 방법 없이 OOP를 클래식하게 지원하는 스마트 추상 모델 WPF3D.WPF의 Media3D 방법을 올바른 방법으로 사용하는 것은 매우 중요합니다.그래서 가장 중요한 것은 OnDraw, OnPaint가 없는 것입니다.

응용프로그램 유형 및 기능을 분석하고 선택해야 합니다.

WPF 3D에 대한 의견은 대부분의 단순한 애플리케이션에 대한 의견이 아니라 전체 관리 OOP 개체에 대한 의견입니다.예를 들어, 내 사이트 TIMO Structural CAE의 스크린샷을 살펴봅니다.

완전 관리형 3D WPF 앱입니다.

복잡한 작업을 수행하려면 DirectX나 OpenGL을 직접 사용하는 것보다 일반적으로 게임용으로 개발된 기존 그래픽 엔진을 사용하는 것이 좋습니다.WPF 3D 엔진은 상당히 작은 기능 세트를 가지고 있지만 유사한 수준의 추상화를 제공합니다(그림자, 반사, 굴절, 범프 맵, 골격 애니메이션 등을 원한다면 여전히 상당히 열심히 작업해야 합니다).

즉, 사내 3D 시뮬레이션 툴을 시각화하는 데 성공적으로 사용했으며 필요 이상으로 적합합니다.혼잡한 장면에서도 성능이 상당히 우수하며 기본 조명 지원으로 지오메트리를 명확하게 시각화할 수 있습니다.또한 작업하기가 상당히 쉬웠으며, 이는 제 책의 큰 장점입니다(시각화 개발에 투자할 시간이 많지 않았습니다).

WPF의 3D가 하드웨어 가속 3D 그래픽을 표시할 수 있다는 의미라면 그렇다고 생각합니다.하지만, 만약 당신이 WPF의 3D 프레임워크를 의미한다면, 저는 아니라고 말하고 싶습니다.

저는 WPF 3D 프레임워크를 많이 사용하지는 않았지만, 제가 사용한 바로는 하드 코딩된 많은 부분이 포함되어 있다는 것을 알게 되었습니다.그렇긴 하지만, 그에 대한 여러 가지 방법이 있겠지만, 저는 일반적으로 프레임워크가 (모델링 도구 및 게임 엔진과 같은) 고급 3D 그래픽을 염두에 두고 만들어졌다고 생각하지 않습니다.

하지만 제가 잘하는 것은 3D 렌더링된 콘텐츠를 표시하고 렌더링된 콘텐츠와 UI 구성 시스템을 원활하게 통합하는 것입니다.저는 이런 방식으로 WPF를 3D 컨텐츠를 렌더링하고 조작하기 위한 애플리케이션 호스트로 광범위하게 사용해 왔습니다. 특히 3D 모델링 컨텍스트 측면에서 그렇습니다.

이러한 경우 WPF 응용 프로그램에 내장된 컨트롤을 사용하여 DirectX 콘텐츠를 응용 프로그램에서 직접 렌더링할 수 있습니다.DirectX 자체를 사용하거나 SlimDX와 같은 관리되는 래퍼를 사용하여 이 지표면으로 렌더링할 수 있습니다.후자는 DirectX 버전 9, 10, 11을 지원하기 때문에 매우 좋고, 상당히 얇은 래퍼여서 많은 DirectX API를 거의 동일한 방식으로 사용할 수 있습니다.

전체적으로 3D 시스템의 사용에 전적으로 달려 있다고 생각합니다.

물론 답은 다르지만, 그것은 다릅니다.WPF 3D는 학습, 단순한 요구사항 및 3D를 다른 2D 애플리케이션에 통합하는 데 매우 유용하다고 대담하게 말할 것입니다.

WPF를 고려하고 있으므로 C#을 사용하여 Windows에 설치되는 무언가를 작성하는 것을 고려하고 있다고 가정합니다.다른 사람들이 추천하는 것 외에도, 저는 XNA를 검토할 것을 제안합니다. XNA는 WPF의 일부가 아니라 Silverlight 5에서 사용할 수 있습니다(XAML을 고수하려면).

OpenGL에서 C, C++에서 DirectX, Managed DirectX(obsolte) 및 WPF 3D로 프로그래밍했습니다. WPF 3D는 매우 높은 수준의 추상화를 제공하고 많은 편의 기능을 제공하며 일부 애플리케이션에 적합합니다.예전에 2D 그래픽과 3D 그래픽을 결합한 애플리케이션에서 사용한 적이 있는데 이 애플리케이션에서 잘 작동했습니다.이 경우에는 사용할 수 없는 기능인 임의 클리핑 평면이 필요했으며, 이 기능을 제공하지만 높은 수준의 편의성이 부족한 다른 API를 사용하는 것보다 수동으로 클리핑을 수행하는 것이 더 쉬웠습니다.

언급URL : https://stackoverflow.com/questions/8941383/is-wpf-3d-good-alternate-of-directx-and-opengl-for-complex-applications

반응형