【问题标题】:How to get texture dimensions with Three.js如何使用 Three.js 获取纹理尺寸
【发布时间】:2018-08-13 03:58:26
【问题描述】:

我想知道是否可以获得纹理的尺寸? 我用这条线来设置我的纹理:

const texture = THREE.ImageUtils.loadTexture(src)

也许有必要加载图像以获取其尺寸(但是否只能使用 javascript,而不是 html 及其 div?)?

我希望我之后创建的材质适合纹理尺寸。

【问题讨论】:

  • 你加载的是什么格式的图片?
  • 我使用的是地图网络服务,所以我不知道格式(它不在我用来加载图像的 URL 中)
  • 您应该能够从地图服务获取该信息,或者通过他们的文档,或者通过手动下载图像并自己检查其格式。

标签: javascript three.js textures


【解决方案1】:

首先,THREE.ImageUtils.loadTexture 在最新的 THREE.js (r90) 中已被弃用。改为查看THREE.TextureLoader

也就是说,您可以从加载的纹理中获取图像及其属性。

texture.image

根据图像格式,您应该能够访问width/height 属性,这将是您的纹理尺寸。

请注意:加载纹理是异步的,因此您需要定义 onLoad 回调。

var loader = new THREE.TextureLoader();
var texture = loader.load( "./img.png", function ( tex ) {
    // tex and texture are the same in this example, but that might not always be the case
    console.log( tex.image.width, tex.image.height );
    console.log( texture.image.width, texture.image.height );
} );

【讨论】:

  • 我已经尝试过使用 TextureLoader,但它对我不起作用。似乎没有读取图像,所以我最终得到了一个白色物体。这就是我决定使用 ImageUtils 的原因,它的属性图像也是空的,但显示纹理。字段 Image 是“未定义”,但有字段“sourceFile”的信息。
  • 你能发个sn-p吗?
  • 检查.naturalWidth.naturalHeight而不是.height.width可能是个好主意,因为自然高度/宽度保证包含实际图像大小和.width/ .height不要(至少在某些情况下,最好是安全的):developer.mozilla.org/en-US/docs/Web/API/HTMLImageElement/…
  • 值得注意的是,调用TextureLoader.load() 返回的纹理可能还不包含图像。而在回调函数中它确实如此。这是因为 load() 函数的异步特性。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-21
  • 1970-01-01
  • 2014-10-17
  • 1970-01-01
  • 1970-01-01
  • 2011-07-24
相关资源
最近更新 更多