2008-09-12 70 views
7

Có cách nào khác để hiển thị đồ họa trong C# ngoài GDI+XNA không?Đồ họa hiển thị trong C#

(Đối với sự phát triển của một trình soạn thảo bản đồ ngói.)

+0

David, chỉ cần nhận thấy câu hỏi của bạn "Hiểu con trỏ". Câu hỏi hay, câu trả lời tuyệt vời! Tất cả các điểm được đề cập trong bài đăng đó cũng áp dụng cho câu trả lời "không an toàn" của tôi bên dưới. – Ash

Trả lời

8

SDL.NET là giải pháp tôi đã đến và mến yêu. Nếu bạn cần 3D trên đầu trang của nó, bạn có thể sử dụng Tao.OpenGL để render bên trong nó. Nó nhanh, tiêu chuẩn công nghiệp (SDL, có nghĩa là) và nền tảng chéo.

+0

Tuyệt vời! Tôi thực sự quen thuộc với SDL. Tôi sẽ xem xét điều này. –

+0

Họ đã di chuyển wiki của họ để liên kết không còn hoạt động nữa. Chỉ cần goto http://cs-sdl.sourceforge.net/ và điều hướng từ đó –

3

Có, tôi đã viết điều khiển Windows Forms bao bọc DirectX 9.0 và cung cấp thao tác mức pixel trực tiếp của bề mặt video.

Tôi thực sự đã viết một bài đăng trên Stack Overflow hỏi nếu có cách tiếp cận tốt hơn khác: Unsafe C# and pointers for 2D rendering, good or bad?

Trong khi đó là hiệu suất tương đối cao, nó đòi hỏi các tùy chọn trình biên dịch không an toàn vì nó sử dụng con trỏ để truy cập bộ nhớ một cách hiệu quả. Do đó lý do cho bài viết trước đó.

Đây là một mức độ cao về các bước cần thiết:

  1. Tải DirectX SDK.
  2. Tạo dự án C# Windows Forms mới và tham khảo lắp ráp Microsoft DirectX đã cài đặt.
  3. Khởi tạo đối tượng Thiết bị DirectX mới với Tham số Trình bày (cửa sổ, đệm sau, v.v.) mà bạn yêu cầu.
  4. Tạo thiết bị, cẩn thận để ghi lại bề mặt "Pitch" và chế độ hiển thị hiện tại (bit trên mỗi pixel).
  5. Khi bạn cần hiển thị nội dung nào đó, Lock backbuffer bề mặt và lưu con trỏ được trả lại về đầu màn hình bộ nhớ.
  6. Sử dụng số học con trỏ, tính toán vị trí pixel thực tế trong dữ liệu dựa trên độ cao bề mặt, bit trên mỗi pixel và tọa độ pixel x/y thực tế.
  7. Trong trường hợp của tôi để đơn giản tôi gắn bó với 32   bpp, có nghĩa là thiết lập một điểm ảnh đơn giản như: * (surfacePointer + (y * pitch + x)) = Color.FromARGB (255,0,0);
  8. Khi vẽ xong, Unlock mặt đệm phía sau. Trình bày bề mặt.
  9. Lặp lại từ bước 5 theo yêu cầu.

Hãy lưu ý rằng việc sử dụng phương pháp này bạn cần phải rất cẩn thận về việc kiểm tra chế độ hiển thị hiện tại (độ cao và bit trên pxiel) của bề mặt mục tiêu. Ngoài ra, bạn sẽ cần phải có một chiến lược tại chỗ để đối phó với thay đổi kích thước cửa sổ hoặc thay đổi định dạng màn hình trong khi chương trình của bạn đang chạy.

1

Bạn có thể thử tìm trong WPF, sử dụng Visual Studio và/hoặc Expression Blend. Tôi không chắc bạn tinh vi đến mức nào, nhưng nó sẽ có thể xử lý một trình soạn thảo đơn giản. Hãy xem MSDN Article để biết thêm thông tin.

2
  • DirectX được quản lý (không gian tên Microsoft.DirectX) để có đồ họa 3D nhanh hơn. Đó là một trình bao bọc .NET vững chắc trên API DirectX, đi kèm với một chút hiệu suất nhấn để tạo.Đối tượng NET và marshalling. Trừ khi bạn đang viết một động cơ 3D hiện đại đầy đủ tính năng, nó sẽ hoạt động tốt.

  • Quỹ trình bày cửa sổ (WPF) (Không gian tên Windows.Media) - lựa chọn tốt nhất cho đồ họa 2D. Ngoài ra còn có khả năng 3D hạn chế. Nhằm thay thế Windows Forms bằng vectơ, khung công tác độc lập với độ phân giải tăng tốc phần cứng. Rất thuận tiện, hỗ trợ một số hương vị của điều khiển tùy chỉnh, tài nguyên, ràng buộc dữ liệu, sự kiện và lệnh ... cũng có một vài WTF. Tốc độ thường nhanh hơn GDI và chậm hơn DirectX, và phụ thuộc rất nhiều vào cách bạn làm việc (nhìn thấy một cái gì đó để làm việc nhanh hơn 60 lần sau khi viết lại một cách hợp lý). Chúng tôi đã thực hiện thành công 3 màn hình 1280x1024 đầy đủ các chỉ báo thời gian thực, đồ thị và ô trên một máy tính (và không phải là tốt nhất).

0

Cairo là một tùy chọn. Tôi hiện đang viết lại phần mềm lập bản đồ của mình bằng cả GDI + và Cairo. Nó có một máy phát bản đồ ngói, trong số các tính năng khác.

Các vấn đề liên quan