【问题标题】:Three.js Video as a Texture - Texture DistortionThree.js 视频作为纹理 - 纹理失真
【发布时间】: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


【解决方案1】:

尝试使用texture.repeattexture.offset

videoTexture.repeat.x = 10;
videoTexture.offset.x = 0.5;

【讨论】:

  • 所以我和他们一起玩。重复,确定纹理重复的次数,所以我将其设置为 1。我更新了测试:alvarenga.co/threejs/index-2.htmloffet 应该确定纹理渲染位置的距离。不过,这似乎仍然很奇怪。由于偏移,有很多奇怪的模糊失真。我注意到的另一件事,three.js 似乎正在改变我的视频的纵横比以适应它......你可以在这里看到实际的视频:alvarenga.co/threejs/scene-4-death-loop.mp4 ...基本上我想渲染整个视频实际尺寸
猜你喜欢
  • 1970-01-01
  • 2013-04-18
  • 2016-10-19
  • 1970-01-01
  • 1970-01-01
  • 2019-07-31
  • 1970-01-01
  • 1970-01-01
  • 2012-09-17
相关资源
最近更新 更多