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. 设备履历管理系统php开源,航空机载设备履历本管理制作系统诞生记
  3. gdb调试多进程和多线程命令 .
  4. Struts2学习笔记(六):Struts2的处理流程与Action的管理方式
  5. AI和物联网在零售环境中的长期应用
  6. 2019年嵌入式开发系统详细分析告诉你是否还值得去学习
  7. 邮箱批量登录接验证码_记一次莫名的需求(临时邮箱|企业邮箱)
  8. SPARK全栈 全流程 大数据实战 之 技术选型篇
  9. linux nslookup 解析不到dns_涉及DNS的简单操作,只看这一篇就够了
  10. DWR入门教程(http://www.cnblogs.com/cyjch/archive/2012/02/16/2353758.html)
  11. 入门 ggplot2 的图形语法
  12. linux命令 语法 pdf,Linux命令详解词典pdf
  13. python遍历文件夹内文件并检索文件中的中文内容
  14. 金山实习周记(2)——沟通
  15. Monkey Test 命令使用
  16. 15 个提高 Google 搜索效率的小技巧
  17. outlook发邮件的服务器,outlook中要求写接收、发送邮件的服务器,应该怎样写?...
  18. 数字化时代,如何赋能人才
  19. linux如何用命令进入u盘,linux 下如何打开u盘
  20. 新型博客网站的运营要素分析

热门文章

  1. linux获取ip地址的接口,获取Linux上接口的IP地址
  2. matlab 读取mov文件格式,VideoReader 支持的文件格式 - MATLAB VideoReader.getFileFormats - MathWorks 中国...
  3. java sca视频教程_如何进入Java SCA软件的开发
  4. antd 怎么用ajax,react+dva+antd接口调用方式
  5. android蓝牙串口 hc06,Android手机通过蓝牙模块HC-06连接Arduino串口输出
  6. oracle rman备份整库,RMAN备份恢复整个库
  7. php mysql 图像_将图像插入MySQL并使用PHP检索图像
  8. 素质教育新模式:后疫情时代教育 OMO 模式如何切实落地?
  9. link linux 跨设备,Linux中的两种link方式
  10. bootstrap 栅栏布局中 col-xs-*、col-sm-*、col-md-*、col-lg-* 区别及使用方法