使用gluUnProject的问题

时间:2011-11-04 16:52:07

标签: android opengl-es

基本上我有 Android 1.5 的应用程序,其中一个GLSurfaceView类在屏幕上显示一个简单的方形多边形。我想学习添加一个新功能,移动方形用手指触摸它的功能。我的意思是当用户触摸方块并移动手指时,应用手指移动方块,直到手指释放屏幕。

我正在尝试使用gluUnProject来获取与手指的确切位置匹配的OpenGL坐标,然后,我将对多边形进行translatef,并且我将多边形移动到该位置(我希望它)

问题是gluUnProject出了什么问题,它给了我这个例外:java.lang.IllegalArgumentException: length - offset < n对gluUnProject的调用。

首先,我将0作为Z win坐标传递,因为我不知道我必须传递什么作为z win坐标,因为win没有Z坐标,只有X和Y. 我测试了传球Z坐标上的1,我得到相同的例外。

float [] outputCoords=getOpenGLCoords(event.getX(), event.getY(), 0);
x=outputCoords[0];
y=outputCoords[1];
z=outputCoords[2];

。 。

public float[] getOpenGLCoords(float xWin,float yWin,float zWin)
{
    int screenW=SectionManager.instance.getDisplayWidth();
    int screenH=SectionManager.instance.getDisplayHeight();
    //CODE FOR TRANSLATING FROM SCREEN COORDINATES TO OPENGL COORDINATES
    mg.getCurrentProjection(MyGl);
    mg.getCurrentModelView(MyGl);
    float [] modelMatrix = new float[16];
    float [] projMatrix = new float[16];
    modelMatrix=mg.mModelView;
    projMatrix=mg.mProjection;          
    int [] mView = new int[4];
    mView[0] = 0;
    mView[1] = 0;
    mView[2] = screenW; //width
    mView[3] = screenH; //height
    float [] outputCoords = new float[3];
    GLU.gluUnProject(xWin, yWin, zWin, modelMatrix, 0, projMatrix, 0, mView, 0, outputCoords, 0);
    return outputCoords;
}

1 个答案:

答案 0 :(得分:3)

我回答了同样的问题here;基本上gluUnproject函数要求你的outputCoords数组的大小为4而不是3.请注意,这些是齐次坐标,所以如果你正在进行透视投影,你仍然必须将前3个除以第4个。