문제

C# 이외의 그래픽을 렌더링하는 다른 방법이 있습니까? GDI+ 그리고 XNA?

(타일맵 에디터 개발을 위해.)

도움이 되었습니까?

해결책

SDL.NET 제가 좋아하게 된 솔루션입니다.그 위에 3D가 필요한 경우 Tao.OpenGL을 사용하여 내부에서 렌더링할 수 있습니다.업계 표준으로 빠릅니다(SDL, 즉) 및 크로스 플랫폼입니다.

다른 팁

예, 저는 DirectX 9.0을 래핑하고 비디오 표면의 직접적인 픽셀 수준 조작을 제공하는 Windows Forms 컨트롤을 작성했습니다.

나는 실제로 다른 더 나은 접근 방식이 있는지 묻는 또 다른 게시물을 Stack Overflow에 썼습니다. 2D 렌더링을 위한 안전하지 않은 C# 및 포인터, 좋은가요 나쁜가요?

상대적으로 성능이 높지만 메모리에 효율적으로 액세스하기 위해 포인터를 사용하므로 안전하지 않은 컴파일러 옵션이 필요합니다.이것이 이전 게시물의 이유입니다.

다음은 높은 수준의 필수 단계입니다.

  1. DirectX SDK를 다운로드하세요.
  2. 새 C# 만들기 윈도우 폼 설치된 Microsoft Directx 어셈블리를 프로젝트하고 참조하십시오.
  3. 필요한 새 DirectX 장치 객체를 프리젠 테이션 매개 변수 (창, 후면 버퍼링 등)로 초기화하십시오.
  4. 표면 "피치"및 현재 디스플레이 모드 (픽셀 당 비트)를 기록하기 위해 장치를 만듭니다.
  5. 무언가를 표시해야 할 때, Lock 백부퍼 표면은 표면 메모리의 시작에 반환 된 포인터를 저장합니다.
  6. 포인터 산술 사용, 표면 피치, 픽셀 당 비트 및 실제 x/y 픽셀 좌표를 기반으로 데이터의 실제 픽셀 위치를 계산하십시오.
  7. 제 경우에는 단순화를 위해 32bpp를 고수합니다. 즉, 픽셀 설정은 다음과 같이 간단합니다.*(surfacePointer + (y * 피치 + x))=Color.FromARGB(255,0,0);
  8. 그리기가 끝나면, Unlock 백 버퍼 표면.표면을 제시합니다.
  9. 필요에 따라 5단계부터 반복합니다.

이 접근 방식을 사용하는 경우 대상 표면의 현재 디스플레이 모드(피치 및 픽셀당 비트)를 확인할 때 매우 주의해야 합니다.또한 프로그램이 실행되는 동안 창 크기 조정이나 화면 형식 변경을 처리하기 위한 전략이 필요합니다.

  • 더 빠른 3D 그래픽을 위한 관리형 DirectX(Microsoft.DirectX 네임스페이스).DirectX API를 기반으로 한 견고한 .NET 래퍼로, .NET 개체 생성 및 마샬링 시 약간의 성능 저하가 발생합니다.모든 기능을 갖춘 최신 3D 엔진을 작성하지 않는 한 제대로 작동할 것입니다.

  • WPF(Window Presentation Foundation)(Windows.Media 네임스페이스) - 2D 그래픽에 가장 적합한 선택입니다.또한 3D 능력이 제한되어 있습니다.Windows Forms를 벡터, 하드웨어 가속 해상도 독립적 프레임워크로 대체하는 것을 목표로 합니다.매우 편리하며 다양한 사용자 정의 컨트롤, 리소스, 데이터 바인딩, 이벤트 및 명령을 지원합니다.또한 몇 가지 WTF가 있습니다.속도는 일반적으로 GDI보다 빠르고 DirectX보다 느리며 작업 방식에 따라 크게 달라집니다(합리적인 방법으로 다시 작성하면 60배 더 빠르게 작동하는 것을 볼 수 있음).우리는 실시간 표시기, 그래프 및 플롯으로 가득 찬 3개의 1280x1024 화면을 단일(최상은 아님) PC에 구현하는 데 성공했습니다.

Visual Studio 및/또는 Expression Blend를 사용하여 WPF를 살펴볼 수 있습니다.얼마나 정교하게 만들려고 하는지 잘 모르겠지만 간단한 편집기를 처리할 수 있을 것입니다.이것을 확인해보세요 MSDN 기사 더 많은 정보를 위해서.

당신은 카이로 그래픽 라이브러리.그만큼 단핵증 프로젝트에는 C#에 대한 바인딩이 있습니다.

카이로 옵션입니다.저는 현재 GDI+와 Cairo를 모두 사용하여 매핑 소프트웨어를 다시 작성하고 있습니다.다른 기능 중에서도 타일 맵 생성기가 있습니다.

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