public void Project(GL10 gl,float x,float y,float z)                //傳入世界座標
        {
                int viewport[] = new int[4];
        float[] model = new float[16];
        float[] proj = new float[16];
        
        Log.d("SP","x = " + x + ",y = " + y);
        
        gl.glGetIntegerv(GL11.GL_VIEWPORT,viewport,0); 
        
        ((GL11)gl).glGetFloatv(GL11.GL_MODELVIEW_MATRIX, model, 0);
        ((GL11)gl).glGetFloatv(GL11.GL_PROJECTION_MATRIX, proj, 0);
        
        float[] ret = new float[4];
        GLU.gluProject(x,y,z, model,0,proj, 0,viewport, 0, ret, 0);               //得到屏幕座標
        Log.d("SP","x = " + ret[0] + ",y = " + ret[1]);        
   
        GLU.gluUnProject(ret[0], ret[1], ret[2], model, 0, proj, 0, viewport, 0, ret, 0);    //把屏幕座標再傳回gluUnproject,期望得到傳入函數的世界座標.
        Log.d("SP","x = " + ret[0] + ",y = " + ret[1]);  
        Log.d("SP","");
        }
我的代碼上加了註釋.現在把世界座標轉換為屏幕座標,看似正確,但把屏幕座標利用相同的模型矩陣和透視矩陣,得到的世界座標,僅相當於傳入參數的四分之一.而且,不管怎麼修改z的值,得到的x,y都不會改變.我用的GLU.gluPerspective(gl,100.0f,(float)width/(float)height,0.1f,100.0f);按理我的z座標減小,x,y應該增大才對,現在不變且不可逆,誰知道是怎麼回事?