我正在尝试使用gluUnProject将Windows coords转换为世界坐标.我不是试图在模拟器或较旧的Android系统(使用OpenGL ES v1.0)中获取工作样本,这不是关于GL功能可用性的问题.我正在尝试使用OpenGL ES 1.1处理真实设备,glGet函数返回非零结果.
有样品:
public Vector3 translateScreenCoordsToWorld(Vector2 screenCoords) {
gl.glLoadIdentity();
final Matrix4x4 modelViewMatrix = new Matrix4x4();
final Matrix4x4 projectMatrix = new Matrix4x4();
int[] viewVectorParams = new int[4];
gl.glGetIntegerv(GL11.GL_VIEWPORT,viewVectorParams,0);
gl.glGetFloatv(GL11.GL_MODELVIEW_MATRIX,modelViewMatrix.buffer,0);
gl.glGetFloatv(GL11.GL_PROJECTION_MATRIX,projectMatrix.buffer,0);
float[] output = new float[4];
GLU.gluUnProject(
screenCoords.x, screenCoords.y, 0,
modelViewMatrix.buffer, 0,
projectMatrix.buffer, 0,
viewVectorParams, 0,
output, 0);
return new Vector3(output[0],output[1],output[2]);
}
Run Code Online (Sandbox Code Playgroud)
Matrix4x4只是float []缓冲区的包装器;
有了这个功能,我正在尝试创建一个平面来填充所有屏幕或检测当前投影矩阵的最大世界坐标,但它根本不起作用,因为我不确定我正确使用这些功能.
例如,当我尝试运行translateScreenCoordsToWorld(new Vector2(480,800))时,它返回非常小的坐标值Vector3(0.27f,0.42f,-1.0f).
任何人都可以通过一个定位相机为GL_PROJECTION模式提供良好的样品用量gluUnProject.
更新 感谢您的良好链接.但它仍然不适合我:(现在我的功能看起来像:
public Vector3 translateScreenCoordsToWorld(Vector2 screenCoords) {
float winX = screenCoords.x, winY = screenCoords.y, winZ = 0;
winY …Run Code Online (Sandbox Code Playgroud)