opengl es的射线拾取
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的射线拾取相关推荐
- OPENGL ES 对象的拾取
时间:19:51 2010-12-14 用户问题的说明 响应鼠标操作,其当中有一个非常重要的知识:使用鼠标点取,达到对三维模型对象的捕捉. 对象的拾取,这是3D当中的一个专业术语.也就是在二维屏幕当中 ...
- Android OpenGL射线拾取手势旋转(二)
上回分解-_-!,Android OpenGL射线拾取&手势旋转(一). 3)Renderer:RayPickRenderer.java OpenGL渲染器,比较多的东西都在这里面了. pub ...
- [OpenGL]射线拾取RayPicking---(1)生成射线
Vries的教程是我看过的最好的可编程管线OpenGL教程,没有之一.但没有讲关于拾取(Picking)的章节,而这个功能的确很重要,就自己试着写写看了. 这节有三个很重要的参考网址,基本可以算照抄了 ...
- OpenGL ES应用开发实践指南:iOS卷
<OpenGL ES应用开发实践指南:iOS卷> 基本信息 原书名:Learning OpenGL ES for iOS:A Hands-On Guide to Modern 3D Gra ...
- 【OpenGL ES】凸镜贴图
1 前言 正方形图片贴到圆形上 中将正方形图片上的纹理映射到圆形模型上,同理,也可以将圆形上的纹理映射到凸镜的球形曲面上.如下图,最左边的竖条是原图片的截面(纹理坐标),最右边的竖条是变换后的顶点模型 ...
- OpenGL ES 2.0 for Android教程(六):进入第三维
OpenGL ES 2 第六章:进入第三维 文章传送门 OpenGL ES 2.0 for Android教程(一) OpenGL ES 2.0 for Android教程(二) OpenGL ES ...
- OpenGL ES 2.0 for Android教程(九):添加触摸反馈
OpenGL ES 2 第九章:添加触摸反馈 文章传送门 OpenGL ES 2.0 for Android教程(一) OpenGL ES 2.0 for Android教程(二) OpenGL ES ...
- OpenGL.ES在Android上的简单实践:10-曲棍球(拖动物体、碰撞测试)
OpenGL.ES在Android上的简单实践:10-曲棍球(拖动物体.碰撞测试) 1.让木槌跟随手指移动 继续上一篇文章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章 实例. 第一章 基础环境 第二章 游戏相关开发基础 ...
最新文章
- 入门必备 | 一文读懂神经架构搜索
- 我的Android进阶之旅------Android项目目录结构分析
- 插入排序(含希尔排序)的C/C++实现
- MAC下homebre安装mysql
- 大数据的逆袭:传统数据库市场的变革
- 将二叉树的叶子结点转换成单链表,并返回最左叶子结点的地址(链头)
- 对视频中的特征颜色物体(青色水杯)进行跟踪
- python中node.tag的用法_python在ui自动化中的一些常见用法
- keras学习笔记-黑白照片自动着色的神经网络-Beta版
- 电脑和树莓派之间文件传输
- android中include标签使用详解
- 软件基本功:开发测试中的穷举归纳法
- 怎么创建java项目?新建java项目的步骤
- Python中利用scipy库进行最小二乘回归分析(金融相关)
- win10运行Flink
- 【毕设】知网文献检索列表中的 href 解析为可访问的 URL
- C# int和byte[]之间的互转
- matlab数学实验课件5,matlab_intro_西安交通大学-数学实验教案_ppt_大学课件预览_高等教育资讯网...
- sun java system calendar 服务器拒绝服务_sun java system cale
- 医院pacs系统服务器配置,浪潮为千佛山医院PACS系统开“药方”
热门文章
- 计算机科学导论课后感悟,计算机科学导论课后总结_2
- springboot幂等性_请问,springboot项目支付接口设计,如何保证支付的幂等性,并能给前端反馈友好的提示?...
- python调用node_在node中执行python脚本
- 计算机中国象棋书籍,[建议]中国的象棋永远不能被没有“思维”的电脑所代替(就目前的电脑象棋软件...
- elctron项目_electron项目结构介绍
- vue企业网站模板_模板网站VS定制网站,企业如何选择?
- win10虚拟机服务器错误怎么解决方法,虚拟机下安装win10系统后出现升级报错故障的解决方法【图文】...
- gcc参数 -i, -L, -l, -include
- 计算机常用主题词,标引主题词的目的是( )。A.反映文件的全部内容B.便于计算机检索和管理C.供归_考题宝...
- 线程join_Java 并发编程:线程间的协作(wait/notify/sleep/yield/join)