opengl es的射线拾取

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

       在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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/541894.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java timezone_Java TimeZone useDaylightTime()方法与示例

java timezoneTimeZone类useDaylightTime()方法 (TimeZone Class useDaylightTime() method) useDaylightTime() method is available in java.util package. useDaylightTime()方法在java.util包中可用。 useDaylightTime() method is used to check whether this time zone u…

视觉学习(4) —— 添加地址传递数据

Modbus Slave 选择一个地址右键,选择发送的数据类型 视觉软件 一、添加地址 当地址为100时,先将首地址改为100,第0个地址为100,第1个地址为101,往后累加 若想使用100—150的地址,即首地址为100&#xff…

某个JAVA类断点无效_解决eclipse中断点调试不起作用的问题

最近几天,遇到了一个问题,就是在eclipse中进行断点调试程序到时候,跟踪不到我设置的断点。困惑了很久,在网上也查阅了很多资料,都没能解决我的问题。今天早上,我试着把eclipse的工作空间重新换了一个&#…

jquery中阻止事件冒泡的方法

2019独角兽企业重金招聘Python工程师标准>>> 根据《jquery基础教程》 第一种方法:判断事件的“直接”目标是否是自身,如果不是自身,不予处理 $(div.outter).click(function(event) {if (event.target this) {$(p).css(color, red…

java swing 组织机构_课内资源 - 基于Java Swing的小型社团成员管理系统

一、需求分析1.1 个人信息学号、姓名、性别、年级、系别、专业、出生日期、联系方式、个性签名、地址、照片。1.2 基本功能要求管理员信息管理登录、注销功能修改密码功能部落成员信息管理添加成员删除成员修改成员信息按条件查找筛选成员1.3 高级特性管理员权限管理成员信息包…

Java System类loadLibrary()方法与示例

系统类loadLibrary()方法 (System class loadLibrary() method) loadLibrary() method is available in java.lang package. loadLibrary()方法在java.lang包中可用。 loadLibrary() method is used to load the library with the given parameter named library_name(library …

CCF201509-2 日期计算(100分)

试题编号: 201509-2 试题名称: 日期计算 时间限制: 1.0s 内存限制: 256.0MB 问题描述: 问题描述给定一个年份y和一个整数d,问这一年的第d天是几月几日?注意闰年的2月有29天。满足下面条件之一的…

Java StringBuilder trimToSize()方法与示例

StringBuilder类trimToSize()方法 (StringBuilder Class trimToSize() method) trimToSize() method is available in java.lang package. trimToSize()方法在java.lang包中可用。 trimToSize() method is used to minimize storage used for the characters (i.e. if the init…

第一百四十一节,JavaScript,封装库--DOM加载

JavaScript,封装库--DOM加载 DOM加载,跨浏览器封装DOM加载,当网页文档结构加载完毕后执行函数,不等待图片音频视频等文件加载完毕 /** dom_jia_zai()函数,DOM页面加载函数,等待页面结构加载完毕后就执行函数…

java 使用接口便于维护程序_Java初学——面向对象接口的应用

一、接口1.什么是接口接口是比抽象类更抽象的定义,接口不可以被实例化 实现类必须实现接口的所有方法 实现类可以实现多个接口 、多个接口使用逗号隔开 接口中的变量都是静态常量(public static final) 程序设计时面向接口的约定而不考虑具体实现 。2.为什么使用接口…

Java ResourceBundle getLocale()方法与示例

ResourceBundle类的getLocale()方法 (ResourceBundle Class getLocale() method) getLocale() method is available in java.util package. getLocale()方法在java.util包中可用。 getLocale() method is used to get the locale of this ResourceBundle. getLocale()方法用于获…

centos下安装pip时失败:

2019独角兽企业重金招聘Python工程师标准>>> [rootwfm ~]# yum -y install pip Loaded plugins: fastestmirror, refresh-packagekit, security Loading mirror speeds from cached hostfile * base: mirrors.tuna.tsinghua.edu.cn * extras: mirrors.tuna.tsinghua…

java 标准输入流 关闭 打开_java输出流关流疑问,以下这个程序的in和out是否要关闭?...

/**标准IOjava.lang.System类中提供以下三个静态常量:staticfinalInputStreamin功能:“标准”输入流,流已打开并准备提供输入数据。通常,此流对应于键盘输入或者由主机环境或用户指.../**标准IOjava.lang.System类中提供以下三个静…

Java RandomAccessFile readUTF()方法及示例

RandomAccessFile类readUTF()方法 (RandomAccessFile Class readUTF() method) readUTF() method is available in java.io package. readUTF()方法在java.io包中可用。 readUTF() method is used to read this RandomAccessFile as a string. readUTF()方法用于以字符串形式读…

LCD显示屏原理与应用

1、什么是LCD? (1)LCD(Liquid Crystal Display)俗称液晶.(2)液晶是一种材料,液晶这种材料具有一种特点:可以在电信号的驱动下液晶分子进行旋转,旋转时会影响透光性,因此我们可以在整个液晶面板后面用白光照&#xff08…

Java PipedInputStream connect()方法与示例

PipedInputStream类的connect()方法 (PipedInputStream Class connect() method) connect() method is available in java.io package. connect()方法在java.io包中可用。 connect() method is used to cause this PipedInputStream to be connected to the given PipedOutputS…

java写手机游戏_如何将自己编写的JAVA小游戏写到手机里?

2019-06-19怎么用java编写获取星期几的程序&#xff1f;import java。util。*; public class WeekDay { Calendar date Calendar。getInstance(); private int getMaxDate(int moth){ moth moth -1; if(moth > 12 || moth < 0){ System。 out。println("输入月份错…

Java PipedInputStream receive()方法与示例

PipedInputStream类的receive()方法 (PipedInputStream Class receive() method) receive() method is available in java.io package. receive()方法在java.io包中可用。 receive() method is used to receive a byte of content and it will block when no more input remain…

java去除重复对象_Java19-2 集合类去除重复对象

List独有方法&#xff1a;import java.util.ArrayList;import java.util.List;public class ListTest2 {public static void main(String[] args) {List listnew ArrayList();list.add("abc1");list.add("abc2");list.add("abc1");list.add(&quo…

SSM框架整合中遇到重复的问题Ambiguous handler methods mapped for HTTP

严重: Servlet.service() for servlet [spring] in context with path [/ssmDemo] threw exception [Request processing failed; nested exception is java.lang.IllegalStateException: Ambiguous handler methods mapped for HTTP path /init.do: {public java.lang.String …