2011-12-11 13 views
5

वेबलॉग में टकराव का पता लगाने के बिना, किसी भी पुस्तकालय का उपयोग किए बिना तीन.जेएस?वेबग्ल में टक्कर का पता लगाने के लिए कैसे?

+1

ऐसा करना मुश्किल हो सकता है। वैसे भी, आप उसके लिए पुस्तकालय क्यों नहीं चाहते हैं? –

+0

मैं एंटी-लाइब्रेरी – ajax333221

+1

@ AJAX333221 पुस्तकालय भी हमारे जीवन को और अधिक आसान बना देता हूं।:) –

उत्तर

13

कैसे WebGL में टक्कर का पता लगाने के

आप नहीं है। वेबजीएल, ओपनजीएल की तरह ही सामान खींचने के लिए है। यह एक दृश्य का प्रबंधन नहीं करता है, इसमें "ऑब्जेक्ट्स" या टकराव जैसी उच्च स्तरीय चीजों की कोई धारणा नहीं है। यह सब बिंदुओं, रेखाओं, त्रिकोण और शेडर्स के बारे में है।

दृश्य प्रबंधन या टकराव से संबंधित कुछ भी वेबजीएल (और ओपनजीएल) के दायरे से बाहर है।

+0

तो मैं इसे जेएस में कैसे गणना कर सकता हूं? –

+3

@ डैनीफ़ॉक्स: वैसे ही आप इसे किसी अन्य भाषा में गणना करेंगे: विभिन्न ज्यामितीय चौराहे परीक्षण समीकरणों को हल करके, और परिणाम से टकराव निकालने के द्वारा। विषय के बारे में एक उत्कृष्ट पुस्तक है: http://realtimecollisiondetection.net/ – datenwolf

+0

आप निश्चित रूप से शेडर्स का उपयोग करके ओपनजीएल (और शायद वेबजीएल) के साथ टकराव को हल कर सकते हैं। वस्तुओं को अलग-अलग रंग दें और फिर मिश्रण का उपयोग करके दोनों को गठबंधन करें। यदि परिणामस्वरूप छवि पर एक या अधिक पिक्सल हैं जो दो ऑब्जेक्ट्स से अलग रंग है (उदाहरण के लिए ऑब्जेक्ट से कुछ पिक्सेल अन्य ऑब्जेक्ट पिक्सल के साथ मिश्रित होते हैं), तो टक्कर होती है। – Willem

3

GPU पर रे टकराव का पता लगाने के लिए यह एक आसान तरीका है। विषय के बारे में निम्न ब्लॉग पोस्ट को चेकआउट करें।

http://blog.xeolabs.com/ray-picking-in-scenejs

मुख्य विचार एक बनावट के दृश्य (एक FBO का प्रयोग करके) प्रस्तुत करने के लिए एक शेडर कि रंग के बजाय वस्तु आईडी बचाता का उपयोग कर रहा है। फिर आप इस बनावट में एक लुकअप कर सकते हैं यह देखने के लिए कि किरण किनारे से टकराती है।

+0

यह केवल दृश्य बिंदु से आने वाली किरणों या गैर-रूढ़िवादी ज्यामिति के परीक्षण के लिए काम करता है। – datenwolf

+0

हां, समाधान केवल रे टकराव के साथ काम करता है, लेकिन सवाल यह नहीं बताता कि टकराव का पता लगाने की किस तरह की आवश्यकता थी। मेरा मुद्दा यह था कि कुछ टक्कर परीक्षण जीपीयू पर पूरी तरह से ठीक चल सकते हैं (लेकिन यह एक सामान्य समाधान नहीं है) – Mortennobel

+0

धन्यवाद, लेकिन यह scene.js में है। मैं इसे बिना किसी लाइब्रेरी के करना चाहता हूं –

1

रविवार से मैं एक ही समस्या को हल करने की कोशिश कर रहा हूं। हालांकि www में बहुत अधिक जानकारी है, लेकिन मैं इसे अपने उदाहरण-कार्यक्रम पर काम करने में सक्षम नहीं था। जैसे ही मैं इसे हल करता हूं, मैं यहां अपना उदाहरण पोस्ट करूंगा।

मेरी आखिरी कोशिश वेबजीएल के लिए ग्लू-अनप्रोजेक्ट पोर्ट का उपयोग करना था।

समारोह (Winx, Winy, winZ, मॉडल, proj, देखने के लिए, objPos)

मैं अपने दृश्य-ड्राइंग समारोह से सीधे इस समारोह कॉल करने के लिए कोशिश की है: यह एक निम्नलिखित मानकों की जरूरत है परीक्षण उद्देश्यों के लिए।

var pMatrix = new mat4.ortho(iL, iR, iB, iT, fNearZ, farZ); 
var mvMatrix = new mat4.create(); 

mat4.identity(mvMatrix); 
mat4.translate(mvMatrix,[0,0,-40]); 

var oMouseMatrix = mat4.create(); 
mat4.identity(oMouseMatrix); 

//Rotate eye :-S 
mat4.rotate(oMouseMatrix,((this.fAnimationXAngle/10) * Math.PI)/360.0,[0,1,0]); 
mat4.rotate(oMouseMatrix,((this.fAnimationYAngle/10) * Math.PI)/360.0,[1,0,0]); 

mat4.multiply(oMouseMatrix, mvMatrix, mvMatrix); 

//Rotate model 
mat4.rotateX(mvMatrix,this.fRotX * Math.PI/180.0); 
mat4.rotateY(mvMatrix,this.fRotY * Math.PI/180.0); 
mat4.rotateZ(mvMatrix,this.fRotZ * Math.PI/180.0); 



var aTest = this.unProject(
    this.pLastMouse.x, 
    this.pLastMouse.y, 
    0, 
    mvMatrix, 
    pMatrix, 
    [0,0,this.iWidth,this.iHeight] 
); 

this.iWidth & this.iHeight कैनवास और व्यूपोर्ट चौड़ाई/ऊंचाई कर रहे हैं - this.pLastMouse.x & .y कैनवास

zI.debug(aTest); 

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

ओपनजीएल में यह मेरे लिए बहुत आसान था।

+0

धन्यवाद, मैं इसे आज़माउंगा –

1

मैं निम्नलिखित वेबपेज (दुर्भाग्य से केवल जर्मन भाषा में उपलब्ध) http://www.peter-strohm.de/webgl/webgltutorial8.php

हम टक्कर पता लगाने को लागू करने में सक्षम थे की सिफारिश करेंगे और यहां तक ​​कि एक के लिए अतिरिक्त जानकारी के साथ आईडी मानचित्रण (जैसे शो टूलटिप्स का उपयोग कर एक सर्वर पर API कॉल प्रदर्शन कर सकता है दृश्य में कुछ वस्तु)।

मुझे आशा है कि इससे थोड़ा सा मदद मिलेगी।

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