2012-08-27 4 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)을 4 번 더 (위, 아래, 왼쪽 및 오른쪽) 그려야한다고 생각하므로 모서리에 빈 공간이 표시되지 않습니다. 예를 들어, 회전이 45도이지만이 작업을 수행하는 방법을 알 수 없습니다.

+0

문제를 설명하는 이미지를 올릴 수 있습니까? 나는 네가 의미하는 바를 알고 있다고 생각하지만, 나는 단지 확신하고 싶다. – Tim

답변

4

2x2 세트의 타일이 있고 회전하려고합니다. 그러나 당신이 할 때 모퉁이에 틈이 있습니까? 그래서 대신

[][] 
    [][] 

2 × 2 타일 세트를하는이

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

3 × 3 타일 을 설정 한 다음 그 주위에 작성 중심의 타일을 중심 않습니다. 당신이 중심에있는 일반적인 코너와 4 타일 패턴을 가지고하는 것이 중요 경우

는이

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

4 × 4 타일 세트를해야 할 것입니다. 기본적으로 2x2를 중심으로 구축하십시오. 이제 배경을 회전 시키면 모서리에 틈이 생기지 않습니다.

나머지 ID는 수학입니다.

OpenGL에서 개체가 아닌 세계를 회전시키고 있습니다. 당신이 너무

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

에서 이제 형상이 그려진 플러스 회전 된 위치로 회전합니다

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

을 X, Y, Z 평면을 회전하고 같은 그래서 생각합니다. 따라서 sqare가 x, y, z (10,0,0)에있을 경우 그 점은 여전히 ​​(10,0,0)이지만 X 축은 45 '라고 말하면서 회전 할 것입니다. XY 평면에서 45도 각도로 (0, 0, 0)의 원점으로부터 10 X 단위 떨어진 거리.

오프셋에서 타일을 다시 그리는 것이 전부입니다.

+0

이것은 내가 원하는 것입니다 - 3x3, z는 항상 2d 엔진을 위해 0입니다. 나는 수학에서 문제가있다. 그러나 나는 행운이 없다. 왜 현상금이 활성화되었는지. –

+0

OpenGL이 수학을해야합니다. z 축에서 회전하면 개체가 속한 위치에 배치됩니다. 올바른 위치에 배치하기 만하면됩니다. 센터 타일을 중앙에 배치 한 다음 주변 타일을 배치해야합니다. (센터 타일 x, 센터 타일 y), (센터 타일 x, 센터 타일 y), (센터 타일 X, 센터 타일 y + 높이), 센터 타일 X, 중심 타일 Y 높이) 등등 – WIllJBD