2019独角兽企业重金招聘Python工程师标准>>>

在opengl中关于拾取有封装好的选择模式,名字栈,命中记录,实现拾取的功能,相对容易一些。但是到了opengl es里面就比较倒霉了,因为opengl es是opengl的简化版,很多功能都被去掉了。没办法,要想实现拾取的功能只有自己动手。目前比较成熟而且相对较简单的拾取方案是:射线相交拾取。

先介绍一下射线相交拾取的原理:

(1):将用户在屏幕上点击的坐标(X, Y),转换为归一化坐标(Xn, Yn)

(2):考虑到透视投影的可视锥有一个近平面和一个远平面,所以可以将刚才的归一化坐标转换为两个归一化坐标,一个的z值在近平面上,z值为-1;另一个的z值在远平面上,z值为1

(3):计算出透视投影的逆矩阵,用这个逆矩阵分别乘以两个归一化坐标,相乘之后得到的值分别除以w,也就是做透视除法,这样就得到了在虚拟空间中的两个点。

(4):用上一步计算出的虚拟空间中的两个点,生成一条射线。

(5):用这条射线和其他的物体做相交检测。为了便于检测,可以将要检测的物体当成一个球体,这样射线和球体之间是否相交就比较容易检测了。

原本想自己在这篇博客中,将所有的步骤都讲的详细透彻,但是,真正动手才发现自己水平不够。既然这样就向大家推荐一处好的资料吧,《opengl es应用开发实践指南 android卷》的第九章,讲的很精彩。

转载于:https://my.oschina.net/u/1273706/blog/829425

opengl es的射线拾取相关推荐

  1. OPENGL ES 对象的拾取

    时间:19:51 2010-12-14 用户问题的说明 响应鼠标操作,其当中有一个非常重要的知识:使用鼠标点取,达到对三维模型对象的捕捉. 对象的拾取,这是3D当中的一个专业术语.也就是在二维屏幕当中 ...

  2. Android OpenGL射线拾取手势旋转(二)

    上回分解-_-!,Android OpenGL射线拾取&手势旋转(一). 3)Renderer:RayPickRenderer.java OpenGL渲染器,比较多的东西都在这里面了. pub ...

  3. [OpenGL]射线拾取RayPicking---(1)生成射线

    Vries的教程是我看过的最好的可编程管线OpenGL教程,没有之一.但没有讲关于拾取(Picking)的章节,而这个功能的确很重要,就自己试着写写看了. 这节有三个很重要的参考网址,基本可以算照抄了 ...

  4. OpenGL ES应用开发实践指南:iOS卷

    <OpenGL ES应用开发实践指南:iOS卷> 基本信息 原书名:Learning OpenGL ES for iOS:A Hands-On Guide to Modern 3D Gra ...

  5. 【OpenGL ES】凸镜贴图

    1 前言 正方形图片贴到圆形上 中将正方形图片上的纹理映射到圆形模型上,同理,也可以将圆形上的纹理映射到凸镜的球形曲面上.如下图,最左边的竖条是原图片的截面(纹理坐标),最右边的竖条是变换后的顶点模型 ...

  6. OpenGL ES 2.0 for Android教程(六):进入第三维

    OpenGL ES 2 第六章:进入第三维 文章传送门 OpenGL ES 2.0 for Android教程(一) OpenGL ES 2.0 for Android教程(二) OpenGL ES ...

  7. OpenGL ES 2.0 for Android教程(九):添加触摸反馈

    OpenGL ES 2 第九章:添加触摸反馈 文章传送门 OpenGL ES 2.0 for Android教程(一) OpenGL ES 2.0 for Android教程(二) OpenGL ES ...

  8. OpenGL.ES在Android上的简单实践:10-曲棍球(拖动物体、碰撞测试)

    OpenGL.ES在Android上的简单实践:10-曲棍球(拖动物体.碰撞测试) 1.让木槌跟随手指移动 继续上一篇文章9的内容.既然可以测试木槌是否被触碰了,我们将继续努力下去:当我们来回拖动木槌 ...

  9. Android OpenGL(二) 学习《Android 3D 游戏开发技术宝典 -openGL ES 2.0》

    note: 1 1-4章相关基础 2 5-8章重点 3 9-15章重点的进阶 4 16-19章相关技术:物理,传感器,事件交互. 5 20-22章 实例. 第一章 基础环境 第二章 游戏相关开发基础 ...

最新文章

  1. 入门必备 | 一文读懂神经架构搜索
  2. 我的Android进阶之旅------Android项目目录结构分析
  3. 插入排序(含希尔排序)的C/C++实现
  4. MAC下homebre安装mysql
  5. 大数据的逆袭:传统数据库市场的变革
  6. 将二叉树的叶子结点转换成单链表,并返回最左叶子结点的地址(链头)
  7. 对视频中的特征颜色物体(青色水杯)进行跟踪
  8. python中node.tag的用法_python在ui自动化中的一些常见用法
  9. keras学习笔记-黑白照片自动着色的神经网络-Beta版
  10. 电脑和树莓派之间文件传输
  11. android中include标签使用详解
  12. 软件基本功:开发测试中的穷举归纳法
  13. 怎么创建java项目?新建java项目的步骤
  14. Python中利用scipy库进行最小二乘回归分析(金融相关)
  15. win10运行Flink
  16. 【毕设】知网文献检索列表中的 href 解析为可访问的 URL
  17. C# int和byte[]之间的互转
  18. matlab数学实验课件5,matlab_intro_西安交通大学-数学实验教案_ppt_大学课件预览_高等教育资讯网...
  19. sun java system calendar 服务器拒绝服务_sun java system cale
  20. 医院pacs系统服务器配置,浪潮为千佛山医院PACS系统开“药方”

热门文章

  1. 计算机科学导论课后感悟,计算机科学导论课后总结_2
  2. springboot幂等性_请问,springboot项目支付接口设计,如何保证支付的幂等性,并能给前端反馈友好的提示?...
  3. python调用node_在node中执行python脚本
  4. 计算机中国象棋书籍,[建议]中国的象棋永远不能被没有“思维”的电脑所代替(就目前的电脑象棋软件...
  5. elctron项目_electron项目结构介绍
  6. vue企业网站模板_模板网站VS定制网站,企业如何选择?
  7. win10虚拟机服务器错误怎么解决方法,虚拟机下安装win10系统后出现升级报错故障的解决方法【图文】...
  8. gcc参数 -i, -L, -l, -include
  9. 计算机常用主题词,标引主题词的目的是( )。A.反映文件的全部内容B.便于计算机检索和管理C.供归_考题宝...
  10. 线程join_Java 并发编程:线程间的协作(wait/notify/sleep/yield/join)