2012-08-27 45 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構建。現在當你旋轉你的背景時,角落裏將沒有間隙。

其餘的id只是數學。

在opengl中,您正在旋轉的是世界,而不是對象。所以像這樣你從

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

旋轉X,Y,Z三個平面過

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

所以現在幾何圖形將旋轉到其被繪製加旋轉位置想起來。所以如果我在x,y,z(10,0,0)有一個角點的sqare,該點仍然在(10,0,0),但X軸已經旋轉了45',所以對象會apear 10 X單位距XY平面上45'角處的(0,0,0)原點的距離。

所以它只是關於重新繪製您的瓷磚,在偏移。

+0

這就是我想要的 - 一個3x3,z總是0,因爲這是2d引擎。我在這方面有數學問題,我嘗試過但沒有運氣。這就是賞金激活的原因。 –

+0

Opengl應該爲你做數學。如果您在z軸上旋轉它,對象將被放置在它們所屬的位置。你只需把它們放在正確的位置。所以你需要居中放置瓷磚,然後放置周圍的瓷磚。 (中心瓷磚x加寬度,中心瓷磚y),(中心x寬度,中心瓷磚y),(中心瓷磚X,中心瓷磚y +高度),(中心瓷磚y X,中心瓦片Y高度)等等 – WIllJBD