ImageTarget 组件用来进行图像识别。
直接将Aixi
ImageTarget 组件用来进行图像识别。
直接将Aixi
删除ARcamera后还会有调用摄像头的情况,可以在build setting里面取消勾选AR开发。
则
Image target 脚本分析
if(VuforiaRuntimeUtilities.IsVuforiaEnable()):判断是否检查到摄像头。
DefaultTrackableEvenHandlier.cs脚本很为关键
里面主要有Change、Found、Lost三个方法。调用不同的方法即可实现不同的工作。
AR主要思路就是。一开始将场景中的物体的meshrender等组件给注释掉,然后若是通过摄像头检测到相对应的图片,即执行现实meshrender等组件的方法。就能
1.上传图片至database,然后下载package包
2.导入package包,editor->vuforia->ImageTargetTexture.
3.选AR camera -》open vuforia..->勾选database里面选项。
4.在图片上建子物体即可在摄像头检测到图片时现实子物体。
图片内容棱角分明
对比度强
数据库的输入
//放大缩小
Vector2 oldPos1;
Vector2 oldPos2;
void Update()
{
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 newScalse=oldScale*1.025f;
transform.localScale=new Vector3(newScalse,newScalse,newScalse);
}
if(isEnlarge(oldPos1,oldPos2,temPos1,temPos2))
{
float oldScale=transform.localScale.x;
float newScalse=oldScale/1.025f;
transform.localScale=new Vector3(newScalse,newScalse,newScalse);
}
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技术的原理:
1用摄像机拍摄场景
ImageTarget:识别图片
官网创建数据库、导入图片,然后下载
ImageTarget的Database勾选需要的数据库和图片
ARCamera的open vuforia configura下勾选前述database并设置active
ARCamera
1. 调用设备摄像机
2. behavior接口
(1)图片识别
(2)手势识别
(3)图片选择
·
public class PlayerRotate : MonoBehaviour {
float xSpeed = 150f;
// Use this for initialization
void Start () {
}
// Update is called once per frame
void Update () {
if (Input.GetMouseButton(0))
{
if (Input.touchCount==1)
{
if (Input.GetTouch(0).phase==TouchPhase.Moved)
{
transform.Rotate(Vector3.up*Input.GetAxis("Mouse X")*-xSpeed*Time.deltaTime,Space.World);
}
}
}
}
}
1.触屏检测
if (Input.GetMouseButtonDown(0))
{
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
RaycastHit hitInfo;
if (Physics.Raycast(ray,out hitInfo))
{
if (Input.touchCount==1&&Input.GetTouch(0).phase==TouchPhase.Began)
{
if(Input.GetTouch(0).tapCount==2) Destroy(hitInfo.collider.gameObject);
}
}
}
1.AudioSource和AudioClip的区别
2.Invoke()函数的用法
利用renderTexture进行阴影模拟。rederTexture上的东西就是某个被指定的相机看到的东西。其实它还是一张贴图,可以把它赋给某个物体上的材质上。
关于Camera dont clean 未明
RendTexture渲染纹理
TenderTexture rt=new TenderTexture(Screen.width,Screen.height.)
arCamera.targetTexture=rt;
arCamera.Render();
RenderTexture.active=rt;
//重置
arCamera.targetTexture=null;
RenderTexture.active=null;
Destory(rt);
ScreenShot 截屏功能
ARscreenShot
点击按钮,截屏
截屏逻辑:获得系统时间,存放文件位置,命名。
获得当前系统时间
System.DateTime now=System.System.DateTime.Now;
Mathf.Sqrt 开根号的方法 (勾股定理)