- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想在 Android 上的 Unity 虚拟现实中播放立体 360 度视频。到目前为止,我一直在做一些研究,我有两个摄像头用于右眼和左眼,每个摄像头周围都有一个球体。我还需要一个自定义着色器来使图像渲染在球体内部。通过将 y 平铺设置为 0.5,我将图像的上半部分显示在一个球体上,下半部分显示在另一个球体上,y 平铺设置为 0.5,y 偏移量为 0.5。 有了它,我可以显示已经正确的 3D 360 度图像。整个想法来自 this tutorial 。
现在对于视频,我需要控制视频速度,所以 it turned out 我需要来自新的 Unity 5.6 beta 的 VideoPlayer。到目前为止,我的设置要求视频播放器在两个球体上播放视频,一个球体播放上半部分(一只眼睛),另一个视频播放下半部分(另一只眼睛)。
这是我的问题:我不知道如何让视频播放器在两种不同的 Material 上播放相同的视频(因为它们具有不同的平铺值)。有办法吗?
我得到一个提示,我可以使用相同的材质并通过 UV 实现平铺效果,但我不知道它是如何工作的,我什至没有让视频播放器使用两者上的 Material 相同。我有一张截图 of that here 。右球体只有 Material videoMaterial。无需平铺,因为我必须通过紫外线来完成。
走哪条路,怎么做?我在这里的方法正确吗?
最佳答案
Am I on the right way here?
差不多,但您当前使用的是 Renderer
和 Material
而不是 RenderTexture
和 Material
。
Which way to go and how to do it?
您需要为此使用RenderTexture
。基本上,您将视频渲染到 RenderTexture
,然后将该纹理分配给两个 Spheres 的 Material 。
1.创建一个RenderTexture
并将其分配给VideoPlayer
。
2.为球体创建两种 Material 。
3.将VideoPlayer.renderMode
设置为VideoRenderMode.RenderTexture;
4.将两个球体的Texture设置为RenderTexture
5.准备和播放视频。
下面的代码就是在做这件事。它应该开箱即用。您唯一需要做的就是根据您的需要修改每种 Material 的平铺和偏移。
你还应该注释掉:
leftSphere = createSphere("LeftEye", new Vector3(-5f, 0f, 0f), new Vector3(4f, 4f, 4f));
rightSphere = createSphere("RightEye", new Vector3(5f, 0f, 0f), new Vector3(4f, 4f, 4f));
然后使用从任何 3D 应用程序导入的球体。该行代码仅用于测试目的,使用 Unity 的球体播放视频不是一个好主意,因为球体没有足够的细节来使视频流畅。
using UnityEngine;
using UnityEngine.Video;
public class StereoscopicVideoPlayer : MonoBehaviour
{
RenderTexture renderTexture;
Material leftSphereMat;
Material rightSphereMat;
public GameObject leftSphere;
public GameObject rightSphere;
private VideoPlayer videoPlayer;
//Audio
private AudioSource audioSource;
void Start()
{
//Create Render Texture
renderTexture = createRenderTexture();
//Create Left and Right Sphere Materials
leftSphereMat = createMaterial();
rightSphereMat = createMaterial();
//Create the Left and Right Sphere Spheres
leftSphere = createSphere("LeftEye", new Vector3(-5f, 0f, 0f), new Vector3(4f, 4f, 4f));
rightSphere = createSphere("RightEye", new Vector3(5f, 0f, 0f), new Vector3(4f, 4f, 4f));
//Assign material to the Spheres
leftSphere.GetComponent<MeshRenderer>().material = leftSphereMat;
rightSphere.GetComponent<MeshRenderer>().material = rightSphereMat;
//Add VideoPlayer to the GameObject
videoPlayer = gameObject.AddComponent<VideoPlayer>();
//Add AudioSource
audioSource = gameObject.AddComponent<AudioSource>();
//Disable Play on Awake for both Video and Audio
videoPlayer.playOnAwake = false;
audioSource.playOnAwake = false;
// We want to play from url
videoPlayer.source = VideoSource.Url;
videoPlayer.url = "http://www.quirksmode.org/html5/videos/big_buck_bunny.mp4";
//Set Audio Output to AudioSource
videoPlayer.audioOutputMode = VideoAudioOutputMode.AudioSource;
//Assign the Audio from Video to AudioSource to be played
videoPlayer.EnableAudioTrack(0, true);
videoPlayer.SetTargetAudioSource(0, audioSource);
//Set the mode of output to be RenderTexture
videoPlayer.renderMode = VideoRenderMode.RenderTexture;
//Set the RenderTexture to store the images to
videoPlayer.targetTexture = renderTexture;
//Set the Texture of both Spheres to the Texture from the RenderTexture
assignTextureToSphere();
//Prepare Video to prevent Buffering
videoPlayer.Prepare();
//Subscribe to prepareCompleted event
videoPlayer.prepareCompleted += OnVideoPrepared;
}
RenderTexture createRenderTexture()
{
RenderTexture rd = new RenderTexture(1024, 1024, 16, RenderTextureFormat.ARGB32);
rd.Create();
return rd;
}
Material createMaterial()
{
return new Material(Shader.Find("Specular"));
}
void assignTextureToSphere()
{
//Set the Texture of both Spheres to the Texture from the RenderTexture
leftSphereMat.mainTexture = renderTexture;
rightSphereMat.mainTexture = renderTexture;
}
GameObject createSphere(string name, Vector3 spherePos, Vector3 sphereScale)
{
GameObject sphere = GameObject.CreatePrimitive(PrimitiveType.Sphere);
sphere.transform.position = spherePos;
sphere.transform.localScale = sphereScale;
sphere.name = name;
return sphere;
}
void OnVideoPrepared(VideoPlayer source)
{
Debug.Log("Done Preparing Video");
//Play Video
videoPlayer.Play();
//Play Sound
audioSource.Play();
//Change Play Speed
if (videoPlayer.canSetPlaybackSpeed)
{
videoPlayer.playbackSpeed = 1f;
}
}
}
还有Unity tutorial关于如何使用特殊着色器执行此操作,但这对我和其他一些人不起作用。我建议您使用上述方法,直到将 VR 支持添加到 VideoPlayer
API。
关于c# - 使用 VideoPlayer 播放 360 度立体视频,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43004339/
我想使用以下 load()接受五个参数的方法,以便我可以从较大的视频加载一个小的“摘录”: http://help.adobe.com/en_US/FlashPlatform/reference/ac
我对 SwiftUI 还很陌生,我不太确定如何在 iOS 14 上使用 VideoPlayer 循环播放视频,而且我发现的相关文档很少。我发现的大多数解决方案在很多方面都非常复杂和令人困惑。如果有人能
在这篇文章中说明了Using new Unity VideoPlayer and VideoClip API to play video可以“根据需要检索每一帧的纹理” 请问将当前帧作为 Textur
我有一个 MovieController 类来管理我项目中的视频。我正在使用 Unity 5.6 中引入的新视频播放器组件。 我想在电影播放完毕后调用一个方法。到目前为止,这个方法只是一个Debug.
Android VideoPlayer 支持哪些文件格式? 以及Android中VideoView和VideoPlayer的区别。 我正在寻找教程、视频、论坛答案等。 任何与此相关的... 最佳答案
我有以下代码,它在我手机的 SD 卡上的文本文件中搜索网络服务器上歌曲的 url。 我可以通过转动手机来改变方向来随机播放歌曲,但我不明白这种逻辑是从哪里来的。这是视频播放器的默认行为吗,因为我在我的
我正在使用 Exoplayer 在我的 Android 应用中播放视频。我想将播放/暂停按钮放在视频播放器 View 的中间(如下图所示)。如何实现这一目标 我只是用一个新的布局来代替 Android
您好,我面临与添加 subview 相关的问题;我遵循代码: NSString *urlStr = [NSString stringWithFormat:@"http:x/ipho
我是最近来自 Flex/Actionscript 星球的难民,仍在摸索基础知识,所以这可能是一个非常简单的问题。我对下面的行感到困惑: videojs("videoPlayer", {}, funct
我在 cmd 提示符下尝试了以下插件,但它们不起作用:cordova插件添加com.moust.cordova.videoplayer cordova 插件添加 org.apache.cordova.
我刚开始使用 Kivy,所以如果我做错了什么请指出。我正在尝试使用视频播放器。也就是说,我似乎无法让它识别任何“选项”,而且我真的很想要一种隐藏控件的方法(以防止用户在电影播放时停止/暂停/更改音量/
我搜索了 XNA Media.VideoPlayer 库。它没有设置时间的直接方法,但是 MediaPlayer 有一个 Position 来设置播放位置。 有什么间接的方法来设置时间吗? 最佳答案
我是 Unity 的新手,正在尝试通过我的脚本更新 VideoPlayer。我已确认代码使用预设值工作,但当我运行 videoPlayer.url = "new video url" 时,它不会播放。
我正在尝试在 flutter web 上播放本地视频文件,但在选择视频后卡住了。根据这篇 github 帖子,可以通过将视频的 uint8list 转换为 blob 然后使用 videoControl
当我放 VideoPlayer 时出现问题查看内部 NavigationView的父 View 或 subview 。在这个例子中, subview 将显示导航栏: struct ParentView
可能相关:Plugin videoPlayer PhoneGap not working 我正在尝试从适用于 Android 的 PhoneGap 3.0 应用程序播放 youtube 视频,但遇到了
我正在尝试为我的视频播放器设置音量控制 slider ,但很难弄清楚如何控制 Unity Video Player 中视频剪辑的音量。我似乎无法将音频源链接到视频剪辑,因此我可以控制音量。我对单个 m
我想在 Android 上的 Unity 虚拟现实中播放立体 360 度视频。到目前为止,我一直在做一些研究,我有两个摄像头用于右眼和左眼,每个摄像头周围都有一个球体。我还需要一个自定义着色器来使图像
我被 GrindPlayer 的代码困住了。我正在尝试使用链接上给出的说明在我的计算机上构建它: https://github.com/kutu/GrindPlayer 但它没有在构建文件夹中形成 s
我想以自定义大小显示 .mov 文件。我的 Controller 有一个 xib 文件。 顶 View 是 UIView 的子类。我想在此 View 中显示视频。有我创建视频 View 的代码。但是我
我是一名优秀的程序员,十分优秀!