Параллакс 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 градусов, но я не могу понять, как это сделать.

Solutions Collecting From Web of "Параллакс XY и расчет вращения – плитка"

Кажется, из объяснения, что у вас есть 2×2 набор плиток, и вы хотели бы повернуть их. Но когда вы делаете, есть пробелы в углах? Поэтому вместо этого

  [][] [][] 

Набор из 2×2 плитки делают это

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

3×3 плитки и центрируйте ее на центральных плитах, затем залейте вокруг нее.

Если важно, чтобы у вас был рисунок из 4 плиток с общим углом в центре, вам придется это сделать

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

4×4 Плитка. В основном просто создавайте свои 2×2. Теперь, когда вы вращаете свой фон, в углах не будет зазора.

Остальное id просто математика.

В opengl вы вращаете мир, а не объект. Поэтому, чтобы думать об этом, вы вращаете плоскости x, y, z из

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

слишком

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

Поэтому теперь геометрия будет повернута до положения, которое было нарисовано плюс вращение. Поэтому, если бы у меня была квадратура с углом в x, y, z (10,0,0), эта точка все равно была бы на (10,0,0), но ось X была бы повернута, скажем, 45 ', поэтому объект будет На расстоянии 10 X от расстояния (0,0,0) под углом 45 ° на плоскости XY.

Так что все дело в переделке вашей плитки, в смещениях.