2008-09-12 6 views
7

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

는 (타일지도 편집기의 개발.의 경우)

+0

David, "Understanding Pointers"질문에 주목했습니다. 위대한 질문, 좋은 답변! 해당 게시물에 언급 된 모든 내용은 아래의 "안전하지 않은"답변에도 적용됩니다. – Ash

답변

8

SDL.NET 내가 사랑하게 한 솔루션입니다. 그 위에 3D가 필요한 경우, Tao.OpenGL을 사용하여 그 안에 렌더링 할 수 있습니다. 업계 표준 (즉, SDL)이며 플랫폼 간입니다.

+0

굉장! 저는 실제로 SDL에 익숙합니다. 나는 이것을 조사 할 것이다. –

+0

그들은 링크가 더 이상 작동하지 않도록 위키를 옮겼습니다. 그냥 http://cs-sdl.sourceforge.net/로 가서 거기에서 탐색하십시오. –

3

예, DirectX 9.0을 래핑하고 Windows에서 비디오 화면을 직접 픽셀 수준으로 조작하는 Windows Forms 컨트롤을 작성했습니다. 이 효율적으로 메모리에 액세스 포인터를 사용하기 때문에 Unsafe C# and pointers for 2D rendering, good or bad?

이 상대적으로 높은 성능이지만, 그것은 안전하지 않은 컴파일러 옵션이 필요합니다 다른 더 좋은 방법이 있는지

는 사실 물어 스택 오버플로 다른 게시물을 썼다. 그러므로이 이전 게시물에 대한 이유.

  1. 는 다이렉트 X SDK를 다운로드 :

    이 필요한 단계 높은 수준이다.

  2. 새 C# Windows Forms 프로젝트를 만들고 설치된 Microsoft DirectX 어셈블리를 참조하십시오.
  3. 프리젠 테이션 매개 변수 (창 버퍼링, 백 버퍼링 등)을 사용하여 새 DirectX 장치 개체를 초기화합니다.
  4. "Pitch"및 현재 디스플레이 모드 (픽셀 당 비트 수)를 기록하도록주의하면서 장치를 만듭니다.
  5. 뭔가를 표시해야 할 때 Lock 후면 버퍼 표면을 반환하고 표면 메모리의 시작 부분에 반환 된 포인터를 저장합니다.
  6. 포인터 계산을 사용하여 표면 피치, 픽셀 당 비트 수 비트 및 실제 x/y 픽셀 좌표에 따라 데이터의 실제 픽셀 위치를 계산합니다.
  7. 단순함을 위해 필자는 32   bpp를 고수하고 있는데, 이는 픽셀 설정이 다음과 같이 간단하다는 것을 의미합니다. * (surfacePointer + (y * pitch + x)) = Color.FromARGB (255,0,0);
  8. 드로잉이 끝나면 뒤쪽 버퍼 표면이 Unlock입니다. 표면을 드러내십시오.
  9. 필요에 따라 5 단계부터 반복하십시오.

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

1

Visual Studio 및/또는 Expression Blend를 사용하여 WPF를 살펴볼 수 있습니다. 얼마나 정교한지를 잘 모르지만 간단한 편집기를 처리 할 수 ​​있어야합니다. 자세한 내용은 MSDN Article을 확인하십시오.

2
  • 빠른 3D 그래픽을위한 Managed DirectX (Microsoft.DirectX 네임 스페이스). DirectX API를 통한 견고한 .NET 래퍼입니다.이 래퍼는 제작시 약간의 성능 저하가 있습니다.NET 개체 및 마샬링. 완전한 기능을 갖춘 최신 3D 엔진을 작성하지 않는 한 정상적으로 작동합니다.

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

0

Cairo은 옵션입니다. 현재 GDI +와 Cairo를 사용하여 매핑 소프트웨어를 다시 작성하고 있습니다. 타일 ​​맵 생성기가 있으며 다른 기능들도 있습니다.