2012-08-27 9 views
12

मैं अच्छा काम कर रहा है जब कैमरा घुमाया नहीं है मेरी लंबन पृष्ठभूमि ड्राइंगलंबन XY और रोटेशन - टाइल गणना

pGLState.pushModelViewGLMatrix(); 
final float cameraWidth = pCamera.getWidth(); 
final float cameraHeight = pCamera.getHeight(); 
final float shapeWidthScaled = this.mShape.getWidthScaled(); 
final float shapeHeightScaled = this.mShape.getHeightScaled(); 

//reposition 

float baseOffsetX = (pParallaxValueX * this.mParallaxFactorX); 
if (this.mRepeatX) { 
    baseOffsetX = baseOffsetX % shapeWidthScaled; 
    while(baseOffsetX > 0) { 
      baseOffsetX -= shapeWidthScaled; 
    } 
} 

float baseOffsetY = (pParallaxValueY * this.mParallaxFactorY); 
if (this.mRepeatY) { 
    baseOffsetY = baseOffsetY % shapeHeightScaled; 
    while(baseOffsetY > 0) { 
     baseOffsetY -= shapeHeightScaled; 
    }        
} 

//draw 

pGLState.translateModelViewGLMatrixf(baseOffsetX, baseOffsetY, 0); 
float currentMaxX = baseOffsetX; 
float currentMaxY = baseOffsetY; 
do {  

    //rows  

    this.mShape.onDraw(pGLState, pCamera); 
    if (this.mRepeatY) { 
     currentMaxY = baseOffsetY; 

     //columns 

     do {  
      pGLState.translateModelViewGLMatrixf(0, shapeHeightScaled, 0); 
      currentMaxY += shapeHeightScaled;            
      this.mShape.onDraw(pGLState, pCamera); 
     } while(currentMaxY < cameraHeight);  

     //end columns 

     pGLState.translateModelViewGLMatrixf(0, -currentMaxY + baseOffsetY, 0);          
    } 

pGLState.translateModelViewGLMatrixf(shapeWidthScaled, 0, 0); 
currentMaxX += shapeWidthScaled; 
} while (this.mRepeatX && currentMaxX < cameraWidth); 

//end rows 

pGLState.popModelViewGLMatrix(); 

सब कुछ के लिए इस कोड है।

जब यह घुमाया जाता है, मुझे लगता है कि टाइल (this.mShape) चार बार (शीर्ष, नीचे, बाएं और दाएं) खींचा जाना चाहिए ताकि कोने में कोई खाली स्थान दिखाई न दे। उदाहरण के लिए, जब घूर्णन 45 डिग्री होता है, लेकिन मैं यह नहीं समझ सकता कि यह कैसे करें।

+0

क्या आप ऐसी छवि डाल सकते हैं जो समस्या को समझाती है? मुझे लगता है कि मुझे पता है कि आपका क्या मतलब है, लेकिन मैं बस यह सुनिश्चित करना चाहता हूं। – Tim

उत्तर

4

यह स्पष्टीकरण से लगता है कि आपके पास 2x2 टाइल्स सेट हैं और आप उन्हें घुमाने के लिए चाहते हैं। लेकिन जब आप कोनों में अंतराल होते हैं? तो बजाय इस

[][] 
    [][] 

2x2 टाइल सेट करने का यह

[][][] 
    [][][] 
    [][][] 

3x3 टाइल की स्थापना की और केंद्र टाइल पर यह केंद्र, तो यह चारों ओर में भरने से करते हैं।

यदि यह महत्वपूर्ण है कि आप केंद्र में सामान्य कोने के साथ एक 4 टाइल पैटर्न है तो आप इस

[][][][] 
    [][][][] 
    [][][][] 
    [][][][] 

4x4 टाइल सेट करना होगा। मूल रूप से बस अपने 2x2 के आसपास बनाएँ। अब जब आप अपनी पृष्ठभूमि घुमाते हैं तो कोनों में कोई अंतर नहीं होगा।

शेष आईडी बस गणित।

ओपनग्ल में आप दुनिया को घूर्णन कर रहे हैं, वस्तु नहीं। तो यह सोचने के लिए इस तरह आप भी

 \ /
     \ /
     \/
     >< 
    /\ 
    / \ 
    / \ 

तो अब ज्यामिति स्थिति है जो इसे तैयार प्लस रोटेशन था घुमाया जाएगा से

 | 
     | 
    --------- 
     | 
     | 

एक्स, वाई, जेड विमानों परिक्रमा कर रहे हैं। तो अगर मेरे पास एक्स, वाई, जेड (10,0,0) पर एक कोने के साथ एक वर्ग था, तो वह बिंदु अभी भी (10,0,0) पर होगा लेकिन एक्स अक्ष घुमाएगी 45 'कहेंगे तो ऑब्जेक्ट होगा XY विमान पर 45 'कोण पर (0,0,0) की उत्पत्ति से 10 एक्स-इकाइयों की दूरी।

तो यह सब आपके टाइल को ऑफसेट पर फिर से निकालने के बारे में है।

+0

यह वही है जो मैं चाहता हूं - एक 3x3, z हमेशा 0 है क्योंकि यह 2 डी इंजन के लिए है। मुझे गणित के साथ समस्या है मैंने कोशिश की है लेकिन भाग्य के बिना। यही कारण है कि बक्षीस सक्रिय है। –

+0

ओपनएलजी आपके लिए गणित करना चाहिए। यदि आप इसे z-axis पर घुमाते हैं, तो वस्तुओं को रखा जाएगा जहां वे संबंधित हैं। आपको बस उन्हें सही स्थानों पर रखना होगा। तो आपको केंद्र टाइल को केन्द्रित करने की आवश्यकता है, और उसके बाद आसपास के टाइल्स रखें। तो केंद्र टाइल रखें, जगह पर एक टाइल रखें (केंद्र टाइल्स एक्स प्लस चौड़ाई, केंद्र टाइल्स वाई), (सेंटर्टाइल एक्स - चौड़ाई, केंद्र टाइल वाई), (सेंटर टाइल एक्स, सेंटर टाइल वाई + ऊंचाई), (केंद्र टाइल एक्स, केंद्र टाइल वाई ऊंचाई) और इतने पर – WIllJBD

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