【问题标题】:Automatically keep texture's ratio and texture's size when repeating重复时自动保持纹理的比例和纹理的大小
【发布时间】:2013-01-04 19:03:34
【问题描述】:

我正在使用 three.js 来建造房子,我有墙壁和墙壁的纹理。

墙基本上是 CubeGeometry。

我采用了独特的比例:1cm = 1px

纹理可以是砖块或任何其他建筑材料,但纹理文件始终为 512x512,其中包含详细信息。例如:纹理文件中的一块砖将是每 4px 10px。

我需要保持这个比例来保持场景的真实性。

var texture = THREE.ImageUtils.loadTexture("images/wall.jpg");

texture.wrapS = THREE.RepeatWrapping;
texture.wrapT = THREE.RepeatWrapping;

texture.repeat = new THREE.Vector2(0.2 , 0.2);

var wall = new THREE.Mesh(new THREE.CubeGeometry(100, 100, 10), new THREE.MeshBasicMaterial({ map: texture }));

效果很好,因为案例很简单;),为每面墙(可以有任何尺寸)制作一个比例也很简单

但实际上我有很多其他几何图形(程序生成等),是否有任何可能的属性,如:“THREE.KeepMyTextureSizeAndRepeat”包装?或者我需要为我的每个自定义几何图形制作比率吗?

如果您对此用例有任何建议,我会很高兴:)

非常感谢

编辑:最终目标是在 2D 画布中做类似“模式”的事情

var pattern = context.createPattern(imageObj, repeatOption);
context.fillStyle = pattern;
context.fill();

当你做这样的事情时,例如在一个矩形上,模式将被重复保持纵横比(例如http://www.html5canvastutorials.com/tutorials/html5-canvas-patterns-tutorial/

【问题讨论】:

    标签: three.js


    【解决方案1】:

    您必须自己计算每个比率,因为纹理对像素一无所知。它只知道 uvs。

    【讨论】:

    • 感谢您的回答,实际上我是在问,因为我认为当您使用 CLAMP_TO_EDGE 进行包装时,会在知道像素的情况下渲染纹理?不是吗?
    • 不,当使用 Clampto 边缘时,它只会复制最后一个像素而不是整个图片
    • 我觉得我的问题很混乱,所以我修改了它。但我的理解是不可能以简单的方式......我会做微积分:(
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-06-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-09
    • 2012-12-01
    • 2017-04-10
    • 2018-09-20
    相关资源
    最近更新 更多