首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何禁用three.js来调整图像的大小?

如何禁用three.js来调整图像的大小?
EN

Stack Overflow用户
提问于 2016-03-17 11:46:21
回答 1查看 8.9K关注 0票数 12

如果纹理图像不是2的幂,three.js会自动调整它的大小。在我的示例中,使用自定义画布作为纹理,这不是two.while调整大小的力量,这使得纹理不会出现properly.Is,因此可以禁用three.js中图像的大小调整。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-03-17 15:15:34

three.js实际上是想让帮你一个忙

因为它是开源的,所以我们可以读取WebGLRenderer.js的源代码,并看到setTexture方法调用(非公共可见的)方法uploadTexture

后者有这样的支票:

代码语言:javascript
代码运行次数:0
运行
复制
if ( textureNeedsPowerOfTwo( texture ) && isPowerOfTwo( image ) === false ){

    image = makePowerOfTwo( image );
}

这本身就解释得很清楚。

现在,您可能会想知道textureNeedsPowerOfTwo实际上检查了什么。让我们看看。

代码语言:javascript
代码运行次数:0
运行
复制
function textureNeedsPowerOfTwo( texture ) {

        if ( texture.wrapS !== THREE.ClampToEdgeWrapping || texture.wrapT !== THREE.ClampToEdgeWrapping ) return true;
        if ( texture.minFilter !== THREE.NearestFilter && texture.minFilter !== THREE.LinearFilter ) return true;

        return false;
}

如果您对与夹子不同的纹理使用包装,或者使用不最近或不线性的筛选,则纹理将被缩放。

如果您对这个代码感到惊讶,我强烈建议您看看关于使用纹理的MDN页面

引文

陷阱:这些纹理非动力的两个纹理不能与mipmapping一起使用,它们不能“重复”(瓷砖或包装)。..。 在不执行上述配置的情况下,WebGL需要返回实心黑色: rgba(0,0,0,1),从而使两个纹理的NPOT非幂的所有示例都失败。

因此,使用带有的NPOT纹理,不正确的纹理参数将为您提供好的旧实心黑色

由于three.js是开源的,所以您可以编辑本地副本并删除“违规”检查。

然而,一种更好、更简单和更易于维护的方法是简单地缩放UV映射。毕竟,它只是为了这个用例而存在。

票数 26
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36059642

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档