Мне нужен gluUnProject, чтобы преобразовать экранные координаты в мировые координаты, и сейчас у меня почти все работает.Когда мое приложение запускается, оно точно сообщает мне координаты на экране, которые, как я знаю, хранятся в моем потоке рендерера, а затем выкачивает экранные координаты.К сожалению, координаты экрана, похоже, не влияют на мировые координаты, а мировые координаты остаются на нуле.
Вот мой метод gluUnProject
public void vector3 (GL11 gl){
int[] viewport = new int[4];
float[] modelview = new float[16];
float[] projection = new float[16];
float winx, winy, winz;
float[] newcoords = new float[4];
gl.glGetIntegerv(GL11.GL_VIEWPORT, viewport, 0);
((GL11) gl).glGetFloatv(GL11.GL_MODELVIEW_MATRIX, modelview, 0);
((GL11) gl).glGetFloatv(GL11.GL_PROJECTION_MATRIX, projection, 0);
winx = (float)setx;
winy = (float)viewport[3] - sety;
winz = 0;
GLU.gluUnProject(setx, (float)viewport[3] - sety, 0, modelview, 0, projection, 0, viewport, 0, newcoords, 0);
posx = (int)newcoords[0];
posy = (int)newcoords[1];
posz = (int)newcoords[2];
Log.d(TAG, "x= " + String.valueOf(posx));
Log.d(TAG, "y= " + String.valueOf(posy));
Log.d(TAG, "z= " + String.valueOf(posz));
}
Теперь я искал и нашел это сообщение на форуме , и они пришли к выводу, что это связано с использованием getFloatvвместо getDoublev, но, похоже, getDoublev не поддерживается GL11
The method glGetDoublev(int, float[], int) is undefined for the type GL11
, а также
The method glGetDoublev(int, double[], int) is undefined for the type GL11
, если значение double и float имеет значение, и если да, то как мне использоватьудваивается
Спасибо
РЕДАКТИРОВАТЬ:
Мне сказали, что gluUnproject терпит неудачу, когда слишком близко к ближней дальней плоскости отсечения, поэтому я установил winz в -5, когда рядом 0 и далеко -10.Это не повлияло на вывод.
Я также зарегистрировал каждую часть массива newcoords [], и все они возвращают что-то, что является NaN (не числом), может ли это быть проблемой или чем-то более высоким в алгоритме