【问题标题】:Problems with THREE,js canvasTexture三、js canvasTexture的问题
【发布时间】:2021-05-19 12:45:55
【问题描述】:

这是我的问题。

我从 DEM 制作了地形几何学。现在我下载了一些 OSM-Tiles 将它们用作我的几何体的纹理。

每次有新的Tile到来,我的回调processMapImage就会被调用:

function processMapImage( img, y, x)
{
myImages[y][x] = img;
myTilesToLoad--;
    
if( myTilesToLoad == 0)
    {
    var tilesy = myImages.length;
    var tilesx = myImages[0].length;
    canvas = document.createElement('canvas');
    canvas.width  = 256*tilesx;
    canvas.height = 256*tilesy;
    ctx = canvas.getContext('2d');
    for( y = 0; y < tilesy; y++)
        {
        for( x = 0; x < tilesx; x++)
            ctx.drawImage( myImages[y][x], 256*x, 256*y, 256, 256);
        }
    tex = new THREE.CanvasTexture( canvas);
    mat = new THREE.MeshPhongMaterial( { map: tex});
    var mesh = new THREE.Mesh( myTerrainGeometry, mat);
    mesh.rotateX( -Math.PI/2);
    scene.add( mesh);
    }
}

只要不是所有的 Tiles 都被加载,我就将它们存储在 myImages 中。加载所有图块后,我创建一个画布并将所有图块绘制到该画布上。然后我创建纹理、材质,最后与我的地形几何一起创建网格并将其添加到场景中。

但是模型只显示了我地形的黑色表面。

到目前为止我已经测试过:

当我使用简单的彩色 phong 纹理时,一切都很好,所以闪电、几何、相机都很好。 当我在浏览器中显示我的画布时,所有图块都在那里并且正确排序。所以画布没问题。 当我在画布上绘制其他东西(线条、矩形)时,它将正确显示为几何体上的纹理。所以纹理没问题。只有我的图片不起作用。

任何想法,可能有什么问题?

【问题讨论】:

  • 如果您添加了灯光,并且它们按预期照亮了地形,那么它可能是您的循环。 myTilesToLoad 是否曾达到 0?此外,您的嵌套循环是否像您预期的那样迭代多次?如果不看到代码执行,很难判断问题出在哪里。可能是您的图像是黑色的,或者没有加载?
  • 循环没问题,因为我可以显示生成的画布,它是完整的,并且在正确的位置包含所有请求的图块。

标签: javascript canvas three.js textures drawimage


【解决方案1】:

我找到了解决问题的方法。

我必须添加

            img.crossOrigin = "anonymous";

为了启用 CORS。

【讨论】:

    猜你喜欢
    • 2021-01-22
    • 2021-09-27
    • 1970-01-01
    • 2012-11-05
    • 1970-01-01
    • 2013-04-09
    • 1970-01-01
    • 1970-01-01
    • 2021-08-25
    相关资源
    最近更新 更多