雷采摘的OpenGL ES 2.0 [英] Ray-picking in OpenGL ES 2.0
问题描述
我想实现光线采摘的OpenGL ES 2.0,以确定对象是否被点击或不。到目前为止,我只是想检查是否有特定的三角形已经pssed $ P $。 我真的使用本网站为动机的http://android-raypick.blogspot.ca/2012/04/first-i-want-to-state-this-is-my-first.html
I'm trying to implement ray-picking in OpenGL ES 2.0 to determine if an object has been clicked or not. So far I'm just trying to check if a specific triangle has been pressed. I`m using this site as a motivation http://android-raypick.blogspot.ca/2012/04/first-i-want-to-state-this-is-my-first.html
这是我到目前为止有:
public void onClick(float x, float y)
{
float[] temp = new float[4];
float[] temp2 = new float[4];
System.out.println("X coordinate: " + x);
System.out.println("Y coordinate: " + y);
float[] pos = new float[4];
y = (float) viewport[3] - y;
int res = GLU.gluUnProject(x, y, 1.0f,
mMVPMatrix, 0,
mProjectionMatrix, 0,
viewport, 0,
temp, 0);
Matrix.multiplyMV(temp2, 0, mMVPMatrix, 0, temp, 0);
float[] nearCoOrds = new float[3];
if(res == GLES20.GL_TRUE)
{
nearCoOrds[0] = temp2[0] / temp2[3];
nearCoOrds[1] = temp2[1] / temp2[3];
nearCoOrds[2] = temp2[2] / temp2[3];
System.out.println("Near0: " + nearCoOrds[0]);
System.out.println("Near1: " + nearCoOrds[1]);
System.out.println("Near2: " + nearCoOrds[2]);
}
res = GLU.gluUnProject(x, y, 0,
mMVPMatrix, 0,
mProjectionMatrix, 0,
viewport, 0,
temp, 0);
Matrix.multiplyMV(temp2,0,mMVPMatrix, 0, temp, 0);
float[] farCoOrds = new float[3];
if(res == GLES20.GL_TRUE)
{
farCoOrds[0] = temp2[0] / temp2[3];
farCoOrds[1] = temp2[1] / temp2[3];
farCoOrds[2] = temp2[2] / temp2[3];
System.out.println("Far0: " + farCoOrds[0]);
System.out.println("Far1: " + farCoOrds[1]);
System.out.println("Far2: " + farCoOrds[2]);
}
float[] coords = new float[3];
coords[0] = farCoOrds[0]-nearCoOrds[0];
coords[1] = farCoOrds[1]-nearCoOrds[1];
coords[2] = farCoOrds[2]-nearCoOrds[2];
System.out.println("REAL COORDS 0: " + coords[0]);
System.out.println("REAL COORDS 1: " + coords[1]);
System.out.println("REAL COORDS 2: " + coords[2]);
}
在 X
和是
浮子的x和在手指pressed y坐标屏幕。函数的onClick
是从叫 MainActivity
。
The x
and the y
float is the x and the y coordinate of where the finger pressed the screen. The function onClick
is called from the MainActivity
.
在
GLU.gluUnProject(x, y, 1.0f,
mMVPMatrix, 0,
mProjectionMatrix, 0,
viewport, 0,
temp, 0);
mMVPMatrix
是模型视图矩阵。 mProjectionMatrix
的投影矩阵和视
的值{0,0,screenhwidth,screenheight}
mMVPMatrix
is the Modelview Matrix. mProjectionMatrix
is the Projection Matrix and the viewport
has the values {0,0,screenhwidth,screenheight}.
输出的例子我得到的是(在屏幕中间感动):
Example of output I get is (touched around middle of the screen):
REAL COORDS 0: -0.21542415
REAL COORDS 1: 0.31117013
REAL COORDS 2: 9.000003
我的问题/话题是,我不知道如果我在正确的轨道上吗?我是否得到了正确的观念或它似乎是我误解的东西吗? 还是有什么其他的方式,我可以实现触摸检测上的三角形?
My question/topic is that I don't know if I'm on the right track here? Have I gotten the right idea or does it seem that I have misunderstood something? Or are there any other ways I can achieve touch detection on triangles?
感谢您的帮助和指导!
推荐答案
有一个出色的OpenGL的框架,为Android称为的拉贾瓦利。它支持对象采摘,样品$ C $ Ç看起来很简单,你应该尝试一下。
There is an excellent OpenGL framework for Android called Rajawali. It supports object picking, the sample code looks very simple, you should try it.
这篇关于雷采摘的OpenGL ES 2.0的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!