我正在尝试将纹理添加到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
答案 0 :(得分:0)
我不太了解threejs,但乍一看你有一个空的uvs
数组。没有纹理,我猜三个人根本就没有使用这个阵列,没有必要。当您添加具有纹理的材质时,它会尝试使用该数组,该数组为空。因此GL给出了越界错误(相当不错 - 桌面GL会崩溃:))我假设属性2是uv数组。
要解决此问题,请填充uvs
(或者不提供它们并编写着色器以隐式生成它们。)
GL不能为顶点属性使用单独的索引。 UV的数量必须与顶点的数量完全匹配。此外,faces
数组中的索引无法引用不存在的顶点。