Unity开发之Shader—AR涂涂乐项目实战
Unity3D Shader示例之—AR涂涂乐实现原理 Unity3D Shader示例之—AR涂涂乐实现方法 最近一段时间忙于项目,日志好久没有更新了,现在挤点时间来一发! 曾经对AR涂涂乐的原理进行了分析(详见开头链接),但和实际项目还有一些差距。
- 主角显示在屏幕中间
- 脱卡
- 模型接受光照
下面分别解决这些问题! 要实现追踪目标显示的屏幕中间很简单,一句话搞定:
_trackingObj.transform.parent = VuforiaManager.Instance.ARCameraTransform;
如何实现脱卡呢,需要解决两个问题,第一个是离开识别卡,追踪目标不消失,第二个是成功完成一次着色后,不再着色,否则获取的颜色就不是我们涂的卡片上的颜色了。 第一个问题好解决,在接收到Lost事件时,不清除追踪目标就行了
public void OnTrackingLost()
{
//Clear();
}
第二个问题解决的原理是,在目标被识别时获取摄像头所拍摄的画面作为纹理,然后将纹理传给材质球。 获取摄像机纹理:
if (_texture)
DestroyImmediate(_texture);
_texture = new Texture2D((int)rect.width, (int)rect.height, TextureFormat.RGB24, false);
//读取屏幕像素信息并存储为纹理数据
_texture.ReadPixels(rect, 0, 0);
_texture.Apply();
在Shader的顶点着色器代码中,将世界坐标转为屏幕坐标:
o.fixedPos = ComputeScreenPos(mul(UNITY\_MATRIX\_VP, fixedPos));
UNITY_MATRIX_VP会根据Camera实时计算最新的转换矩阵,所以在获取纹理的现时将转换矩阵保存并转给材质球
//获取VP值
Matrix4x4 P = GL.GetGPUProjectionMatrix(Camera.main.projectionMatrix, false);
Matrix4x4 V = Camera.main.worldToCameraMatrix;
Matrix4x4 VP = P * V;
完整代码 TrackingBehaviour 光照就不介绍了直接从入门精要复制来的Blinn-Phong光照模型 Coloring3D_VP_Lighting.shader 完整的实现方式请查看Github上的ARProject项目! 下面总结一下开发过程中会遇到一些问题:
ARCamera的World Center Mode必须是First Target
获取识别图4个角的世界坐标,注意调用TransformPoint函数的对象,示例使用_controller
Vector3 targetAnglePoint1 = _controller.transform.TransformPoint(new Vector3(-halfSize.x, 0, halfSize.y)); Vector3 targetAnglePoint2 = _controller.transform.TransformPoint(new Vector3(-halfSize.x, 0, -halfSize.y)); Vector3 targetAnglePoint3 = _controller.transform.TransformPoint(new Vector3(halfSize.x, 0, halfSize.y)); Vector3 targetAnglePoint4 = _controller.transform.TransformPoint(new Vector3(halfSize.x, 0, -halfSize.y));
识别成功时,注意重置目标的坐标
//重置坐标 //this.transform.parent.localPosition = Vector3.zero; //this.transform.parent.localRotation = Quaternion.Euler(0, 0, 0); this.transform.localPosition = Vector3.zero; this.transform.localRotation = Quaternion.Euler(0, 0, 0);
初始化TrackableEventHandler状态为NOT_FOUND
mTrackableBehaviour.OnTrackerUpdate(TrackableBehaviour.Status.NOT_FOUND);
Show一下在项目中实现的效果: 示例工程
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 xue_huashan@163.com
文章标题:Unity开发之Shader—AR涂涂乐项目实战
文章字数:641
本文作者:max-xue
发布时间:2017-10-09, 15:39:59
最后更新:2019-11-09, 22:42:58
原始链接:http://blog.le-more.com/2017/10/09/u3d/unity3d-shader-e7-a4-ba-e4/版权声明: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。