संभवतः आपको लगता है कि यह आपका कैमरा चल रहा है और आपका मॉडल ऐसा नहीं है क्योंकि दृश्य में सभी वस्तुएं एक साथ चल रही हैं?
अपने मॉडल को प्रस्तुत करने और अन्य वस्तुओं को प्रस्तुत करने से पहले, क्या आप मॉडेलव्यू मैट्रिक्स को रीसेट कर रहे हैं? दूसरे शब्दों में, क्या आप उस मॉडल को प्रस्तुत करने के बाद एक और glLoadIdentity() या glPopMatrix() कर रहे हैं जिसके बारे में आप बात कर रहे हैं और अन्य वस्तुओं को प्रस्तुत करने से पहले?
क्योंकि यदि नहीं, तो उस मॉडल पर आपके द्वारा लागू किए गए परिवर्तनों को भी अन्य ऑब्जेक्ट्स पर लागू किया जाएगा, और ऐसा होगा जैसे आप पूरी दुनिया (या कैमरा) घुमाएंगे।
मुझे लगता है कि अपने कोड यद्यपि के साथ एक और समस्या हो सकती है:
glTranslatef(0.0f, 0, -zoom);
glRotatef(yr*20+moveYr*20, 0.0f, 1.0f, 0.0f);
glRotatef(zr*20+moveZr*20, 1.0f, 0.0f, 0.0f);
//Here model render :/
आप बिंदु (0, 0, ज़ूम) के आसपास अपने मॉडल बारी बारी से करने की कोशिश कर रहे हैं?
आम तौर पर, आदेश में एक निश्चित बिंदु (एक्स, वाई, जेड) के चारों ओर घूमने के लिए, आपको कार्य करें:
- अनुवाद (एक्स, वाई, जेड) मूल (0,0,0) द्वारा करने के लिए वेक्टर द्वारा अनुवाद (-x, -y, -z)
- रोटेशन
- वेक्टर द्वारा अनुवाद (एक्स, वाई, जेड)
- ड्रा द्वारा वापस (एक्स, वाई, जेड) अनुवाद मूल प्रदर्शन
यदि आप कोशिश कर रहे हैं दूसरी ओर
glTranslatef(0.0f, 0, zoom); // translate back from origin
यदि आपके आस-पास मॉडल को घुमाने के लिए कोशिश कर रहे हैं: बिंदु (0,0, ज़ूम), चरण 3. याद कर रहे हैं तो इससे पहले कि आप अपने मॉडल प्रस्तुत करना इस जोड़ने की कोशिश कर चारों ओर चक्कर मूल (0,0,0), और इसे z-axis के साथ भी ले जाएं, फिर आप अपने अनुवाद को अपने घूर्णन के बाद आना चाहेंगे, जैसा कि @nonVirtual ने कहा था।
और अन्य ऑब्जेक्ट्स खींचने से पहले मॉडलवेल मैट्रिक्स को रीसेट करना न भूलें। तो पूरा अनुक्रम कुछ ऐसा होगा:
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
#if you want to rotate around (0, 0, -zoom):
glTranslatef(0.0f, 0, -zoom);
glRotatef(yr*20+moveYr*20, 0.0f, 1.0f, 0.0f);
glRotatef(zr*20+moveZr*20, 1.0f, 0.0f, 0.0f);
glTranslatef(0.0f, 0, zoom); // translate back from origin
#else if you want to rotate around (0, 0, 0):
glRotatef(yr*20+moveYr*20, 0.0f, 1.0f, 0.0f);
glRotatef(zr*20+moveZr*20, 1.0f, 0.0f, 0.0f);
glTranslatef(0.0f, 0, -zoom);
#endif
//Here model render :/
glLoadIdentity();
// translate/rotate for other objects if necessary
// draw other objects
आप कैसे जानते हैं कि यह आपका कैमरा है, न कि आपका मॉडल? –
क्या आप कोड नमूना कोड कोड में डाल सकते हैं (कोड का चयन करें और "0101" बटन पर क्लिक करें)? – LarsH
@ एसबी, क्या आप स्टीव बेकर हैं? बस उत्सुक।:-) – LarsH