【发布时间】:2019-08-24 11:06:12
【问题描述】:
我有一台相机可以拍摄声称代表 235 度视野的圆形图像,例如:
我有一些使用threejs 的经验,并使用它正确渲染存储为等角投影的360x360 图像 - 网络上有大量示例可以做到这一点。
但我想使用threejs 来渲染我的圆形图像,可能是球内的纹理。我查看了一些示例(例如https://threejs.org/examples/#webgl_panorama_dualfisheye 和Mapping image onto a sphere in Three.js),这些示例似乎为我指明了正确的方向,但我认为我对threejs 如何将这些部分组合在一起还不够了解。
第二个(眼球)似乎让我很接近,但遵循眼球代码恰好意味着我的图像显示了两次(我想这是有道理的,因为我的图像是方形的,并且纹理必须覆盖整个球体。
所以我尝试使用 SphereGeometry 构造函数的长版本来制作部分球体 (360 * 235),但更改 phi 给了我一个看起来像橙色缺失切片的东西。更改 theta 给了我正确的形状,但纹理没有正确放置。
所以我的总体问题是如何完成这项工作,但我认为困扰我的主要问题是:
是什么控制了纹理在网格上的绘制方式? (这样我就可以只绘制一次纹理,并且只在我需要的球体部分上)
我看到设置 UV 是必要的(geometry.faceVertexUvs?),我阅读了https://en.wikipedia.org/wiki/UV_mapping,所以我有点理解这意味着什么,但我不知道从哪里开始找出正确的 UV对于我的图像(仍然像数字 1 一样,如何阻止它显示在球体的“背面”)
【问题讨论】:
-
问题是你的原始“圆形照片”缺少球体的一部分,或者换句话说,它只会填充等角投影的一部分,因此源代码应该考虑到它以某种方式:在圆周围添加一个边缘,“最多 360°”(但我不知道这是否是几何废话),或将圆形图像转换为“从 235 开始带有黑色条带的等角矩形”图像,然后包裹一个球体。
标签: javascript three.js texture-mapping