2011-06-08 10 views
6

यह सीएलएयर, कोर एनीमेशन फ्रेमवर्क का उपयोग करके आईफोन में 3 डी क्यूब्स पर मेरा दूसरा प्रश्न है, उद्देश्य-सी में लिखा गया है। मेरे पहले प्रश्न के लिए कृपया यहां 3D Cube Problem! Part 1 पर जाएं।3 डी क्यूब समस्या, भाग 2

मैं इस लिंक

http://www.sunsetlakesoftware.com/2008/10/22/3-d-rotation-without-trackball

समस्या है मेरी घन घूर्णन कर रहा है एक्स अक्ष में चित्र में दिखाया गया गुलाबी रेखा के साथ से मेरी 3 डी घन बारी बारी से करने ब्रैड Larsons कोड का उपयोग कर रहा हूँ।

enter image description here

लेकिन मैं चित्र में दिखाया गया काला रेखा के साथ एक्स अक्ष के चारों ओर घुमाने के लिए चाहते हैं।
अब मेरे कोड में मेरे पास मेरे दृश्य पर कोई गुलाबी रेखा या काला रेखा नहीं है, इसलिए कोई भी कृपया इसके साथ मेरी सहायता कर सकता है।

इसे यहाँ मदद करता है touchesMoved: विधि में मेरी घन घूर्णन के लिए कोड

- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event 
{ 
    CGPoint location = [[touches anyObject] locationInView:self]; 
    CATransform3D currentTransform = currentLayer.sublayerTransform; 
    CGFloat displacementInX = location.x - previousLocation.x; 
    CGFloat displacementInY = previousLocation.y - location.y; 
    CGFloat totalRotation = sqrt(displacementInX * displacementInX + displacementInY * displacementInY); 
    CGFloat x = (displacementInX/totalRotation) * currentTransform.m12 + (displacementInY/totalRotation) * currentTransform.m11; 
    CATransform3D rotationalTransform = CATransform3DRotate(currentTransform, totalRotation * M_PI/180.0, x, y, 0); 
    currentLayer.sublayerTransform = rotationalTransform; 
} 

previousLocation एक CGPointtouchesBegan: विधि में प्रारंभ है, और currentLayer CALayer जहां मैं इस घन बनाया है है।

आपकी मदद के लिए धन्यवाद।

पीएस। यदि आप जानना चाहते हैं कि मैंने इस घन को कैसे बनाया है तो मुझे

+0

मुझे यह जानना अच्छा लगेगा कि आपने घन कैसे बनाया है। मैं आपसे एक समान काम करने की कोशिश कर रहा हूं। अब तक कोई प्रगति? – Jeremy

+1

मैंने प्रोजेक्ट को स्क्रैप किया है लेकिन मुझे लगता है कि मैं आपको क्वार्ट्ज कोर में घन बनाने के लिए कोड दे सकता हूं। – Robin

+0

अरे, मुझे 3 डी और सभी में 'कैलियर' घूर्णन करने वाला एक बहुत ही समान कोड मिला, लेकिन मैंने साइमन ली के सुझाव के रूप में 'एंकरपॉइंट' को बदलकर समस्या हल की। आपने इसके साथ कुछ गलत किया होगा। कृपया परत निर्माण कोड साझा करें, और मैं इसे हल कर दूंगा ... या, यदि आवश्यक हो तो मैं अपना स्वयं का घन कर सकता हूं। – Mazyod

उत्तर

3

ऐसा लगता है कि आपको पहले घूर्णन करने से पहले परतों का अनुवाद करने की आवश्यकता है।

पिवट/एंकर पॉइंट लेने के बजाय आप परतों को अपने प्राकृतिक उत्पत्ति से दूर करने के लिए पहले CATransform3DTranslate का उपयोग कर सकते हैं और इसके बाद CATransform3DRotate का उपयोग कर सकते हैं।

इससे यह पता लगाने में मदद मिलेगी कि यह कैसे लागू किया जा सकता है यह निर्धारित करने के लिए कि आप अपना घन कैसे बनाते हैं।

+0

में उस गुलाबी रेखा के साथ अभी भी घूमना नहीं है, मुझे इसे आज़माएं और इस पर आपको वापस आएं। – Robin

+0

अरे वास्तव में काम किया, आपकी मदद के लिए धन्यवाद। नहीं पता था कि यह इतना आसान होगा। धन्यवाद। – Robin

3

केंद्र में एंड्रॉइंट सेट करें; यदि एक कैलियर से निपटने के बाद ...

[myLayer setAnchorPoint:CGPointMake(0.5, 0.5)]; 
+0

चित्र – Robin

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