2009-05-19 38 views
7

Chúng tôi đã tạo một ứng dụng OpenGL trong C++ để hiển thị một số mô phỏng vật lý. Ứng dụng cơ bản được chứa trong một DLL được sử dụng bởi một GUI đơn giản. Nó hiện đang chạy trên một máy tính để bàn, nhưng chúng tôi có ý tưởng biến nó thành một dịch vụ web.Ứng dụng C++ OpenGL dưới dạng dịch vụ web

Vì mô phỏng yêu cầu phần cứng chuyên dụng, ý tưởng là người dùng thông qua trình duyệt của họ có thể tương tác với ứng dụng của chúng tôi dưới dạng dịch vụ và dịch vụ này sau đó hiển thị kết quả cho hình ảnh (jpg hoặc bất kỳ thứ gì phù hợp) được hiển thị/cập nhật trong trình duyệt.

Câu hỏi của tôi: Làm cách nào để "dễ dàng" chuyển ứng dụng C++ như được mô tả trong dịch vụ web chạy trên một số máy chủ để tôi có thể tiếp cận nó qua web? Tôi nên xem xét loại công nghệ/API nào? Và có bất kỳ ví dụ thực tế nào giải quyết vấn đề tương tự không?

+0

Tần suất hình ảnh được cập nhật? –

+0

Đó sẽ là sau mỗi tương tác của người dùng. Hơi mơ hồ, nhưng kịch bản điển hình sẽ là: một thay đổi tham số -> một thời gian để mô phỏng -> render và ghi vào hình ảnh -> cập nhật hình ảnh trình duyệt. Vì vậy, không có nhu cầu thời gian thực khó khăn trong trường hợp này. – user62146

+0

Bạn dự định hỗ trợ bao nhiêu người cùng một lúc? Truy cập đó có dành cho tất cả mọi người hay chỉ một nhóm người dùng đã biết không? tất cả người dùng có thấy người dùng khác làm gì không - một ví dụ của ứng dụng hoặc một số ứng dụng? –

Trả lời

5

Điều này là có thể, nhưng một khó khăn lớn bạn sẽ có là cố gắng sử dụng OpenGL từ một dịch vụ web. Bạn sẽ cần phải cổng này để làm 100% hiển thị trên màn hình và hoạt động mà không có ngữ cảnh cửa sổ. Đó sẽ là bước đầu tiên của tôi, và nó không phải lúc nào cũng là một bước nhỏ nhặt.

Ngoài ra, rất khó để duy trì và quản lý ngữ cảnh của bạn từ một dịch vụ web chính xác, và chi phí liên quan có thể khá đau đớn. Tùy thuộc vào số lượng và loại kết xuất, bạn có thể gặp phải một số vấn đề ở đó.

1

Nếu nhu cầu tương tác người dùng của bạn rất đơn giản, tôi chỉ xem xét CGI. Nó sẽ khá dễ hiểu.

Theo như đầu ra của chương trình OpenGL, tôi sẽ xem xét phần mở rộng bộ đệm khung. Điều đó sẽ làm cho nó dễ dàng cho bạn để render vào bộ nhớ, mà sau đó có thể được đưa vào một máy nén JPEG.

3

Nếu bạn cần nó để mở rộng quy mô tốt, CGI có thể là loại chậm & hacky.

Có một số khung công tác web C++ ngoài đó, xem this question.

Theo như OpenGL đi, có thể bạn sẽ cần phải sử dụng phần mở rộng bộ đệm khung như Jay nói. Sau đó, bạn có thể hiển thị hình ảnh của mình thành một kết cấu và sử dụng glGetTexImage() để lấy dữ liệu pixel. Từ đó, chỉ cần lưu vào định dạng hình ảnh bạn muốn với thư viện kèm theo.

1

Tôi đoán bạn đã có quyền truy cập vào một số máy chủ web, ví dụ: Apache hoặc tương tự. Trong trường hợp đó, bạn có thể dùng thử CppServ.

Bạn chỉ cần định cấu hình máy chủ web để có thể liên lạc với CppServ. Sau đó tôi muốn đề xuất rằng bạn phát triển một servlet (kiểm tra tài liệu trên trang web) mà lần lượt giao tiếp với dll đã tồn tại của bạn. Kể từ khi dll biết tất cả mọi thứ về OpenGL nó sẽ không có vấn đề để tạo ra hình ảnh jpeg vv

3

Tôi đã có một tương tự project/question, mặc dù nó không phải là một dịch vụ web, nó yêu cầu rendering OpenGL trong một cửa sổ dịch vụ. Tôi đã có tấn của các vấn đề nhận được nó để làm việc trên Vista, mặc dù cuối cùng nó đã làm việc trên XP với OpenGL thường xuyên.

Cuối cùng tôi đã thử sử dụng Mesa, mà tôi đã xây dựng để hoạt động như một DLL riêng tư cho dịch vụ của mình. Đó là một quyết định tuyệt vời bởi vì bây giờ tôi có thể thực sự bước vào các cuộc gọi OpenGL và xem mọi thứ đang diễn ra ở đâu. Nó chạy tốt trong chế độ phần mềm theo dịch vụ, và trong khi nó không phải là phần cứng tăng tốc, nó hoạt động rất tốt.

1

Làm thế nào về việc sử dụng một cái gì đó như Flex để tạo một giao diện điều khiển 'hỗ trợ web', với một chương trình phụ trợ của máy chủ truyền tải hình ảnh hiển thị dưới dạng video? Về cơ bản, bạn đang chuyển hướng đầu vào bàn phím/chuột qua ứng dụng Flex và sử dụng nó để hiển thị hoạt động 3D 'thời gian thực' bằng cách sử dụng thành phần phim chuẩn.

Ma quỷ trong các chi tiết, tất nhiên ....

0

Bạn có thể cố gắng sử dụng O3D API từ google và không làm anysort của dịch vụ, nó sẽ đơn giản hơn nhiều.

+1

Đúng nếu tôi sai, nhưng vấn đề với điều này là mọi thứ vẫn chạy cục bộ ở phía máy khách, phải không? Đây là một "vấn đề" bởi vì các mô phỏng khá nặng và chúng tôi muốn làm cho chúng có sẵn cho bất kỳ người dùng nào (thậm chí có thể là thiết bị di động) trên hầu như bất kỳ hệ thống nào có trình duyệt. – user62146

+0

Bạn có chắc chắn rằng bạn sẽ có thể chạy dịch vụ nặng như vậy một cách hiệu quả về chi phí? Các giải pháp bên Cleint có thể truy cập từ trình duyệt sẽ rẻ hơn nhiều cho bạn. – user109074

0

Câu trả lời này có vẻ rất cơ bản và tiểu học, bạn đã thử phương pháp này

  1. Gửi dữ liệu vector từ máy chủ cho khách hàng hoặc ngược lại (chỉ tọa độ và vân vân)

  2. Hiển thị nó ở phía máy khách.

Điều này có nghĩa là máy chủ chỉ thực hiện các phép tính và các số được chuyển đến và tắt.

Tôi đồng ý rằng không phải là một phương pháp tầm thường cố gắng vector hóa mọi đối tượng/mô hình và kết cấu, nhưng rất nhanh vì thay vì hình ảnh đồ họa nặng đi qua, chỉ có dữ liệu vectơ đang được gửi qua.

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