2012-08-27 8 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セットのタイルがあり、回転させたいと思うようです。しかし、あなたはコーナーに隙間がありますか?代わりに、2x2のタイルセットこの

[][] 
    [][] 

を行うので、この

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

3x3のタイルは、その周りで記入し、中央のタイルの上に と中央に設定します。それはあなたが中央に共通のコーナーで4タイルパターンを有することが重要である場合

は、あなたがこの

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

4x4のタイルセットを行う必要があります。基本的には、あなたの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

これは私が欲しいものです - これは2dエンジンのため、3x3、zは常に0です。私はこれで数学に問題があります。私は試しましたが、運がありません。なぜ賞金が稼動したのか –

+0

OpenGLはあなたのために数学をする必要があります。 z軸上で回転させると、オブジェクトはそのオブジェクトが属する場所に配置されます。あなたは単にそれらを正しい場所に配置する必要があります。中央のタイルを中央に配置し、周囲のタイルを配置する必要があります。センタータイル、センタータイルx、センタータイルy、センタータイルy、センタータイルy、センタータイルy、センタータイルy、センタータイルy、 X、中央タイルy高さ)など – WIllJBD

関連する問題