2010-09-01 29 views
6

Tôi đã làm việc trên một ứng dụng nhỏ, và tôi đã sử dụng DirectX/3D để vẽ họa tiết cho màn hình (tất cả các phần tử 2 chiều). API, tôi thấy, khá dễ sử dụng và kết hợp sử dụng các nguyên tắc OOP, nhưng tôi không thể không cảm thấy rằng việc sử dụng DirectX trên cái gì đó nhỏ này là điên rồ hơn giết chết.API vẽ đồ họa 2D tốt cho Windows/C++ là gì?

Tôi dường như không thể tìm thấy sự đồng thuận về một giải pháp thay thế tốt. Bất kỳ đề xuất?

CHỈNH SỬA: Hỗ trợ tệp alpha gốc và hỗ trợ tệp PNG là cần thiết.

Với đầu bài nhiều tình yêu, Jengerer

+0

Xem xét rằng hầu hết các bản trình diễn 4K mà bạn thấy trong bản demoscene đang sử dụng D3D, tôi sẽ không nói rằng nó vô cùng quá tải đối với một ứng dụng 2D đơn giản. Ngoài ra D3DX còn hỗ trợ các định dạng tệp '.bmp',' .dds', '.dib',' .hdr', '.jpg',' .pfm', '.png',' .ppm' và '.tga'. – Stringer

Trả lời

5

Nếu bạn cần pha trộn alpha, bạn phải sử dụng phần cứng đồ họa; cách tốt nhất để làm điều đó là sử dụng API 3D tương tự như cách bạn đang thực hiện ngay bây giờ (DirectX hoặc OpenGL). Bất kỳ thay thế nào (GDI/+ hoặc nói, DirectDraw) sẽ không sử dụng phần cứng đồ họa đầy đủ để tăng tốc pha trộn và sẽ phải thực hiện nó trên CPU, làm giảm đáng kể hiệu suất.

Như đã đề cập, Direct2D cũng là một tùy chọn - đó là chức năng một lớp trên cùng của Direct3D hỗ trợ thêm chức năng 2D cụ thể cũng như hỗ trợ văn bản tuyệt vời.

+0

Theo như DirectX/OpenGL đi, bạn sẽ giới thiệu điều gì? Tôi biết đó là một chủ đề khá nóng trong thế giới lập trình, nhưng về hiệu suất và khả năng thực hành, bạn sẽ nói gì là lựa chọn tốt hơn? – Jengerer

+0

Bạn phàn nàn cụ thể rằng DirectX cảm thấy như quá giết; OpenGL có API thời gian để tiếp thị nhanh hơn nhiều để giúp bạn phát triển. Vì OpenGL được thiết kế với C trong tâm trí tuy nhiên, bạn sẽ mất gói gọn của thiết kế DirectX OO và phải đối phó với máy trạng thái OpenGL. Hiệu suất sẽ gần như giống hệt nhau giữa hai loại, do đó, hãy sử dụng API cung cấp API rõ ràng và dễ hiểu đối với bạn. –

+0

Bằng cách giết chết tôi có nghĩa là hiệu suất-khôn ngoan, nó có vẻ như nó mất nhiều tài nguyên hơn so với một ứng dụng nhỏ nên bao giờ sử dụng. Tôi thấy rằng ngay cả những ứng dụng DirectX nhỏ nhất cũng có tải nặng. Cảm ơn bạn đã trả lời, nó thực sự đã giúp! – Jengerer

4

Nếu bạn không cần sự hỗ trợ XP, sử dụng Direct2D.
Nếu không, hãy sử dụng GDI+.

1

Windows bao gồm một trong số các hộp. (GDI32.DLL). Có thể móc vào thông báo WM_PAINT trong cuộc gọi WindowProc và sử dụng BeginPaint() để bắt đầu vẽ. Một ý tưởng thực sự tốt về những gì có thể được thực hiện và một hướng dẫn cơ bản có sẵn trên Zetcode.

1

Tôi đã sử dụng Gosu trong quá khứ và bạn không thể làm việc được. Nó được thiết kế để được sử dụng nhiều hơn với Ruby, nhưng nó không phải là xấu cho C + +. Chúng tôi sử dụng nó trong một trò chơi cuộn nhanh bên, nơi chúng tôi đã làm rối trật tự z và kênh alpha. Nó có thể là giá trị kiểm tra ra.

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