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