GDI를 대체하기 위해 OpenGL C# 응용 프로그램을 구축하는 것이 스마트입니까?

StackOverflow https://stackoverflow.com/questions/1322741

문제

MFC를 사용하여 상당히 큰 응용 프로그램을 개발했습니다. Naturaly, 나는 GDI를 그리기, 이벤트 라우팅을 위해 CCMDTARGET 및 Document-View Architecture를 사용했습니다. 편리한 개발 경로였습니다.

이제 클라이언트는이 응용 프로그램을 .NET으로 변환하는 데 관심이 있습니다. 나는 C#에 신제품을 쓰는 것을 선호합니다 (그리고 그들도).

응용 프로그램은 수천 개의 그래픽 객체를 표시하고 상호 작용하므로 GDI+와 함께 진행하는 것을 알았지 만 Natuaral은 성능 문제를 일으킬 수있는 것으로 보이므로 OpenGL, 특히 OpENTK를 그래픽 라이브러리 (2D)로 사용할 생각입니다.

나는 OpenGL이 화면의 일부를 무효화하는 데 의존하는이 Windows API와 다르게 작동한다는 것을 알고 있습니다. OpenGL에는 렌더링 루프가있어 스크린에 지속적으로 그려집니다.

내 질문은 다음과 같습니다.

  • 성능 - 사용자는 특수 그래픽 카드 (하드웨어?)가 필요합니다. 그래픽 집중적이지만 고급 게임이 아닙니다.

  • 인쇄 및 인쇄 미리보기 - 이러한 것들이 Achienve에 복잡합니까?

  • 다중 선택 및 컨텍스트 메뉴

이 라이브러리가 Windows 형태로 잘 작동합니까?

도움이 되었습니까?

해결책

CAD와 같은 소프트웨어를 개발 한 경험에서 OpenGL 및 DirectX의 이점은 빠른 깊이 테스트, 부드러운 회전 및 패닝, 조명 및 강력한 텍스처 기능입니다. 분명히 다른 이점이 있지만, 대부분의 자습서가 믿게 될 것인지에도 불구하고 이러한 API 중 하나를 사용하여 렌더링 시스템을 구현하는 것은 중요한 사업이며 가볍게 취해서는 안됩니다.

구체적으로:

  • 2D 앱이고 이미 GDI에서 구현 된 경우 GDI+로 전환하는 경우 많이 더 쉬운. 또한 최신 하드웨어에서 2D GDI 또는 GDI+는 2D OpenGL 또는 DirectX만큼 빠른 것일 수 있습니다. 그리고 궁극적으로 최종 사용자는 아마도 GDI+의 이중 버퍼 지지대를 사용하면 차이를 알지 못할 것입니다.

  • 앱에 대한 지속적인 렌더링 루프가 필요하지 않으며 원하지 않을 것입니다. OpenGL 및 DirectX에서는 장면이 변경 될 때 창을 명시 적으로 무효화 할 수 있습니다.

  • OpenGL 또는 DirectX를 사용하면 빠른 도면을 위해 객체를 디스플레이 목록 또는 정점 배열 (버퍼)에 넣는 것을 고려해야합니다. 이것은 어렵지 않지만 이러한 방식으로 객체를 관리하면 시스템에 복잡성이 추가되며 렌더링 시스템의 아키텍처를 크게 변경할 수 있습니다.

  • OpenGL 또는 DirectX에서 인쇄하는 것도 지루할 수 있습니다. 한편으로는 비트 맵으로 렌더링하고 인쇄 할 수 있습니다. 그러나 고품질 이미지의 경우 대신 벡터화 된 이미지를 원할 수 있으며, 이는 이러한 렌더링 프레임 워크 중 하나를 사용하여 생산하기가 어려울 수 있습니다.

  • 나는 또한 OpenGL 또는 DirectX에서 GUI를 쓰지 않을 것입니다 ... 당신이 정말로 도전을 찾고 있지 않는 한; ~)

  • 마지막으로, 이것은 설치 관점에서 성가신 일 뿐이며, 사용자 시스템에 설치 해야하는 Managed Directx 런타임 라이브러리는 약 100MB입니다.

다른 팁

나는 그렇게 생각하지 않습니다. 할 수있는 경우 WPF를 사용하거나 할 수없는 경우 DirectX를 사용하십시오.

공정하지 않을 수도 있지만 Windows (Microsoft)의 .NET (Microsoft)에서 프로그래밍하는 경우 DirectX를 사용하고 싶습니다.

참고로 : 바퀴를 재발 명하지 마십시오. Open-GL에서 사용자 컨트롤을 다시 코딩하는 데 시간이 많이 걸릴 수 있습니다. 정당한 이유가 있는지 확인하십시오.

C#에 대한 경험은 없지만 렌더링을 위해 OpenGL을 사용한 드로잉 프로그램을위한 레이어 시스템을 한 번 구축했습니다.

이 레이어를 만들기 위해 OpenGL에 현재 FrameBuffer를 요청하고 이미지로 변환하여 현재 캔버스 아래의 질감으로 사용했습니다. 그래서 나는 거기에서 인쇄 및 인쇄 미리보기로 이동하기가 매우 쉽다고 생각합니다.

GDI+보다 훨씬 빠르게 X를 직접 열고 gl을 엽니 다.

당신은 또한 사용할 수 있습니다 TAO 프레임 워크 Opentk의 대안으로.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top