用VideoPlayer播放360立体视频我想在Android上的Unity中播放虚拟现实中的360立体视频。到目前为止,我一直在做一些研究,我的右眼和左眼有两个摄像头,每个摄像头都围绕着它们。我还需要一个自定义着色器来渲染球体内的图像。通过将y-tiling设置为0.5,将y-tile设置为0.5,将y-offset设置为0.5,我使图像的上半部分出现在一个球体上,下半部分出现在另一个球体上。有了这个,我可以显示已经正确的3D360度图像。整个想法来自本教程。现在对于视频,我需要控制视频速度,所以我需要新的Unity5.6beta中的VideoPlayer。到目前为止,我的设置要求视频播放器在两个球体上播放视频,其中一个播放上半部分(一只眼睛),另一个视频播放下半部分(另一只眼睛)。这是我的问题:我不知道如何让视频播放器在两种不同的材料上播放相同的视频(因为它们具有不同的平铺值)。有没有办法做到这一点?我得到一个提示,我可以使用相同的材??质并通过UV实现平铺效果,但我不知道它是如何工作的,我什至没有让视频播放器在两个对象中使用相同的材??质来播放视频商场。我这里有截图。右边的球体只有材质videoMaterial。没有平铺,因为我必须通过紫外线来完成。走哪条路?我在正确的道路上吗?我在正确的道路上吗?您现在几乎是在使用Renderer和Material而不是RenderTexture和Material。走哪条路?您需要使用RenderTexture。基本上,您将视频渲染到RenderTexture,然后将该纹理分配给两个Spheres的材质。1.创建一个RenderTexture并将其分配给VideoPlayer。2.为球体创建两种材质。3、设置VideoPlayer.renderMode为VideoRenderMode.RenderTexture;4.将两个球体的贴图从RenderTexture设置为Texture5,准备播放视频。下面的代码就是这样做的。它应该开箱即用。您唯一需要做的就是根据您的需要修改每种材质的平铺和偏移。您还应该注释掉:leftSphere=createSphere("LeftEye",newVector3(-5f,0f,0f),newVector3(4f,4f,4f));rightSphere=createSphere("RightEye",newVector3(5f,0f,0f),newVector3(4f,4f,4f));然后使用从任何3D应用程序导入的Sphere。这行代码仅用于测试目的,用Unity的球体播放视频不是一个好主意,因为球体没有足够的细节使视频流畅。使用统一引擎;使用UnityEngine.Video;公共类StereoscopicVideoPlayer:MonoBehaviour{RenderTexturerenderTexture;材质leftSphereMat;素材对SphereMat;公共游戏对象leftSphere;公共游戏对象rightSphere;私人视频播放器视频播放器;//音频私有AudioSourceaudioSource;voidStart(){//创建渲染纹理renderTexture=createRenderTexture();//创建左右球体材质leftSphereMat=createMaterial();rightSphereMat=createMaterial();//创建左右球体SpheresleftSphere=createSphere("LeftEye",newVector3(-5f,0f,0f),newVector3(4f,4f,4f));rightSphere=createSphere("RightEye",newVector3(5f,0f,0f),newVector3(4f,4f,4f));//为球体分配材质leftSphere.GetComponent().material=leftSphereMat;rightSphere.GetComponent().material=rightSphereMat;//添加VideoPlayer到GameObjectvideoPlayer=gameObject.AddComponent();//添加AudioSourceaudioSource=gameObject.AddComponent();//禁用视频和音频的唤醒播放videoPlayer.playOnAwake=false;audioSource.playOnAwake=false;//我们想从url播放videoPlayer.source=VideoSource.Url;videoPlayer.url="http://www.quirksmode.org/html5/videos/big_buck_bunny.mp4";//设置音频输出为AudioSourcevideoPlayer.audioOutputMode=VideoAudioOutputMode.AudioSource;//将Video中的Audio赋给AudioSource播放videoPlayer.EnableAudioTrack(0,true);videoPlayer.SetTargetAudioSource(0,audioSource);//设置输出模式为RenderTexturevideoPlayer.renderMode=VideoRenderMode.RenderTexture;//设置RenderTexture来存储图片到videoPlayer.targetTexture=renderTexture;//将两个球体的Texture设置为来自RenderTexture的TextureassignTextureToSphere();//准备Video防止BufferingvideoPlayer.Prepare();//订阅prepareCompleted事件videoPlayer.prepareCompleted+=OnVideoPrepared;}RenderTexturecreateRenderTexture(){RenderTexturerd=newRenderTexture(1024,1024,16,RenderTextureFormat.ARGB32);rd.创建();返回路;}MaterialcreateMaterial(){returnnewMaterial(Shader.Find("Specular"));}voidassignTextureToSphere(){//将两个Spheres的Texture设置为来自RenderTexture的TextureleftSphereMat.mainTexture=renderTexture;rightSphereMat.mainTexture=renderTexture;}GameObjectcreateSphere(stringname,Vector3spherePos,Vector3sphereScale){GameObjectsphere=GameObject.CreatePrimitive(PrimitiveType.Sphere);sphere.transform.position=spherePos;sphere.transform.localScale=sphereScale;sphere.name=名称;返回球体;}voidOnVideoPrepared(VideoPlayersource){Debug.Log("DonePreparingVideo");//播放视频videoPlayer.Play();//播放声音audioSource.Play();//改变播放速度if(videoPlayer.canSetPlaybackSpeed){videoPlayer.playbackSpeed=1f;}}}还有关于如何使用特殊着色器操作有一个用于此的Unity教程,但这对我和其他人不起作用我建议您使用上述方法,直到将VR支持添加到VideoPlayerAPI。以上就是C#学习教程:使用VideoPlayer播放360立体视频分享的所有内容。如果对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。涉及侵权,请点击维权联系管理员删除。如需转载请注明出处:
