2012-01-20 14 views
41

Tôi đã sử dụng khả năng 3D của WPF cho việc học, và cho một vài triển khai, và tôi thấy nó rất có khả năng, và tôi cũng học DirectX 11, và rất khó so với sử dụng các lớp 3D trong WPF. Tôi chỉ sử dụng WPF 3D cho nội dung rất cơ bản, câu hỏi của tôi là:WPF 3D có thay thế tốt cho DirectX và OpenGL cho các ứng dụng phức tạp không?

WPF 3D có tốt cho các ứng dụng cao cấp như công cụ lập mô hình 3D, công cụ trò chơi và mô phỏng 3D vv không?

Nếu có bất kỳ điều gì khác trong cùng một giải đấu, vui lòng đề cập đến nó.

Trả lời

52

Câu hỏi hay. Câu trả lời là nó phụ thuộc !!

Trên một lưu ý hữu ích hơn tôi có thể nói điều này: Một vài năm trước, tôi đã phát triển một ứng dụng dựng hình 3D kiểu CAD trong OpenGL. Điều này đã hiển thị các mô hình CAD của giàn khoan dầu với tối đa 1.000.000 đối tượng và cho phép người dùng phóng to chi tiết, hoặc thu nhỏ, di chuyển đối tượng, v.v. Tôi có thể nói chắc chắn rằng WPF sẽ không phù hợp với điều này loại ứng dụng vì nó sẽ chỉ là quá chậm. Ứng dụng này được phát triển bằng cách sử dụng C++/CLI và cầu nối từ .NET GUI (Thanh công cụ, cửa sổ) sang C++ sang OpenGL (hiển thị bề mặt) và thậm chí giới thiệu hiệu suất trên ứng dụng C++/OpenGL gốc do thunking. Vì vậy, nếu bạn muốn có hiệu suất cao nhất, bạn không thể đánh bại C++ gốc bằng DirectX hoặc OpenGL.

WPF có thể cung cấp đồ họa 3D hiệu năng cao và tương tác mượt mà cho các ứng dụng 3D đơn giản hơn. Ví dụ: bề mặt biểu đồ 3D hoặc băng chuyền 3D, ngay cả trình xem mô hình CAD 3D miễn là mô hình khá đơn giản. Khi số lượng đối tượng bắt đầu tăng lên, bạn sẽ thấy công cụ hiển thị không thể xử lý nó - đó là khi bạn cần chuyển sang công cụ hiển thị cho phép truy cập trực tiếp vào GPU.

Đối với giải pháp nhà nửa chừng (managed + DirectX), hãy thử SharpDX. Về cơ bản, đây là một triển khai mã nguồn mở của Managed DirectX và cực kỳ mạnh mẽ và linh hoạt. Hiệu suất hit của quản lý so với bản địa C + + là nhỏ (~ 5%) và khi thực hiện đúng, quản lý DirectX có thể cực kỳ hiệu quả.

Điều chúng tôi đã làm là tích hợp DirectX trực tiếp với WPF qua D3DImage. Chúng tôi đã đạt được điều này trong một WPF 3D Chart Control sử dụng DirectX11 cho bản vẽ (không phải WPF3D). Điều này chia sẻ trực tiếp từ bản địa DirectX đến WPF nhưng bạn có thể nhận được kết quả như nhau tốt với SharpDX, mà chúng tôi đã sử dụng để tạo ra một tốc độ cao WPF Drawing Plugin ở đây.

Để giới thiệu WPF3D, tôi đề nghị bạn thử this link. Như bạn thấy WPF3D có thể tạo ra các ví dụ vô cùng hấp dẫn và đôi khi phức tạp nhưng bạn sẽ không tìm thấy bất kỳ giàn dầu nào đối tượng 1.000.000 trong đó;)

Cuối cùng, bạn muốn làm gì trong WPF 3D? Chỉ cần một điểm quan tâm hoặc bạn có một dự án cụ thể để thực hiện và muốn biết nếu nó sẽ phù hợp?

Trân trọng,

+0

Cảm ơn câu trả lời và câu hỏi của tôi chỉ là một điểm đáng chú ý, nhưng sẽ rất hữu ích trong tương lai nếu tôi phải triển khai một cái gì đó trong không gian 3D. – SpeedBirdNine

+3

@SpeedBirdNine không có vấn đề gì. Tôi muốn đề nghị kiểm tra liên kết này http://helixtoolkit.codeplex.com/ vì nó dường như có một showcase khá tốt về khả năng của WPF 3D. Trân trọng –

+0

Cảm ơn bạn lần nữa vì đã liên kết! – SpeedBirdNine

5

Nếu bạn thực sự muốn làm điều gì đó phức tạp, bạn đang thực sự tốt hơn bằng cách sử dụng một động cơ đồ họa thiết lập (thường được phát triển cho trò chơi), thay vì sử dụng DirectX hoặc OpenGL trực tiếp. Công cụ 3D WPF cung cấp một mức trừu tượng tương tự, mặc dù nó có một bộ tính năng nhỏ hơn đáng kể (bạn vẫn sẽ phải làm việc khá vất vả nếu bạn muốn bóng, phản xạ, khúc xạ, bản đồ vết sưng, hoạt hình xương, v.v.)

Điều đó nói rằng, tôi đã sử dụng nó thành công để trực quan hóa công cụ mô phỏng 3D trong nhà và nó phù hợp hơn với nhu cầu của tôi. Nó thực hiện khá tốt ngay cả với một cảnh đông đúc và hỗ trợ ánh sáng cơ bản là đủ để hình dung rõ ràng hình học. Nó cũng khá dễ dàng để làm việc, đó là một lợi thế lớn trong cuốn sách của tôi (không có nhiều thời gian để đầu tư phát triển hình ảnh.)

4

Nếu bằng 3D của WPF, bạn có nghĩa là khả năng hiển thị đồ họa 3D tăng tốc phần cứng sau đó tôi sẽ nói có. Tuy nhiên, nếu bạn có nghĩa là khung công tác 3D của WPF; sau đó tôi sẽ bị cám dỗ để nói không.

Tôi chưa sử dụng nhiều khung công tác 3D của WPF, nhưng từ những gì tôi đã sử dụng, tôi đã tìm thấy nó liên quan đến rất nhiều điểm được mã hóa cứng. Điều đó đang được nói, có lẽ là những cách xung quanh đó, nhưng tôi thường không nghĩ rằng khuôn khổ đã từng được xây dựng với đồ họa 3D tiên tiến trong tâm trí (chẳng hạn như các công cụ mô hình hóa và các công cụ trò chơi).

Tuy nhiên, những gì tôi thấy là tốt, đang hiển thị nội dung được hiển thị 3D và tích hợp thông suốt nội dung được hiển thị với hệ thống thành phần giao diện người dùng của nó. Tôi đã sử dụng WPF rộng rãi theo cách này như một máy chủ ứng dụng để hiển thị và thao tác nội dung 3D - đặc biệt là về ngữ cảnh mô hình 3D.

Trong trường hợp như vậy, bạn có thể sử dụng điều khiển D3DImage được nhúng trong ứng dụng WPF để cho phép nội dung DirectX hiển thị trực tiếp trên ứng dụng của bạn. Bạn có thể hiển thị trên bề mặt này bằng chính DirectX hoặc một trình bao bọc được quản lý như SlimDX. Cái thứ hai mà tôi thấy là rất tốt vì nó hỗ trợ DirectX phiên bản 9, 10 và 11, và nó là một trình bao bọc khá mỏng nên rất nhiều API DirectX có thể sử dụng được gần như giống nhau.

Nói chung, tôi sẽ nói nó hoàn toàn phụ thuộc vào cách sử dụng yêu cầu của hệ thống 3D.

3

Tuy nhiên, câu trả lời là tùy thuộc. Tôi sẽ được đậm và nói rằng WPF 3D là tuyệt vời cho việc học tập, nhu cầu đơn giản, và tích hợp 3D vào một ứng dụng 2D khác.

Vì bạn đang xem xét WPF, tôi giả sử bạn đang xem xét việc sử dụng C# để viết thứ gì đó cài đặt trên Windows. Ngoài những gì người khác đề xuất, Tôi đề nghị xem xét XNA, không phải là một phần của WPF, nhưng một tập hợp con trong đó có sẵn trong Silverlight 5 (nếu bạn muốn gắn bó với XAML).

Tôi đã lập trình trong OpenGL với C, DirectX trong C++ và Managed DirectX (obsolte) và WPF 3D. WPF 3D cung cấp một mức trừu tượng rất cao, cung cấp rất nhiều tính năng tiện lợi, và phù hợp cho một số ứng dụng. Tôi đã sử dụng nó trong quá khứ trên một ứng dụng kết hợp đồ họa 2D và 3D và nó hoạt động tốt cho ứng dụng này. Trong trường hợp này, tôi cần các máy bay tùy ý, đó là một tính năng không có sẵn và dễ dàng thực hiện việc cắt bằng tay hơn là sử dụng một API khác cung cấp tính năng này nhưng thiếu nhiều tiện ích cao cấp.

9

Có hai mô hình đồ họa 3D: 1. đường ống hoặc cách tiếp cận vòng lặp vô hạn (3D Games, mức cứng hệ thống 3D Cad với 100.000 và nhiều đối tượng - meshes) 2. Thông minh mô hình WPF3D trừu tượng với cổ điển hỗ trợ của OOP mà không cần bất kỳ phương thức OnDraw, OnPaint nào. Điều rất quan trọng là sử dụng các phương thức Media3D của WPF theo đúng cách. Vì vậy, điều quan trọng nhất là mà không có bất kỳ OnDraw, OnPaint.

Bạn phải phân tích loại ứng dụng và các tính năng của mình và chọn.

Ý kiến ​​không chính xác về WPF 3D như đối với hầu hết các ứng dụng đơn giản, nhưng đối với các đối tượng OOP được quản lý đầy đủ. Ví dụ: hãy xem ảnh chụp màn hình trên trang web của tôi TIMO Structural CAE

Đây là ứng dụng 3D WPF được quản lý hoàn chỉnh.

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