Android OpenGL ES拾取(使用Java)

本文介绍了如何在Android中使用OpenGL ES进行拾取操作。首先,通过GLU.gluUnProject函数建立拾取射线,接着详细阐述了获取焦点的步骤,涉及到向量运算来判断射线与三角形的交点。文章提供了相关的源代码实现,包括MatrixTrackingGL、MatrixGrabber和MatrixStack类,以及向量工具类,帮助开发者实现手指触控交互下的3D对象选择。
摘要由CSDN通过智能技术生成

第一步:建立拾取射线

核心函数是GLU.gluUnProject,原型如下

static int gluUnProject(float winX, float winY, float winZ, float[] model, int modelOffset, float[] project, int projectOffset, int[] view, int viewOffset, float[] obj, int objOffset)

winZ取0得到射线近点,winZ取1得到远点。模型矩阵(model)和投影矩阵(project)比较麻烦,由于ES版本不提供获取模型和投影矩阵的方法,因此通过自行跟踪矩阵变换的方式来解决。具体实现由MatrixTrackingGL和MatrixGrabber以及MatrixStack三个类协作提供,这三个类可以在

<android SDK PATH>\samples\android-<version>\ApiDemos\src\com\example\android\apis\graphics\spritetext\

文件夹下找到。
视图矩阵是在render的onSurfaceChanged时提供的长宽构建的

@Override
public void onSurfaceChanged(GL10 gl, int width, int height){
    viewPort = new int[]{
  0,0,width,height}
}

最后是获取结果,obj参数被赋值为4元素数组,要用前三个除以第四个得到最终结果。下面是获取射线的代码

public class Ray {
    public Ray(MatrixGrabber matrixGrabber,int[] viewPort,float xTouch, float yTouch){
        float[] temp = new float[4];

        float winy =(
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值