【发布时间】:2014-05-31 19:59:46
【问题描述】:
首先请随意在这里查看示例:http://alvarenga.co/threejs/index-2.html
基本上在这个项目中,我有两个圆柱体,一个是外部的(图像纹理),一个是内部的(带有视频纹理)...在创建第二个圆柱体并将其添加到场景后,我应用了一个视频作为 MeshBasicMaterial。
制作视频
// create the video element
video = document.createElement( 'video' );
video.src = "scene-4-death-loop.mp4";
video.load(); // must call after setting/changing source
video.play();
videoImage = document.createElement( 'canvas' );
videoImage.width = 600;
videoImage.height = 430;
videoImageContext = videoImage.getContext( '2d' );
// background color if no video present
videoImageContext.fillStyle = '#000000';
videoImageContext.fillRect( 0, 0, videoImage.width, videoImage.height );
videoTexture = new THREE.Texture( videoImage );
将视频应用到圆柱体
meshVid = new THREE.Mesh( new THREE.CylinderGeometry(730, 730, 500, 100, 100, true),
new THREE.MeshBasicMaterial ( { map: videoTexture } )) ;
您现在可以在我发布的链接中看到这很好。视频作为内圆柱上的纹理播放。唯一的问题是视频非常失真。它的应用方式是沿着圆柱体拉伸它。有没有办法让它占据它的实际大小?
我想这与将圆柱体拆分为多个面有关,并且可能仅将纹理应用于一个部分——但我不确定如何解决这个问题。即便如此,这将使视频的宽度完全取决于脸部的宽度。
对于那些好奇的人,我希望视频沿圆柱面弯曲,因此创建具有指定尺寸的平面不是一种选择。
这里有什么建议或指导吗?
提前致谢!
【问题讨论】:
-
你能在绘图程序上画出你希望如何映射视频的草图吗?
-
这是我想要达到的目标的快速图表:i.imgur.com/4BRbZSr.jpg
-
看看弯曲飞机是否适合你:jsfiddle.net/K5hLQ。如果您需要一个完整的圆,您可以添加另一个几何图形。
-
首先,这太棒了。让我非常接近我需要去的地方。我有几个关于 PlaneGeometry 的问题......你可以在这里看到一个例子:alvarenga.co/threejs/index-3.html......有一件事,你必须向左移动才能看到我添加的飞机。我没有看到任何参数可以将飞机向左或向右移动,我将如何定位它?我注意到的另一件事是……视频似乎被裁剪了。你知道我怎样才能使视频适合我创建的几何图形吗?你可以在这里看到视频:alvarenga.co/threejs/scene-4-death-loop.mp4
-
最终解决了这个问题!当我在上面创建画布元素时,我没有指定实际的视频宽度和高度。 DERP...定位新网格就像在其上设置 position.x 和 rotation.y 一样简单...再次感谢曲面,非常棒的东西!
标签: javascript html three.js html5-video