Java 类com.badlogic.gdx.math.Affine2 实例源码

项目:libgdxcn    文件:Group.java   
/** Returns the transform for this group's coordinate system. */
protected Matrix4 computeTransform () {
    Affine2 worldTransform = this.worldTransform;

    float originX = this.originX;
    float originY = this.originY;
    float rotation = this.rotation;
    float scaleX = this.scaleX;
    float scaleY = this.scaleY;

    worldTransform.setToTrnRotScl(x + originX, y + originY, rotation, scaleX, scaleY);
    if (originX != 0 || originY != 0) worldTransform.translate(-originX, -originY);

    // Find the first parent that transforms.
    Group parentGroup = parent;
    while (parentGroup != null) {
        if (parentGroup.transform) break;
        parentGroup = parentGroup.parent;
    }
    if (parentGroup != null) worldTransform.preMul(parentGroup.worldTransform);

    computedTransform.set(worldTransform);
    return computedTransform;
}
项目:libgdxcn    文件:CpuSpriteBatch.java   
/** Sets the transform matrix to be used by this Batch. Even if this is called inside a {@link #begin()}/{@link #end()} block,
 * the current batch is <em>not</em> flushed to the GPU. Instead, for every subsequent draw() the vertices will be transformed
 * on the CPU to match the original batch matrix. This adjustment must be performed until the matrices are realigned by
 * restoring the original matrix, or by calling {@link #flushAndSyncTransformMatrix()} or {@link #end()}. */
public void setTransformMatrix (Affine2 transform) {
    Matrix4 realMatrix = super.getTransformMatrix();

    if (checkEqual(realMatrix, transform)) {
        adjustNeeded = false;
    } else {
        virtualMatrix.setAsAffine(transform);

        if (isDrawing()) {
            adjustNeeded = true;

            // adjust = inverse(real) x virtual
            // real x adjust x vertex = virtual x vertex

            if (haveIdentityRealMatrix) {
                adjustAffine.set(transform);
            } else {
                adjustAffine.set(realMatrix).inv().mul(transform);
            }
        } else {
            realMatrix.setAsAffine(transform);
            haveIdentityRealMatrix = checkIdt(realMatrix);
        }
    }
}
项目:gdx-cclibs    文件:Affine2Serializer.java   
@Override
public void write(Kryo kryo, Output output, Affine2 affine2) {
    output.writeFloat(affine2.m00);
    output.writeFloat(affine2.m01);
    output.writeFloat(affine2.m02);
    output.writeFloat(affine2.m10);
    output.writeFloat(affine2.m11);
    output.writeFloat(affine2.m12);
}
项目:gdx-cclibs    文件:Affine2Serializer.java   
@Override
public Affine2 read(Kryo kryo, Input input, Class<Affine2> type) {
    Affine2 affine2 = new Affine2();
    affine2.m00 = input.readFloat();
    affine2.m01 = input.readFloat();
    affine2.m02 = input.readFloat();
    affine2.m10 = input.readFloat();
    affine2.m11 = input.readFloat();
    affine2.m12 = input.readFloat();
    return affine2;
}
项目:gdx-cclibs    文件:CompliantBatch.java   
@Override
public void draw (TextureRegion region, float width, float height, Affine2 transform) {
    float[] vertices = tempVertices;

    vertices[U1] = region.getU();
    vertices[V1] = region.getV2();
    vertices[U2] = region.getU();
    vertices[V2] = region.getV();
    vertices[U3] = region.getU2();
    vertices[V3] = region.getV();
    vertices[U4] = region.getU2();
    vertices[V4] = region.getV2();

    float color = this.color;
    vertices[C1] = color;
    vertices[C2] = color;
    vertices[C3] = color;
    vertices[C4] = color;

    // construct corner points
    vertices[X1] = transform.m02;
    vertices[Y1] = transform.m12;
    vertices[X2] = transform.m01 * height + transform.m02;
    vertices[Y2] = transform.m11 * height + transform.m12;
    vertices[X3] = transform.m00 * width + transform.m01 * height + transform.m02;
    vertices[Y3] = transform.m10 * width + transform.m11 * height + transform.m12;
    vertices[X4] = transform.m00 * width + transform.m02;
    vertices[Y4] = transform.m10 * width + transform.m12;

    draw(region.getTexture(), vertices, 0, 20);
}
项目:libgdxcn    文件:CpuSpriteBatch.java   
@Override
public void draw (TextureRegion region, float width, float height, Affine2 transform) {
    if (!adjustNeeded) {
        super.draw(region, width, height, transform);
    } else {
        drawAdjusted(region, width, height, transform);
    }
}
项目:libgdxcn    文件:CpuSpriteBatch.java   
private void drawAdjusted (Texture texture, float[] spriteVertices, int offset, int count) {
    if (!drawing) throw new IllegalStateException("CpuSpriteBatch.begin must be called before draw.");

    if (texture != lastTexture) switchTexture(texture);

    Affine2 t = adjustAffine;

    int copyCount = Math.min(vertices.length - idx, count);
    do {
        count -= copyCount;
        while (copyCount > 0) {
            float x = spriteVertices[offset];
            float y = spriteVertices[offset + 1];

            vertices[idx] = t.m00 * x + t.m01 * y + t.m02; // x
            vertices[idx + 1] = t.m10 * x + t.m11 * y + t.m12; // y
            vertices[idx + 2] = spriteVertices[offset + 2]; // color
            vertices[idx + 3] = spriteVertices[offset + 3]; // u
            vertices[idx + 4] = spriteVertices[offset + 4]; // v

            idx += Sprite.VERTEX_SIZE;
            offset += Sprite.VERTEX_SIZE;
            copyCount -= Sprite.VERTEX_SIZE;
        }

        if (count > 0) {
            super.flush();
            copyCount = Math.min(vertices.length, count);
        }
    } while (count > 0);
}
项目:libgdxcn    文件:CpuSpriteBatch.java   
private static boolean checkEqual (Matrix4 matrix, Affine2 affine) {
    final float[] val = matrix.getValues();

    // matrix is assumed to be 2D transformation
    return (val[Matrix4.M00] == affine.m00 && val[Matrix4.M10] == affine.m10 && val[Matrix4.M01] == affine.m01
        && val[Matrix4.M11] == affine.m11 && val[Matrix4.M03] == affine.m02 && val[Matrix4.M13] == affine.m12);
}
项目:gdx-cclibs    文件:Affine2Serializer.java   
@Override
public Affine2 copy (Kryo kryo, Affine2 original) {
    return new Affine2(original);
}
项目:MMORPG_Prototype    文件:NullBatch.java   
@Override
public void draw(TextureRegion region, float width, float height, Affine2 transform)
{
}
项目:libgdxcn    文件:Batch.java   
/** Draws a rectangle transformed by the given matrix. */
public void draw (TextureRegion region, float width, float height, Affine2 transform);
项目:libgdxcn    文件:Affine2Test.java   
private static void checkEqual (Matrix3 matrix, Affine2 affine) {
    checkEqual(matrix, new Matrix3().set(affine));
}
项目:libgdxcn    文件:Affine2Test.java   
private static void checkEqual (Affine2 a, Affine2 b) {
    checkEqual(new Matrix3().set(a), new Matrix3().set(b));
}