- 1、本文档共7页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
基于Android三维物体触摸控制
基于Android三维物体触摸控制
[摘要]Android平台是手机界的一股新生力量,它是完全免费并开源的,在Android上主要使用OpenGL ES来进行3D开发。因此,将探讨在3D场景中如何实现对三维物体的触摸控制,比如如何选中,移动,旋转等,并给出一个比较高效的选中物体的算法和一个简单实用的旋转物体的算法,以及在此基础上开发一个简单的魔方游戏,游戏程序在:http://sites.省略/site/quillchan/android。
[关键词]AndroidOpenGL ES触摸控制三维选中三维旋转
中图分类号:TP2文献标识码:A文章编号:1671-7597(2009)1210091-01
Android是Google开发的基于Linux平台的开源手机操作系统。它包括操作系统、用户界面和应用程序――移动电话工作所需的全部软件,而且不存在任何以往阻碍移动产业创新的专有权障碍。
在Android上主要使用OpenGL ES来进行3D开发。OpenGL ES(OpenGL for Embedded Systems)是OpenGL三维图形API的子集,针对手机、PDA和游戏主机等嵌入式设备而设计。Android 1.5中带的是OpenGL ES 1.0版本,它是以OpenGL 1.3规范为基础的。本文将对3D场景中物体的触摸控制进行研究,并给出实现的算法。本文所做的论述都是基于Android 1.5,OpenGL ES 1.0。
一、如何选中三维物体
OpenGL ES并没有像OpenGL一样提供有选择模式,因此需要自己去实现选中物体。
算法思路:作一条直线,该直线经过屏幕上的触点并且与屏幕垂直;求出该直线在世界坐标系中的方程,然后再判断该直线与三维物体是否有交点,如有交点,则选中该物体。
下面以立方体为例(不规则的三维物体都可以转化为规则物体来操作),来说明一下算法的具体过程。设(x,y)为触点的屏幕坐标,则得到视点坐标为(x,windowHeighty),记作(winX,winY)。分别给该点配上深度坐标,得到两点A1(winX,winy,0),A2(winX,winy,1)。通过gluUnProject转化到世界坐标,得到世界坐标系下一条直线的两点:
GluUnProject(A1)--S2(Sx2,Sy2,Sz2)
GluUnProject(A2)--E2(Ex2,Ey2,Ez2)
现在问题就剩如何求直线与立方体的交点了。立方体一共有六个面,建立模型的时候顶点坐标都是已知的,因此可以得到立方体每个面的空间方程表示,再分别求出每个面与直线的交点。
1.设平面上3点为ptA,ptB,ptC;构造一个平面:
plane(ptA,ptB,ptC)。
2.再根据两点构造一条直线:
line(S2,E2)。
3.求出交点:
crossPoint=cross(plane,line)。
4.再判断该点是否在相交平面的正方形内(点到正方形两对边的距离之和如果大于边长,则该点在正方形外部),如果是,说明选中了该物体。
5.为了提高效率,可以先判断立方体都有哪些面朝向屏幕外侧,然后再计算这些面与直线的交点就可以了。方法如下:由两点S2,E2得到一个向量E2-S2(朝向屏幕外侧),分别求该向量与立方体各个面的法线(方向朝外)的夹角,如果夹角小于90度,说明该面朝向屏幕外侧,进而判断直线与该面的交点是否落在这个面上。
先求平面朝外的法向量,设平面上的三点ptA,ptB,ptC(点的顺序要按照右手法则):normal=(ptBptA)X(ptCptA)(X代表向量叉乘)。
再求E2-S2和法向量的夹角余弦值,如果余弦值大于零小于一,说明夹角小于90度,该面朝向屏幕外侧。
二、如何旋转三维物体
三维空间的旋转有三个自由度,大家自然会想到使用三个对应于三条坐标轴的角度去记录,即:
GlRotatef(ax,1,0,0)
GlRotatef(ay,0,1,0)
GlRotatef(az,0,0,1)
这就是我们通常所说的Euler Angle方法。但是这种方法存在一个万向节死锁的问题。
如何来避免万向节死锁呢?实际上数学上有种偏轴角(Axis Angle)的定义。先定出两个旋转向量,然后求出他们之间的最少旋转角度,再绕这两个向量的法线旋转该角度即可。由于每次只绕一个固定的轴旋转,因此并不会产生万向节死锁的问题。
这里我自己实现了一种类似于偏轴角的旋转定义,但是比偏轴角的方法更符合用户在屏幕上的旋转操作。方法是通过将触点映射到三维坐标上,对前
您可能关注的文档
最近下载
- 右肾重复肾护理查房.pptx
- 7.2 坚持走和平发展道路 课件初中读本.ppt
- 羚锐制药营运资金管理分析.docx
- 2025年自考学士学位英语试题.pdf VIP
- 湘少版小学英语六年级下册单元知识总结(全册).doc
- 第五组利用基因工程酵母生产抗疟疾药物前体--青蒿酸课件.pptx VIP
- T_CECS 1067-2022 直滤式滤板技术规程.docx
- 必威体育精装版部编版语文一年级下册教案(全册)教学设计(2025年春-新教材).pdf
- 汽车机械维修工(三级工)技能鉴定考试必备题库大全-上(单选题汇总).docx
- 2024年高考(全国甲卷)英语 完形填空真题深层解析+三年真题+题型策略及练习(学生版+解析版).docx
文档评论(0)