首页 > 编程知识 正文

unity ar开发教程,deform模拟锻造教程

时间:2023-05-04 11:44:45 阅读:54721 作者:457

分解AR二级齿轮减速器的视频记录下自己上学期做的期末作业之一吧。 二级齿轮是一个简单的模型,其分解视频主要使用的是unity上带有视频框架系统k的视频。 有点简陋啊。 zjdyl

一、总体目标

基于AR图像识别、双级齿轮减速器的动画分解和文字说明、减速器的放大、缩小、旋转。

二、系统开发关键技术

2.1 AR图像识别

识别图:

摄像机进行图像识别后,出现双级齿轮减速器的视频分解界面,进入视频分解步骤。

成果如图1所示:

图1

2.2用户界面设计

双级齿轮减速器动画分解开始的文本说明:

三、系统的详细设计与具体实现

3.1系统功能模块

3.1.1 AR图像识别功能

在Unity2018中导入vuforia Engine模块后,添加AR camera组件和imagetarget组件,然后输入相应的数据库和图像,3.1.2 实现动画分解功能

相机识别出双级齿轮减速器出现后,按照设置步骤分解视频,关键码如下

//实例化对象公共game对象camobj; 公共game对象子bobj; 公共game对象[ ] obj 1; 公共game对象[ ] obj 2; 公共game对象[ ] obj 3; 公共game对象[ ] obj 4; 公共game对象[ ] obj 5; 公共game对象[ ] obj 6; 公共game对象[ ] obj 7; 公共game对象[ ] obj 8; 公共game对象[ ] obj 9; 公共game对象[ ] obj 10; //获取视频专用动画制作人摄像头动画; 私有动画人辅助动画; AnimatorStateInfo CamStateInfo; AnimatorStateInfo SubStateInfo; 公共输入步骤; 私密浮动添加时间; void start (cam anim=camobj.getcomponentanimator ); sub anim=subobj.getcomponentanimator (; 步骤=0; void更新()打印) ) step; sitch(step ) { case 0://第一个摄影机动画if ) camanim ) camstateinfo=cam anim.getcurrentanimatorstateinfo (0); if (camstateinfo.is name (base layer.cam anim1) ) if (camstateinfo.normalized time1) { Step=1; //下一步,subobj.transform.find(text ).GetComponentText ).text=(开始2级齿轮减速器的分解说明); } } } break; case 1://步骤2、字幕if(subanim ) subanim.setinteger('Subtitle ',1 ); 步骤=2; } break; case 2://步骤2字幕if(subanim ) substate info=sub anim.getcurrentanimatorstateinfo (0); if (substate info.is name (base layer.wenzi show ) ) if (substate info.normalized time1) )。

SubAnim.SetInteger("Subtitle", 2); Step = 3; } } } break; case 3://第三步 相机动画 if(SubAnim) { SubStateInfo = SubAnim.GetCurrentAnimatorStateInfo(0); if (SubStateInfo.IsName ("Base Layer.wenziHide")) { if(SubStateInfo.normalizedTime > 0.5f) { CamAnim.SetInteger("CamStep",2); Step = 4; SubObj.transform.Find("Text").GetComponent<Text>().text = "拆下端盖紧固螺钉"; } } } break; case 4://第四步 显示字幕 if(CamAnim) { CamStateInfo = CamAnim.GetCurrentAnimatorStateInfo(0); if(CamStateInfo .IsName ("Base Layer.CamAnim2")) { if(CamStateInfo .normalizedTime > 1) { if(SubAnim) { SubAnim.SetInteger("Subtitle", 1); Step = 5; } } } } break; case 5://第五步,拆下端盖紧固螺钉1 if(SubAnim) { SubStateInfo = SubAnim.GetCurrentAnimatorStateInfo(0); if (SubStateInfo.IsName("Base Layer.wenziShow")) { if(SubStateInfo .normalizedTime > 1) { for (int i = 0; i < OBJ1.Length; i++) { if( OBJ1[i].GetComponent<Animator>()) { OBJ1[i].GetComponent<Animator>().enabled = true; } } Step = 6; } } ***3.1.2 实现模型旋转:*** //单指上下左右滑动屏幕旋转 if (Input.GetMouseButton(0)) { if (Input.touchCount == 1) { if (Input.GetTouch(0).phase == TouchPhase.Moved) { Touch touch = Input.GetTouch(0); Vector2 deltaPos = touch.deltaPosition; transform.Rotate(Vector3.down * deltaPos.x, Space.World); transform.Rotate(Vector3.right * deltaPos.y, Space.World); } }***3.1.3 实现放大缩小:***//双指缩放模型 if (Input.touchCount == 2) { if (Input.GetTouch(0).phase == TouchPhase.Moved || Input.GetTouch(1).phase == TouchPhase.Moved) { Vector2 temPos1 = Input.GetTouch(0).position; Vector2 temPos2 = Input.GetTouch(1).position; if (isEnLarge(oldPos1, oldPos2, temPos1, temPos2)) { float oldScale = transform.localScale.x; float newScale = oldScale * 1.025f; transform.localScale = new Vector3(newScale, newScale, newScale); } else { float oldScale = transform.localScale.x; float newScale = oldScale / 1.025f; transform.localScale = new Vector3(newScale, newScale, newScale); } oldPos1 = temPos1; oldPos2 = temPos2; } } } //判断手势 bool isEnLarge(Vector2 oP1, Vector2 oP2, Vector2 nP1, Vector2 nP2) { float length1 = Mathf.Sqrt((oP1.x - oP2.x) * (oP1.x - oP2.x) + (oP1.y - oP2.y) * (oP1.y - oP2.y)); float length2 = Mathf.Sqrt((nP1.x - nP2.x) * (nP1.x - nP2.x) + (nP1.y - nP2.y) * (nP1.y - nP2.y)); if (length1 < length2) { return true; } else { return false; } }

五、系统发布与测试
测试方式:
打开程序,将识别图置于摄像机内,测试AR图像识别功能,识别之后自动进入二级齿轮减速器动画分解

六、总结
该程序对二级齿轮减速器进行了一个简单的动画分解,模拟了二级齿轮减速器的拆装 分解,让人能直观的感受到齿轮减速器分解的全过程。同时该程序运用了AR图像识别技术,基于unity完成,让我学习到了更多AR开发技术,完成过程中遇到的apk打包问题也一一解决了,收获挺多的。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。