The solution was found by my wife, who is a mathematician.
The order of matrix operations is the key. Basically all matrix operations that are applied are reverse applied to the model during draw operation.
This means that because I execute the rotation operation last to the matrix, it is actually first applied to the model.
Code that works
instance.transform.setToRotation(zVector,r);
instance.transform.scale(JUMP_GATE_SIZE, JUMP_GATE_SIZE * 5, JUMP_GATE_HIGHT);
instance.transform.setTranslation(x, y, 0);
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…