2009-08-24 2 views
3

MFC를 사용하여 상당히 큰 응용 프로그램을 개발했습니다. Naturaly, 드로잉에는 GDI, 이벤트 라우팅에는 CCmdTarget, 문서 뷰 아키텍처는 사용했습니다. 편리한 개발 경로였습니다.GDI를 대체하기 위해 OpenGL C# 응용 프로그램을 구현하는 것이 현명합니까

이제 클라이언트는이 응용 프로그램을 .Net으로 변환하려고합니다. C#으로 새 제품을 작성하는 것을 선호합니다. OpenTK을 - - 그래픽 라이브러리로 ( 그래서 구체적으로는 OpenGL을 사용하여 생각하고 성능 문제가 발생할 수 natuaral 보이더라도

응용 프로그램을 표시

하고, 그래서 내가 GDI +로가는 생각, 그래픽 개체의 수천과 상호 작용 2D입니다.)

OpenGL은 화면의 일부를 무효화하는 데 의존하는 이러한 Windows API와 다르게 작동한다는 것을 알고 있습니다. OpenGL은 끊임없이 화면에 그려지는 렌더링 루프를 가지고 있습니다.

내 질문은 : 갈이 허용 방식, 생각인가 :

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

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

  • 다중 선택하고 상황에 맞는 메뉴

이 라이브러리는 Windows Forms의 내부에 잘 어울리는인가?

답변

4

CAD와 유사한 소프트웨어를 개발하면서 OpenGL과 DirectX의 이점은 빠른 깊이 테스트, 부드러운 회전 및 패닝, 조명 및 강력한 텍스처 기능입니다. 분명히 다른 장점이 있지만, 대부분의 자습서가 당신을 믿게 만들지 만,이 API 중 하나를 사용하는 렌더링 시스템을 구현하는 것은 중요한 사업이며 가볍게 받아 들여서는 안됩니다. 특히

:

  • 는 차원 응용 프로그램입니다 그리고 당신은 이미 다음 GDI +로 전환하는 것은 쉽게 많은 될 것입니다 GDI 구현해야합니다.또한 현대 하드웨어에서 2D GDI 또는 GDI +는 2D OpenGL 또는 DirectX만큼 빠르다. 궁극적으로 최종 사용자는 특히 GDI +의 이중 버퍼 지원과의 차이점을 눈치 채지 못할 것입니다.

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

  • OpenGL 또는 DirectX를 사용하는 경우 빠른 그리기를 위해 개체를 표시 목록 또는 정점 배열 (버퍼)에 배치해야합니다. 이것은 어렵지 않지만이 방법으로 객체를 관리하면 시스템이 복잡해지고 렌더링 시스템의 아키텍처가 크게 변경됩니다.

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

  • 나는 또한 당신이 정말로 도전을 찾고하지 않는 OpenGL을 또는 다이렉트 ...에서 GUI를 작성 멀리 것이다 ~) 마지막으로

  • 을하고, 이것이 설치 관점에서 그냥 성가심입니다, 사용자 컴퓨터에 설치해야하는 Managed DirectX 런타임 라이브러리는 약 100MB입니다.

+0

와우, 모든 정보와 정보를 제공해 주셔서 감사합니다. OpenGL에서 인쇄가 문제 될 것이라고 생각했습니다. DirectX에 대해 생각조차하지 않아서 OpenGL을 사용하려고 생각했습니다. 하지만 GD +로 전환하는 것이 자연 스럽다. 성능을 최적화하는 데주의해야합니다. 감사합니다. – Yaron

7

나는 그렇게 생각하지 않는다. 가능한 경우 WPF를 사용하고 그렇지 않으면 DirectX를 사용하십시오.

나는 그것이 공정하지 않을 수도 있지만 Windows (Microsoft)에서 .NET (Microsoft) 프로그래밍을하고 있다면 DirectX를 사용하고 싶습니다 ... 또한 Microsoft에서도 제공합니다.

보조 메모로 : 바퀴를 재발 명하지 마십시오. 좋은 이유가 있는지 확인하려면 open-gl에서 사용자 정의 컨트롤을 코딩하는 데 시간이 많이 걸릴 수 있습니다.

+2

+1 WPF, DirectX/OpenGL에서 중립 –

0

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

이 레이어를 만들려면 현재 프레임 버퍼에 대해 openGL에 요청하여 현재 캔버스 아래에서 텍스처로 사용할 이미지로 변환해야합니다. 그래서 거기에서 꽤 쉽게 인쇄 및 인쇄 미리보기로 이동합니다.

0

Direct X와 Open GL은 GDI +보다 훨씬 빠릅니다.

관련 문제