Forge Viewer Autodesk v7 THREE.Material:THREE.PointCloudMaterial中未定义“地图”参数

问题描述

最终编辑:使用THREE.PointCloudMaterial在Autodesk Forge Viewer v7中被破坏。坚持使用三种着色器材质。

编辑:我正在使用的Forge Viewer具有Three.js版本r71(source)的自定义版本,这就是为什么我使用过时的代码。

EDIT2:我认为问题可能是因为地图想要使用THREE.ImageUtils.loadTexture()而不是THREE.TextureLoader?当我使用THREE.ImageUtils.loadTexture()时,会得到new problem,其中图像未定义。猜猜它与回调函数有关吗?

EDIT3:THREE.Material: 'map' parameter is undefined离开了Petr的回答,但是在Forge Viewer中仍然看不到纹理:

enter image description here

可能是与WebGL RENDER WARNING: there is no texture bound to the unit 0相关的问题吗?

代码(对不起,一团糟):

var PointMaterial = new THREE.PointCloudMaterial({
            color: 0xFF0000,size: 5,map: "",})
new THREE.TextureLoader().load( '../img/epidemics.png',function onLoad(tex) {
            PointMaterial.map = tex;
          });
var geom = new THREE.Geometry(0.5,0.5,0.5);
let up_to_down = -4.5
    for (let i = 0; i < 10; i++) {
         let left_to_right = -4.5
         for (let j = 0; j < 10; j++) {
              for (let k = 0; k < 100; k++) {
              var vertex = new THREE.Vector3();
              vertex.x = Math.random() * ((-0.5 + left_to_right) - (0.5 + left_to_right)) + (0.5+left_to_right);
              vertex.y = 0;
              vertex.z = Math.random() * ((-0.5 + up_to_down) - (0.5 + up_to_down)) + (0.5 + up_to_down);
              geom.vertices.push(vertex);
                }
            }
        }
var particles = new THREE.PointCloud(geom,PointMaterial);

编辑在此处停止

我的目标是向BoxGeometry点云中引入纹理。

每当我运行以下代码(或任何将map用于纹理的代码)时,都会在控制台中收到警告。

let geometryForShapes = new THREE.BoxGeometry( 1,1,1 );
var materialForShapes = new THREE.PointCloudMaterial({
            map: new THREE.TextureLoader().load( '../data/toppng.com-particles-3000x2000.png' ),color: 0xffff00,transparent: false,opacity: 0.9,size: 10,})
particles = new THREE.PointCloud( geometryForShapes,materialForShapes )

控制台输出:THREE.Material: 'map' parameter is undefined

r121文档(我被困在r71上):

PointsMaterial Doc

Texture Doc

我的问题是,使用PointCloudMaterial是我的错吗?这是一个错误吗?我需要导入什么东西吗?

解决方法

您的材料创作应该是

var material = new THREE.PointsMaterial( params );

不确定为什么要使用PointCloudMaterial。 另外,PointCloud在Three.js中也不是标准类。链接到的页面建议您使用积分:

var points = new THREE.Points( geometry,material );

,

THREE.Material: 'map' parameter is undefined错误来自three.js,它与以下代码行有关:

map: new THREE.TextureLoader().load( '../data/toppng.com-particles-3000x2000.png' ),

Three.js R71中的load方法不返回任何内容。必须从回调函数中检索已加载的纹理,例如:

var materialForShapes = new THREE.PointCloudMaterial({
            map:,color: 0xffff00,transparent: false,opacity: 0.9,size: 10,});

new THREE.TextureLoader().load( '../data/toppng.com-particles-3000x2000.png',function onLoad(tex) {
  materialForShapes.map = tex;
});

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...