Я пользуюсь Three.js, версии 71. Я использую Blender, версии 2.73.Невозможно загрузить текстурированную Collada, выгруженную из блендера, используя Three.js
Я создал текстурированный объект collada (файл .dae) с помощью Blender, и теперь я хочу загрузить его в свою сцену three.js. До сих пор я могу загружать только те модели, которые экспортируются из блендера, у которых нет текстур.
Вот как я создаю текстурированный объект Collada:
В блендере, я просто использовать куб по умолчанию. Используя настройки справа, я добавляю текстуру в куб. Вот текстуры я ставлю на куб (Примечание: это 2048 X 2048, так что это сила 2):
Вот изображение куба в режиме визуализации, чтобы доказать, что текстура на это:
Вот настройки экспорта, которые я использовал, когда я экспортировал куб как COLLADA из Blender:
Вот некоторые код, который я использовал, чтобы попытаться загрузить текстурированной Collada:
var loader = new THREE.ColladaLoader();
var localObject;
loader.options.convertUpAxis = true;
loader.load('./models/test_texture.dae', function (collada) {
localObject = collada.scene;
localObject.scale.x = localObject.scale.y = localObject.scale.z = 32;
localObject.updateMatrix();
game.scene.add(localObject);
});
Здесь ошибка я получил:
[.WebGLRenderingContext]GL ERROR :GL_INVALID_OPERATION : glDrawElements: attempt to access out of range vertices in attribute 2
Я тогда гугле, что сообщение об ошибке, и кто-то сказал, что мне нужно вычислить касательные. Вот мои попытки, что и ошибки я получил:
var loader = new THREE.ColladaLoader();
var localObject;
loader.options.convertUpAxis = true;
loader.load('./models/test_texture.dae', function (collada) {
localObject = collada.scene;
localObject.scale.x = localObject.scale.y = localObject.scale.z = 32;
localObject.updateMatrix();
for (var i = collada.scene.children.length - 1; i >= 0; i--) {
var child = collada.scene.children[i];
// child.children[0] will give us the THREE.Mesh of the collada
if (child.colladaId == "Cube") {
// ATTEMPT 1: Just tried computing tangets based on answer from neoRiley here: http://stackoverflow.com/questions/21200386/webgl-gl-error-gl-invalid-operation-gldrawelements-attempt-to-access-out-of
// child.children[0].geometry.computeTangents();
// ATTEMPT 2: Got this suggestion from Popov here: http://stackoverflow.com/questions/15717468/three-lod-and-normalmap-shader-fail
// child.children[0].geometry[ 0 ][ 0 ].computeTangents();
// child.children[0].geometry[ 1 ][ 0 ].computeTangents();
// ATTEMPT 3: Tried setting some update flags based on answer from Sayris here: http://stackoverflow.com/questions/13988615/webglrenderingcontext-error-loading-texture-maps
// child.children[0].geometry.buffersNeedUpdate = true;
// child.children[0].geometry.uvsNeedUpdate = true;
// child.children[0].material.needsUpdate = true;
// child.children[0].geometry.computeTangents();
}
};
game.scene.add(localObject);
});
ПОПЫТКА 1 ОШИБКА:
Uncaught TypeError: Cannot read property '0' of undefined
// Stack trace
three.js:9935 handleTriangle
three.js:9974 THREE.Geometry.computeTangents
myCode.js:116 (anonymous function)
ColladaLoader.js:204 parse
ColladaLoader.js:84 request.onreadystatechange
ПОПЫТКА 2 ОШИБКА:
Uncaught TypeError: Cannot read property '0' of undefined
Это произошло из собственного кода , Я не думал, что геометрия THREE.Mesh двумерна, но я все равно попробовал.
ПОПЫТКА 3 ОШИБКА: (так же, как ПОПЫТКА 1 ERROR)
Uncaught TypeError: Cannot read property '0' of undefined
// Stack trace
three.js:9935 handleTriangle
three.js:9974 THREE.Geometry.computeTangents
myCode.js:116 (anonymous function)
ColladaLoader.js:204 parse
ColladaLoader.js:84 request.onreadystatechange