Android OpenGL 2.0:对象拾取(看看你是否用光线击中了一个物体)

时间:2013-04-20 21:57:13

标签: android opengl-es opengl-es-2.0

所以我试图让对象选择在OpenGL 2中工作,在OpenGK 1中我使用了glpixelColor,这非常简单。

我有以下代码给我射线的起点和终点?

Log.i("My POSITION", "x:" + mRenderer.eye.x + " y:" + mRenderer.eye.y + " z:" + mRenderer.eye.z);

float xyzw[] = unproject(x, mRenderer.screenHeight - y, -1.0f);
Log.i("Start of ray", "x:" + xyzw[0] + " y:" + xyzw[1] + " z:" + xyzw[2]);

xyzw = unproject(x, mRenderer.screenHeight - y, 1.0f);
Log.i("End of Ray", "x:" + xyzw[0] + " y:" + xyzw[1] + " z:" + xyzw[2]);

我使用以下功能

public float[] unproject(float rx, float ry, float rz) {
            float[] xyzw = {0, 0, 0, 0};
            int[] viewport = { 0, 0, mRenderer.screenWidth, mRenderer.screenHeight};
            android.opengl.GLU.gluUnProject(rx, ry, rz, mRenderer.mViewMatrix, 0, mRenderer.mProjectionMatrix, 0, viewport, 0, xyzw, 0);
            xyzw[0] /= xyzw[3];
            xyzw[1] /= xyzw[3];
            xyzw[2] /= xyzw[3];
            xyzw[3] = 1;
            return xyzw;
        }

我得到以下输出

我的位置:x:-1.857801 y:0.0 z:-8.655011 04-21

光线开始:x:-1.8198236 y:-0.005848203 z:-8.688532 04-21

Ray的结束:x:758.43915 y:-117.07846 z:-679.7136

问题 如果我在某个位置敲击一个立方体,我该如何计算?假设立方体是1,1,1

1 个答案:

答案 0 :(得分:0)

我试过这个,它有点工作

float xDif = (xyzw2[0] - xyzw[0]) / 1000;
float yDif = (xyzw2[1] - xyzw[1]) / 1000;
float zDif = (xyzw2[2] - xyzw[2]) / 1000;

for (int i = 0; i < 1000; i ++)
{
    if ((xyzw[0] + (xDif * i)) > mRenderer.cube.position.x - 1.0 && (xyzw[0] + (xDif * i)) < mRenderer.cube.position.x + 1.0 && 
        (xyzw[1] + (yDif * i)) > mRenderer.cube.position.y - 1.0 && (xyzw[1] + (yDif * i)) < mRenderer.cube.position.y + 1.0 &&
        (xyzw[2] + (zDif * i)) > mRenderer.cube.position.z - 1.0 && (xyzw[2] + (zDif * i)) < mRenderer.cube.position.z + 1.0)
        {   
        Log.i("Hit cube", "HIT");
        break;
        }
    }