添加纹理到json没有加载

时间:2014-11-04 06:03:44

标签: javascript json opengl-es webgl texture-mapping

我正在尝试将纹理添加到jsonloaded对象,由于某种原因没有加载。

的javascript

// Load in the mesh and add it to the scene.
var loader = new THREE.JSONLoader(true);
loader.load(jsonPath, function (geometry, materials ) {
    skateboardBase = new THREE.Mesh(geometry, new THREE.MeshFaceMaterial(materials));
    scene.add(skateboardBase);
});

如果我删除了材料部分,那么没有纹理就可以正常工作

JSON

"materials" : [ {
        "DbgColor" : 15658734,
        "DbgIndex" : 0,
        "DbgName" : "SVGMat.001",
        "colorAmbient" : [0.3294117738218869, 0.6243137452649137, 0.3607843214390325],
        "colorDiffuse" : [0.3294117738218869, 0.6243137452649137, 0.3607843214390325],
        "colorSpecular" : [0.5, 0.5, 0.5],
                "illumination" : 2,
        "depthTest" : true,
        "depthWrite" : true,
        "specularCoef" : 50,
        "transparency" : 1.0,
        "transparent" : false,
        "vertexColors" : false,
                "mapDiffuse" : "../textures/dash.jpg",
        "shading" : "Lambert"
    }],
"vertices" : [1.32997,1.125,-0.870963,1.34966,1.125, ... ],
"uvs" : [],
"faces" : [34,124,126,125,0,...],

错误

[.WebGLRenderingContext]GL ERROR :GL_INVALID_OPERATION : glDrawElements: attempt to access out of range vertices in attribute 2

1 个答案:

答案 0 :(得分:0)

我不太了解threejs,但乍一看你有一个空的uvs数组。没有纹理,我猜三个人根本就没有使用这个阵列,没有必要。当您添加具有纹理的材质时,它会尝试使用该数组,该数组为空。因此GL给出了越界错误(相当不错 - 桌面GL会崩溃:))我假设属性2是uv数组。

要解决此问题,请填充uvs(或者不提供它们并编写着色器以隐式生成它们。)

GL不能为顶点属性使用单独的索引。 UV的数量必须与顶点的数量完全匹配。此外,faces数组中的索引无法引用不存在的顶点。