Kinect + 3D प्रदर्शन + HTML5

Kinect सेंसर का उपयोग करके एक इंटरैक्टिव 3D HTML5 एप्लिकेशन बनाने की विशेषताएं।

कार्य

3 डी डिस्प्ले पर हमारी महान मातृभूमि के विभिन्न हिस्सों में कैप्चर की गई 3 डी तस्वीरें और वीडियो प्रदर्शित करें, ताकि प्लेबैक तब शुरू हो जब उपयोगकर्ता स्क्रीन के सामने रखे गए नक्शे पर एक निश्चित भौगोलिक क्षेत्र में प्रवेश करता है। आदर्श रूप से, स्टैंड में 6 3D डिस्प्ले और 3 Kinect सेंसर शामिल होने चाहिए जो स्क्रीन के सामने भू-दृश्य के प्रसार को अधिकतम करें और कई उपयोगकर्ताओं को अपने डिस्प्ले को नियंत्रित करने की अनुमति दें।

निर्णय

चर्चा के दौरान भी, हमने पूर्ण विकसित त्रिविम (गैर-एनाग्लिफ़िक) 3 डी सामग्री को प्रदर्शित करने के मुद्दे का पता लगाया। संभावित कार्यान्वयन मार्गों में एनवीडिया 3 डी विजन तकनीक थी, जिसके चालक और फ़ायरफ़ॉक्स के लिए ऐड-ऑन ने 3 डी प्रदर्शित करना संभव बना दिया।
3 डी डिस्प्ले की तकनीकों के बीच, हम सक्रिय 3 डी (शटर ग्लास + 100 हर्ट्ज फ्रेम-बाय-फ्रेम स्कैनिंग) की तुलना में कम खर्चीले में बंद हो गए, अर्थात्, बाएं और दाएं चैनलों के पृथक्करण की प्रगतिशील तकनीक के साथ निष्क्रिय ध्रुवीकृत 3 डी तकनीक। स्क्रीन के सापेक्ष सिर को घुमाते और मोड़ते समय ध्रुवीकरण को सबसे उपयुक्त चुना गया।
यह ध्यान दिया जाना चाहिए कि एनवीडिया 3 डी विज़न ड्राइवर सर्वाहारी निकला और किसी भी प्रकार के प्रदर्शन के साथ काम करने में सक्षम था (कम से कम हमारे निपटान में उपलब्ध अधिकांश के साथ)। हालांकि, स्लैड एपीआई, अस्थिरता, और एनवीडिया की वाणिज्यिक नीतियों ने जल्दी से पसंद पर संदेह डाला। तो अपने ड्राइवर को बनाने के लिए विचार आया। और तर्क इस प्रकार थे:
  1. बाएं और दाएं चैनलों के लाइन आउटपुट के साथ प्रौद्योगिकी का अर्थ है दो छवियों की उपस्थिति डॉक-बाय-साइड (ऊपर-नीचे या बाएं-दाएं),
  2. यदि आप "बाएं / दाएं" लाइनों में फुलएचडी साइड-बाय-साइड छवि पर बारी-बारी से पिक्सेल को फिर से जोड़ते हैं, और एलसीडी मैट्रिक्स पर "पिक्सेल से पिक्सेल" रेखापुंज का सख्त प्रदर्शन भी प्राप्त करते हैं, तो आप बिना ड्राइवर के 3 डी डिस्प्ले हासिल कर सकते हैं।

पक्ष की ओर से

छवि

जिल्द बनाना

छवि

तो तकनीकी अंतर्ज्ञान हमें शादियों तक ले गया। आरंभ करने के लिए, हमने थ्रीजीएस फ्रेमवर्क के उदाहरणों के साथ वेबजीएल के लिए जीएलएसएल का परीक्षण किया। शेडर को कई पंक्तियों में लिखा गया था: रेखा की समता की जाँच, यदि विषम - बाईं तस्वीर से पिक्सेल प्रदर्शित करें, यहां तक ​​कि - दाईं ओर से। यह सब अच्छी तरह से शुरू हुआ और एचडी पर तेजी से काम किया - लगभग 30 एफपीएस (विंडोज 7, क्रोम, एनवीडिया जीपीयू)। फुलएचडी वीडियो ने इस आंकड़े को लगभग 12 एफपीएस तक घटा दिया। प्रोफाइलर ने एक अड़चन दिखाई - प्रत्येक ड्रॉ कॉल से पहले एक विशाल बफर को एक बनावट के साथ स्थानांतरित करना आवश्यक था जो प्रत्येक फ्रेम में बदल गया। और "मक्खी पर" को हराना संभव नहीं था। फिर फ्लैश बचाव में आया और कुख्यात पिक्सेल बेंडर (2 डी) तकनीक। यह अनिवार्य रूप से एक ही GLSL सिंटैक्स है, बस थोड़ा अलग विनिर्देश है। कई घंटों के लिए हमने 3 डी प्लेयर का एक फ्लैश घटक लागू किया, जिसमें एक साधारण जेएस एपीआई था, जितना संभव हो HTML5 <video> के करीब। इसलिए हमारे पास जेएस रैपर में 3 डी प्लेयर के दो कार्यान्वयन हैं। फुलएचडी वीडियो पर एक फ्लैश 3 डी प्लेयर के साथ टेस्ट ने अधिक अच्छे परिणाम दिखाए ~ 25fps। इसलिए हमने नम को हराया।

WebGL

#ifdef GL_ES precision highp float; #endif uniform sampler2D Sample0; varying vec2 vUv; void main () { vec3 colour; float row = ceil(vUv.y * 1080.0); vec2 pixel; float mod = mod(row, 2.0); if (mod == 0.0) { pixel = vec2(vUv.x / 2.0, vUv.y); } else { pixel = vec2(0.5 + vUv.x / 2.0, vUv.y); } colour = texture2D(Sample0, pixel).xyz; gl_FragColor.xyz = colour; gl_FragColor.w = 1.0; } 


पिक्सेल बेंडर

 <languageVersion: 1.0;> kernel interlace < namespace : "Interlace 3D"; vendor : "NMT"; version : 2; description : "Create interlaced video from side-by-side"; > { input image4 oImage; output float4 outputColor; parameter bool swapEyes < description: "swap eyes"; defaultValue: false; >; void evaluatePixel() { float2 relativePos = outCoord(); float modulus = mod(relativePos.y, 2.0); if (swapEyes && modulus <= 1.0 || !swapEyes && modulus >= 1.0) { relativePos.x = 960.0 + relativePos.x / 2.0; } else { relativePos.x = relativePos.x / 2.0; } outputColor = sampleLinear( oImage, relativePos ); } } 


और फिर यह आसान है! हमने WebSocket के माध्यम से JS के साथ Kinect tcp-server का एक बंडल लागू किया। हमने कई क्षेत्रों के लिए Kinect दृश्यता क्षेत्र में उपयोगकर्ता ट्रैकिंग को अनुकूलित किया, प्रभावों पर खराब कर दिया, डिज़ाइन बनाया और यह काम किया !

परिणाम

चालक बनाम शेडर



Kinect



3 डी डिस्प्ले

Source: https://habr.com/ru/post/In172225/


All Articles