+ -
当前位置:首页 → 问答吧 → 請問gluUnProject和gluProject可逆嗎?我現在總是差四倍多

請問gluUnProject和gluProject可逆嗎?我現在總是差四倍多

时间:2011-08-28

来源:互联网

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應該增大才對,現在不變且不可逆,誰知道是怎麼回事?

作者: peng6662001   发布时间: 2011-08-28

个人再顶一下

作者: peng6662001   发布时间: 2011-10-08

还是没人回复

作者: peng6662001   发布时间: 2011-12-20