2013-02-18 3 views
2

Возможно ли присвоить два материала одной сетке, которая была загружена с помощью JSONLoader?Несколько материалов с JSONLoader?

Я создал простой символ в блендере и экспортировал его в формат three.js, который содержит морфинг-цели и UV.

Я пытался назначить материал твердого цвета на тело и картинку на голову моего персонажа (http://touhou.ru/dev/webgl-test-stackoverflow/kourindouhime.jpg), но после загрузки сетки и материалов я получаю серо-серовую сетку.

Вот серийная версия моего проекта (использовать WASD для перемещения и когда вы видите серый игрок сетки, который вы бы контрольный, что это именно то, что я говорю): http://touhou.ru/dev/webgl-test-stackoverflow/

И вот так Я загружаю сетку и материалы с помощью JSONLoader:

var player_loader = new THREE.JSONLoader(); 

    player_loader.load("running_babe.js", function(geo, material) { 
    material[0].morphTargets = true; 
    material[1].morphTargets = true; 
    var materials = new THREE.MeshFaceMaterial(material); 
    player = new THREE.Mesh(geo, materials); 
    scene.add(player); 
    }); 

Я что-то не так?


ОБНОВЛЕНИЕ: проблема была в моем экспорте. Теперь второй материал выглядит так:

{ 
      "DbgColor" : 15597568, 
      "DbgIndex" : 1, 
      "DbgName" : "Material.001", 
      "blending" : "NormalBlending", 
      "colorAmbient" : [0.6400000190734865, 0.6400000190734865, 0.6400000190734865], 
      "colorDiffuse" : [0.6400000190734865, 0.6400000190734865, 0.6400000190734865], 
      "colorSpecular" : [0.5, 0.5, 0.5], 
      "depthTest" : true, 
      "depthWrite" : true, 
      "mapDiffuse" : "kourindouhime.jpg", 
      "mapDiffuseWrap" : ["repeat", "repeat"], 
      "shading" : "Lambert", 
      "specularCoef" : 50, 
      "transparency" : 1.0, 
      "transparent" : false, 
      "vertexColors" : false 
    } 

и он работает очень хорошо. Спасибо вам, ребята.

ответ

1

Если я правильно посмотрел ваш код, running_babe.js - это сетка, о которой вы говорите. Глядя на ее источник, материалы являются следующие:

"materials" : [ { 
    "DbgColor" : 15658734, 
    "DbgIndex" : 0, 
    "DbgName" : "Material", 
    "blending" : "NormalBlending", 
    "colorAmbient" : [0.6400000190734865, 0.6400000190734865, 0.6400000190734865], 
    "colorDiffuse" : [0.6400000190734865, 0.6400000190734865, 0.6400000190734865], 
    "colorSpecular" : [0.5, 0.5, 0.5], 
    "depthTest" : true, 
    "depthWrite" : true, 
    "shading" : "Lambert", 
    "specularCoef" : 50, 
    "transparency" : 1.0, 
    "transparent" : false, 
    "vertexColors" : false 
}, 

{ 
    "DbgColor" : 15658734, 
    "DbgIndex" : 0, 
    "DbgName" : "default", 
    "vertexColors" : false 
}], 

Это можно ясно видеть, что нет никаких текстур, вторая не имеет на самом деле ничего и первый из них имеет все цвета, как оттенок серого , Похоже, что материалы не экспортируются правильно. Это не является большим сюрпризом, так как экспортировать материалы сложно, так как может не быть четкого сопоставления между концепциями 3d-моделирования и трёхфазными параметрами. Я просто исправлю это, вручную указав в этом файле параметры материала.

+0

Спасибо, что указали это! –

-1

У вас может быть один материал на ячейку, так работает OpenGL. У вас есть только одна сетка?

+0

Ну, он загружается как единственный объект THREE.Mesh, но если я проверю «player.geometry.geometryGroupsList», я получу две ячейки - одну для наголовника и вторую для тела. –

+1

@bjorke - Three.js поддерживает несколько материалов на ячейку. Он внутренне разбивает лица на группы, так что в итоге он будет отображать одну геометрию на материал, но с точки зрения API поддерживаются несколько материалов. – Tapio

+0

Thx для хэдз-ап на то, что для threee.js, @Tapio! – bjorke

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