2009-05-19 20 views
7

हमने सी ++ में ओपनजीएल एप्लीकेशन बनाया है जो कुछ भौतिक सिमुलेशन को देखता है। मूल आवेदन एक डीएलएल के भीतर निहित है जिसका उपयोग एक साधारण जीयूआई द्वारा किया जाता है। यह वर्तमान में डेस्कटॉप पीसी पर चलता है, लेकिन हमारे पास इसे वेब सेवा में बदलने का विचार है।सी ++ ओपनजीएल एप्लिकेशन एक वेब सेवा के रूप में

के बाद से सिमुलेशन समर्पित हार्डवेयर की आवश्यकता होती है, विचार है कि यदि कोई उपयोगकर्ता उसकी/उसके ब्राउज़र के माध्यम से एक सेवा के रूप हमारे आवेदन के साथ बातचीत और इस सेवा तो एक छवि (jpg या कुछ भी उपयुक्त हो) के लिए परिणाम renders सकता है कि तब कर सकते हैं ब्राउज़र में प्रदर्शित/अद्यतन किया जाना चाहिए।

मेरा प्रश्न: कुछ सर्वर पर चलने वाली वेब-सेवा में वर्णित सी ++ एप्लिकेशन को "आसानी से" कैसे बदल सकता है ताकि मैं इसे वेब पर देख सकूं? मुझे किस प्रकार की तकनीकों/एपीआई को देखना चाहिए? और क्या कोई वास्तविक जीवन उदाहरण है जो एक समान समस्या से निपटता है?

+0

छवि को अपडेट करने का अर्थ कितनी बार है? –

+0

यह प्रत्येक उपयोगकर्ता बातचीत के बाद होगा। थोड़ा अस्पष्ट, लेकिन सामान्य परिदृश्य होगा: एक पैरामीटर परिवर्तन -> सिमुलेशन के लिए कुछ समय -> छवि प्रस्तुत करना और लिखना -> ब्राउज़र छवि अपडेट करें। तो इस मामले में कोई मुश्किल वास्तविक समय की जरूरत नहीं है। – user62146

+0

आप एक ही समय में कितने उपयोगकर्ताओं का समर्थन करने की योजना बना रहे हैं? क्या यह सभी के लिए उपयोग है, या केवल उपयोगकर्ताओं के ज्ञात सेट है? क्या सभी उपयोगकर्ता देखते हैं कि अन्य उपयोगकर्ता क्या करते हैं - एप्लिकेशन का एक उदाहरण, या कई? –

उत्तर

5

यह संभव है, लेकिन एक बड़ी कठिनाई आपके पास वेब सेवा से ओपनजीएल का उपयोग करने की कोशिश कर रही है। आपको इसे 100% ऑफस्क्रीन प्रतिपादन करने और विंडोिंग संदर्भ के बिना काम करने के लिए पोर्ट करना होगा। यह मेरा पहला कदम होगा, और यह हमेशा एक छोटा सा नहीं होता है।

इसके अलावा, एक वेबसाइकिल से अपने ओपनजीएल संदर्भों को सही ढंग से बनाए रखना और प्रबंधित करना बहुत मुश्किल है, और इसमें शामिल ओवरहेड काफी दर्दनाक हो सकता है। संख्याओं और रेंडरिंग के प्रकारों के आधार पर, आप वहां कुछ मुद्दों पर जा सकते हैं।

1

यदि आपकी उपयोगकर्ता-संपर्क की आवश्यकता सरल है, तो मैं केवल CGI को देखूंगा। यह समझना बहुत आसान होना चाहिए।

ओपनजीएल प्रोग्राम के आउटपुट को प्राप्त करने तक, मैं फ्रेमबफर एक्सटेंशन को देखता हूं। इससे आपके लिए स्मृति में प्रस्तुत करना आसान हो जाएगा, जिसे तब एक जेपीईजी कंप्रेसर में खिलाया जा सकता है।

3

यदि आपको अच्छी तरह से सीजीआई स्केल करने की आवश्यकता है तो शायद & हैकी धीमा हो जाएगा।

वहां कुछ सी ++ वेब ढांचे हैं, this question देखें।

जहां तक ​​ओपनजीएल जाता है, आपको शायद फ्रेम बफर एक्सटेंशन का उपयोग करने की आवश्यकता होगी क्योंकि जय ने कहा था। फिर आप अपनी छवि को बनावट में प्रस्तुत कर सकते हैं, और पिक्सेल डेटा को पकड़ने के लिए glGetTexImage() का उपयोग कर सकते हैं। वहां से बस उस लाइब्रेरी के साथ इच्छित छवि प्रारूप में सहेजें।

1

मुझे लगता है कि आपके पास पहले से ही कुछ वेबसर्वर तक पहुंच है, उदा। अपाचे या इसी तरह। उस स्थिति में आप CppServ को आजमा सकते हैं।

आपको बस अपने वेबसर्वर को कॉन्फ़िगर करने की आवश्यकता है ताकि यह CppServ के साथ संवाद कर सके। मैं तब प्रस्ताव दूंगा कि आप एक सर्वलेट विकसित करें (साइट पर प्रलेखन की जांच करें) जो बदले में आपके पहले से मौजूद डीएल के साथ संचार करता है। चूंकि डीएलएल ओपनजीएल के बारे में सबकुछ जानता है, इसलिए जेपीईजी इमेज इत्यादि बनाने में कोई समस्या नहीं होनी चाहिए।

3

मेरे पास एक समान project/question था, हालांकि यह एक वेब सेवा नहीं थी, इसके लिए विंडोज़ सेवा में ओपनजीएल प्रतिपादन की आवश्यकता थी। मुझे Vista पर काम करने में कई समस्याएं आईं, हालांकि आखिरकार यह नियमित ओपनजीएल के साथ एक्सपी पर काम करता था।

मैंने अंततः Mesa का उपयोग करने का प्रयास किया, जिसे मैंने अपनी सेवा के लिए एक निजी डीएलएल के रूप में काम करने के लिए बनाया था। यह एक अच्छा निर्णय था क्योंकि अब मैं वास्तव में ओपनजीएल कॉल में कदम उठा सकता हूं और देख सकता हूं कि चीज़ें कहां गलत हो रही थीं। यह सेवा के तहत सॉफ्टवेयर मोड में ठीक चला गया, और जब यह हार्डवेयर तेज नहीं हुआ, तो यह बहुत अच्छा काम करता था।

1

एक वेब-सक्षम 'नियंत्रण इंटरफ़ेस' बनाने के लिए फ्लेक्स जैसे कुछ का उपयोग करने के बारे में, सर्वर बैकएंड के साथ जो वीडियो के रूप में ओपनगल प्रतिपादन को स्ट्रीम करता है? असल में, आप फ़्लेक्स ऐप के माध्यम से कीबोर्ड/माउस इनपुट को रीडायरेक्ट कर रहे हैं और मानक फिल्म घटक का उपयोग करके 'रीयलटाइम' 3 डी गतिविधि प्रदर्शित करने के लिए इसका उपयोग कर रहे हैं।

शैतान के विवरण में, निश्चित रूप से ....

0

आप गूगल से O3D API उपयोग करने के लिए कोशिश कर सकते हैं और सेवा की anysort नहीं करते हैं, यह बहुत अधिक आसान होगा।

+1

अगर मैं गलत हूं तो मुझे सही करें, लेकिन इसके साथ समस्या यह है कि सब कुछ क्लाइंट-साइड पर स्थानीय रूप से चलाएगा, है ना? यह एक "समस्या" है क्योंकि सिमुलेशन काफी भारी हैं और हम उन्हें ब्राउज़र के साथ लगभग किसी भी सिस्टम पर किसी भी उपयोगकर्ता (शायद यहां तक ​​कि मोबाइल वाले) के लिए भी उपलब्ध करा सकते हैं। – user62146

+0

क्या आप वाकई इस तरह की भारी सेवा लागत प्रभावी तरीके से चलाने में सक्षम होंगे? ब्राउज़र से पहुंचने योग्य क्लिंट साइड समाधान आपके लिए बहुत सस्ता होगा। – user109074

0

इस उत्तर बहुत ही बुनियादी और प्राथमिक ध्वनि सकता है, यदि आप इस दृष्टिकोण

  1. की कोशिश की ग्राहक या ठीक इसके विपरीत (सिर्फ समन्वय और इसी तरह)

  2. सर्वर से वेक्टर डेटा भेजें है
  3. इसे क्लाइंट साइड पर प्रस्तुत करें।

इसका मतलब है कि सर्वर केवल गणना कर रहा है और संख्याएं पास की गई हैं और संख्याएं पास की गई हैं।

मैं मानता हूं कि हर ऑब्जेक्ट/मॉडल और बनावट को सदिश बनाने की कोशिश करने की एक छोटी सी विधि नहीं है, लेकिन भारी ग्राफिकल छवियों के बजाय, बहुत तेज़ है, केवल वेक्टर डेटा भेजा जा रहा है।

संबंधित मुद्दे