gpt4 book ai didi

android - gluUnProject 总是返回零

转载 作者:行者123 更新时间:2023-11-29 02:11:15 29 4
gpt4 key购买 nike

我需要 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));
}

现在我搜索并找到了 this forum post他们得出的结论是使用 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 是否重要?如果是,我该如何使用 double

谢谢

编辑:

有人告诉我 gluUnproject 在离 near far 裁剪平面太近时会失败,所以当 near 为 0 而 far 为 -10 时,我将 winz 设置为 -5。这对输出没有影响。

我还记录了 newcoords[] 数组的每个部分,它们都返回了 NaN(不是数字)的东西,这可能是问题所在还是算法中更高层的东西

最佳答案

我猜你正在开发模拟器?它的 OpenGL 实现有很多问题,测试后我发现它会为以下调用返回全零:

gl11.glGetIntegerv(GL11.GL_VIEWPORT, viewport, 0);
gl11.glGetFloatv(GL11.GL_MODELVIEW_MATRIX, modelview, 0);
gl11.glGetFloatv(GL11.GL_PROJECTION_MATRIX, projection, 0);

gluUnProject() 函数需要计算组合模型 View 投影矩阵的逆矩阵,由于这些都是零,因此逆矩阵不存在并将由 NaN 组成。因此,生成的 newcoords 向量也是所有 Nans。

在具有正确 OpenGL 实现的设备上尝试它,它应该可以工作。请记住,仍然除以 newcoords[3] ;-)

关于android - gluUnProject 总是返回零,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7262109/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com