如何解决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中仍然看不到纹理:
可能是与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上):
我的问题是,使用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;
});
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。