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

光线结束:x:758.43915 y:-117.07846 z:-679.7136

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

4

1 回答 1

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;
        }
    }
于 2013-04-21T18:57:52.187 回答