Javascript 如何在Three.js中为.obj模型添加颜色?

Javascript 如何在Three.js中为.obj模型添加颜色?,javascript,model,three.js,textures,Javascript,Model,Three.js,Textures,我正在用Three.js创建一个WebGL场景,我遇到了下一个问题:我正在尝试用Three.js加载一个.obj模型,我想向该.obj模型添加一种颜色(例如蓝色),而不是mtl纹理。我试着这样做: // instantiate a loader var loader = new THREE.OBJLoader(); // load a resource loader.load( // resource URL 'model_path.obj', // Function

我正在用Three.js创建一个WebGL场景,我遇到了下一个问题:我正在尝试用Three.js加载一个.obj模型,我想向该.obj模型添加一种颜色(例如蓝色),而不是mtl纹理。我试着这样做:

// instantiate a loader
var loader = new THREE.OBJLoader();

// load a resource
loader.load(
    // resource URL
    'model_path.obj',
    // Function when resource is loaded
    function ( object ) {
        scene.add( object );
    }
);
但我还有一个错误,那就是:

WebGL: INVALID_VALUE: bufferData: no data
Uncaught TypeError: Cannot read property 'length' of undefined
[.CommandBufferContext]GL ERROR :GL_INVALID_VALUE : glVertexAttribPointer: size GL_INVALID_VALUE
如何更正错误,以加载蓝色的obj模型


非常感谢你

嘿,错误似乎是文件中没有顶点。OBJ文件是简单的原始文件,具有

v:::顶点

纹理坐标

vn::正常

usemtl:::定义纹理、ka(环境光)、ks(镜面反射)和kd(漫反射)

尝试将obj导入混合器,然后使用三角形面导出,如下所示:

实际上,如果不这样做,索引将以face4格式显示,如:

0/1/2/3 3/2/4/0。。。。等等 三角剖分后,它们看起来像:

0/1/2 3/2/0


因此,当您更正*.obj时,您可以在三个解析器中加载该文件,并将材料添加到子对象。

您可以制作小提琴或共享obj文件吗?如果不是机密文件,我想检查一下。。??否则将很难帮助您下载此Dropbox链接中的.obj文件:它可以工作!谢谢模型已正确加载。但是现在我的问题是纹理没有加载。我的意思是,“var material=new THREE.MeshPhongMaterial({map:THREE.ImageUtils.loadTexture('path')});”方法已被弃用。当我使用TextureLoader时,不会加载纹理,而是加载随机颜色。。。为什么会发生这种情况?对我来说,纹理也加载纹理坐标有var loader=new THREE.ImageLoader(manager);load('textures/UV_Grid_Sm.jpg',函数(image){texture.image=image;texture.needsUpdate=true;});如果(child instanceof THREE.Mesh){child.material.map=texture;}我对纹理也没有问题。查看纹理是否正确映射的一种方法是在blender中加载*.obj,然后进行uv映射。质感科迪酸盐没有问题:)请随时提出任何疑问