Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Unity3d:WebGL视频纹理_Javascript_Video_Unity3d_Webgl - Fatal编程技术网

Javascript Unity3d:WebGL视频纹理

Javascript Unity3d:WebGL视频纹理,javascript,video,unity3d,webgl,Javascript,Video,Unity3d,Webgl,我想在WebGL中播放视频,但不支持电影文本。我尝试过使用Jonas的简单MoTextures示例进行WebGL,效果很好,但只适用于某些视频。我推断它只适用于高宽比为2:1的视频。例如示例一(640x320)或我做的一个是2000x1000 如果我尝试使用任何其他视频,我总是有相同的警告(数百次): 警告:绑定到纹理单元0的纹理不可渲染。也许吧 非2的幂次方,具有不兼容的纹理过滤 我完全被这一点困住了。代码与示例中的代码完全相同 顺便说一句,在我的2000x1000视频中,我也收到了警告,但只

我想在WebGL中播放视频,但不支持电影文本。我尝试过使用Jonas的简单MoTextures示例进行WebGL,效果很好,但只适用于某些视频。我推断它只适用于高宽比为2:1的视频。例如示例一(640x320)或我做的一个是2000x1000

如果我尝试使用任何其他视频,我总是有相同的警告(数百次):

警告:绑定到纹理单元0的纹理不可渲染。也许吧 非2的幂次方,具有不兼容的纹理过滤

我完全被这一点困住了。代码与示例中的代码完全相同

顺便说一句,在我的2000x1000视频中,我也收到了警告,但只有5次,视频播放得非常完美

JSlib中用于创建和更新函数的代码:

 WebGLMovieTextureCreate: function(url)
{
    var str = Pointer_stringify(url);
    var video = document.createElement('video');
    video.style.display = 'none';
    video.src = str;
    return videoInstances.push(video) - 1;
},

WebGLMovieTextureUpdate: function(video, tex)
{
    if (videoInstances[video].paused)
        return;
    GLctx.bindTexture(GLctx.TEXTURE_2D, GL.textures[tex]);
    GLctx.pixelStorei(GLctx.UNPACK_FLIP_Y_WEBGL, true);
    GLctx.texImage2D(GLctx.TEXTURE_2D, 0, GLctx.RGBA, GLctx.RGBA, GLctx.UNSIGNED_BYTE, videoInstances[video]);
    GLctx.pixelStorei(GLctx.UNPACK_FLIP_Y_WEBGL, false);
},
C#代码:


当纹理尚未加载时会发生这种情况。我猜2000x1000文件在您的本地计算机上,这就是为什么您会更早地遇到错误,但我在大视频(2000x1000)上遇到了这个错误,但在小视频(320x240)上没有遇到这个错误:/当我遇到错误时,视频永远不会加载。这两个文件都来自我的StreamingAssets文件夹。有没有办法确保在渲染之前加载视频,这样我就不会出现错误?你可以在创建纹理时在纹理中放置1个像素,这样它就可以立即渲染,从而消除错误。当你开始时,我的电脑的尺寸是1x1。@gman你的意思是从Unity部分还是直接从WebGL代码?我试着改变“新纹理2D”(1,1…“但是运气不好。我几乎不了解WebGL部分,因为我在WebGL中是一个十足的傻瓜。我可以为此获取一些代码吗?想法。尝试在C#中设置纹理中的1个像素。确保过滤设置为纹理。filterMode是双线性或C#中的点;当纹理尚未加载时会发生这种情况。我猜2000x1000文件在您的本地machi上ne,这就是为什么你会在更早的时候出现错误,但是我在大视频(2000x1000)中遇到了这个错误,而在小视频(320x240)中没有:/当我收到错误时,视频将不会加载。这两个文件都来自我的StreamingAssets文件夹。有没有办法确保在渲染之前加载视频,这样我就不会再收到错误?你可以通过在创建纹理时在纹理中放入1个像素来消除错误,这样纹理就可以立即渲染。开始时,我的图像大小为1x1。@gman你知道吗来自Unity部分或直接来自WebGL代码?我尝试更改“new Texture2D(1,1…”,但没有成功。我几乎不了解WebGL部分,因为我在WebGL中是一个十足的傻瓜。我可以为此获得一些代码吗?想法。尝试在C#中设置纹理中的1个像素。确保过滤设置为texture。filterMode是双线性或C中的点#
public WebGLMovieTexture (string url)
{
    m_Instance = WebGLMovieTextureCreate(url);
    m_Texture = new Texture2D(0, 0, TextureFormat.ARGB32, false);
    m_Texture.wrapMode = TextureWrapMode.Clamp;     
}

public void Update()
{
    var width = WebGLMovieTextureWidth(m_Instance);
    var height = WebGLMovieTextureHeight(m_Instance);
    if (width != m_Texture.width || height != m_Texture.height)
    {
        m_Texture.Resize(width, height, TextureFormat.ARGB32, false);
        m_Texture.Apply();
    }
    WebGLMovieTextureUpdate(m_Instance, m_Texture.GetNativeTextureID());
}