क्या गहराई मूल्य के बिना 2 डी बिंदु 3 डी में कनवर्ट करने के लिए SceneKit's unprojectPoint का उपयोग करना संभव है? मुझे केवल एक्सजेड विमान में 3 डी स्थान ढूंढना होगा। वाई हमेशा 0 या कोई मान हो सकता है क्योंकि मैं इसका उपयोग नहीं कर रहा हूं।गहराई मूल्य के बिना SceneKit के unprojectPoint का उपयोग करके 2 डी बिंदु से 3 डी को कैसे परिवर्तित करें?
मैं आईओएस 8 बीटा के लिए ऐसा करने की कोशिश कर रहा हूं।
मैं इस तरह जावास्क्रिप्ट और Three.js (WebGL) के साथ कुछ ऐसा ही था:
function getMouse3D(x, y) {
var pos = new THREE.Vector3(0, 0, 0);
var pMouse = new THREE.Vector3(
(x/renderer.domElement.width) * 2 - 1,
-(y/renderer.domElement.height) * 2 + 1,
1
);
//
projector.unprojectVector(pMouse, camera);
var cam = camera.position;
var m = pMouse.y/(pMouse.y - cam.y);
pos.x = pMouse.x + (cam.x - pMouse.x) * m;
pos.z = pMouse.z + (cam.z - pMouse.z) * m;
return pos;
};
लेकिन मैं कैसे SceneKit को unprojectVector साथ भाग अनुवाद करने के लिए पता नहीं है।
मैं जो करना चाहता हूं वह केवल एक्सजेड विमान में ऑब्जेक्ट खींचने में सक्षम होना है। ऊर्ध्वाधर धुरी वाई को अनदेखा कर दिया जाएगा।
चूंकि ऑब्जेक्ट को विमान के साथ स्थानांतरित करने की आवश्यकता होगी, इसलिए एक समाधान हिटटेस्ट विधि का उपयोग करना होगा, लेकिन मुझे नहीं लगता कि प्रत्येक स्पर्श/ड्रैग ईवेंट के लिए प्रदर्शन करने के लिए प्रदर्शन के मामले में बहुत अच्छा है। इसके अलावा, यह वस्तु को विमान के बाहर या तो स्थानांतरित करने की अनुमति नहीं देगा।
मैंने स्वीकृत उत्तर here पर आधारित समाधान का प्रयास किया है, लेकिन यह काम नहीं किया। UnprojectPoint के लिए एक गहराई मान का उपयोग करना, यदि ऑब्जेक्ट को +/- Z दिशा में खींचें तो ऑब्जेक्ट बहुत लंबे समय तक उंगली के नीचे नहीं रहता है, लेकिन इसके बजाय यह इससे दूर चला जाता है। मुझे ड्रैग किए गए ऑब्जेक्ट को उंगली के नीचे रहने की आवश्यकता है इससे कोई फर्क नहीं पड़ता कि यह एक्सजेड प्लेन में कहां स्थानांतरित हो गया है।
कृपया यह देखने के लिए मेरा उत्तर देखें कि मैं क्या करने की कोशिश कर रहा हूं। – CAM