【问题标题】:Three.JS Apply Textures to Portion of Sphere三.JS 将纹理应用于球体的一部分
【发布时间】:2012-12-18 01:03:57
【问题描述】:

编辑:我已经决定将纹理应用于球体的一部分是正确的方法,但不知道如何实现它。我打算提出一个新问题,但我觉得最好让后人解决这个问题,以便其他人可以得到帮助。

see original question here...

我正在使用使用 Canvas 元素创建的纹理作为图像。将此纹理应用于整个球体很简单,但我试图将此纹理仅应用于球体的一部分。

我已经能够通过增加画布的大小来实现这一点,将我的图像与透明空间接壤。但是,这也会将纹理的大小增加到不可接受的大小。透明空间也占用纹理内存,大多数客户端无法处理创建的纹理大小......尤其是当我尝试制作非常小的高分辨率纹理时;因为纹理越小,分辨率越高,我必须将其包裹的透明度越高...

无论如何,显然在 3D 图形中有一种叫做“UVs”的东西,它允许完成这样的事情......我不知道如何在 THREEJS 中实现这样的解决方案。

这就是我制作纹理/材质的方式:

scene = new THREE.Scene();

geometry = new THREE.SphereGeometry(500, 50, 50);

texture = new THREE.Texture(document.getElementById('myCanvas'));
texture.needsUpdate = true;
material = new THREE.MeshBasicMaterial({
  map: texture
});
mesh = new THREE.Mesh(geometry, material);
scene.add(mesh);

如何更改它,使纹理仅适用于球体的一部分?

我看过这个:How to map texture image onto a part of a sphere, or how to cut out (intersect) a rectangle of a sphere's surface?

但我对 3D 图形的缺乏经验让我无法理解答案...

在继续这个项目之前,我是否应该学习更多关于着色器编程的知识?

我制作了一个 JSFiddle 来概述这个问题:http://jsfiddle.net/RCmBU/

如何将黑色画布仅应用于球体的红点部分?

对于这个问题的任何帮助将不胜感激。谢谢!

【问题讨论】:

标签: 3d three.js webgl


【解决方案1】:

您可能会使用不同的“细节级别”模型来提供最佳纹理,具体取决于客户端功能。我不知道这是否适合您的应用,但也许值得一看:

LOD example

【讨论】:

  • 嘿,谢谢!我不知道它存在,但不幸的是它让我在同一条船上。我基本上已经自己实现了这一点,当用户放大时,我可以提供各种级别的细节。我的问题是关于如何在最接近的缩放级别创建 LOD 对象...我的问题是纹理太大而无法缓冲@此缩放级别,所以我只能显示部分纹理。但我不知道如何只显示球体上的部分纹理!
  • 如果你想创建一个高度可扩展的 shpere,例如地球的视图,您需要将纹理切割成部分。然后,您从服务器应用程序请求您当前需要的部分(取决于缩放和位置),并将其作为纹理应用到您的球体上。
  • 我使用 SVG 作为纹理图像,所以我没有从服务器请求,而是以更高分辨率重新光栅化纹理......我遇到问题的部分是如何将纹理仅应用于球体的所需部分。我做了一个JSFiddle...我认为这主要解释了它,我希望纹理只放在红色标记之间。
  • 什么意思?对你来说它是空白的??
【解决方案2】:

使用 2 个画布:

1 从 svg 到画布

1 从画布到更小的画布

编辑:uvs 决定它在球体上的位置。

【讨论】:

  • 感谢您的回复!我已经尝试过这种方法,但是如何将较小的画布仅应用于球体的一部分?当我将小画布作为纹理应用到球体时,它会将纹理拉伸到整个球体......
  • 如果你有可见部分,那么计算它的 uvs 并同时更新球体。
  • 对不起,我的 3d 图形技术不是很好...你能引导我了解如何使用 THREE.JS 计算 UV 和更新球体吗?或者我需要裸机 WebGL 吗?
  • 你能为此生成一个 jsfiddle,然后我会调查一下吗??
  • 刚刚注意到 THREE.Texture 有一个映射属性 (see here)...但是,默认情况下它被简单地定义为一个空白函数...感谢您提供的任何帮助!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多