2013-12-19 4 views
0

У меня есть файл JSON (map.js), из которого я загружаю настройки геометрии и материала (это файл, который я сгенерировал, и он слишком велик для меня вручную отредактируйте его). Это выглядит примерно так:WebGL Предупреждение при добавлении текстуры к материальной карте в Three.JS

"materials": [ { 
"DbgColor" : 2632490, 
"DbgIndex" : 0, 
"DbgName" : "ASPHALT_0" 
}, 

{ 
"DbgColor" : 16777215, 
"DbgIndex" : 1, 
"DbgName" : "ROAD_MARKING_DASHED_0" 
}], 

"vertices": [-370.412496,0.000000,120.194495... 

"morphTargets": [], 

"morphColors": [], 

"normals": [], 

"colors": [], 

"uvs": [[]], 

"faces": [2,0,1,2,0... 

Примечание для формата граней: треугольник с материалом

я загружаю этот файл так:

var loader = new THREE.JSONLoader(); 
loader.load("map.js", function(geometry, materials){ 
    mesh = new THREE.Mesh(geometry, new THREE.MeshFaceMaterial(materials)); 
    scene.add(mesh); 
    loadRestOfScene(); 
}); 

То, что я хочу сделать, это добавить текстуры к определенному материалу в моем массиве материалов. Что-то вроде:

materials[i].map = THREE.ImageUtils.loadTexture('road.jpg'); 

Но когда я загружаю мою страницу я получаю это предупреждение:

[.WebGLRenderingContext] GL ОШИБКА: GL_INVALID_OPERATION: glDrawElements: попытка доступа из вершин диапазона в атрибут 2 index.html : 1 WebGL: слишком много ошибок, на консоль больше не будет сообщаться об ошибках.

Я читал подобные вопросы (и ответы) здесь, и попытался сделать:

materials.needsUpdate = true; 
geometry.buffersNeedUpdate = true; 
geometry.uvsNeedUpdate = true; 

Но это ничего не меняет. Можно ли даже добавить текстуру к материалу, у которого его нет? Или я делаю что-то не так?

+0

Убедитесь, что вы UVs и читать http://stackoverflow.com/questions/16531759/three-js-map-material-causes-webgl- предупреждение/16533812 # 16533812. – WestLangley

+0

Как вы можете видеть из моего вопроса, я прочитал этот пост, потому что я пытался сделать то, что вы сказали (я цитирую): «В качестве альтернативы вы можете начать с материала без текстуры, а затем установить следующие флаги, когда текстура добавлена ​​... » И у меня нет УФ, потому что код, который генерирует мой JSON-файл, не создает UVs, и это то, что я не могу изменить. –

+0

Если у вас нет UVs, то почему вы пытаетесь добавить текстуру? – WestLangley

ответ

0

Вы должны указать, какой материал нуждается в обновлении

materials[i].needsUpdate = true; 
+0

Это ничего не меняет. –

Смежные вопросы