多纹理OBJ-> JSON转换文件如何跟踪面部纹理映射?

时间:2012-02-16 03:29:34

标签: json load three.js webgl textures

我正在尝试手动(没有像Three.js这样的库)将JSON 3D模型加载到我的webGL代码中只是为了好玩但是当我的模型有超过1个纹理时我很难。 在OBJ-> JSON转换文件中,我如何知道哪个纹理是后面的“活动”? OBJ文件使用'usemtl'标签来识别正在使用的纹理/材质,但在使用JSON时我似乎无法找到那种指针。 最后,我正在使用由alteredq

编写的OBJ-> JSON转换器

非常感谢, 杆

2 个答案:

答案 0 :(得分:1)

查看此文件:three.js / src / extras / loaders / JSONLoader.js

JSON文件的faces数组中每个面的第一个元素是位字段。第一位说如果那张脸有三个四个指数。并且第二位表示该面部是否分配了材料。材料指数(如果有)出现在指数之后。

示例:faces: [2, 46, 44, 42, 0, 1, 45, 46, 48, 3, ...

第一面(带材料的三角形):

Type: 2 (00000010b)
Indices: 46, 44, 42
Material index: 0

第二张脸(没有材料的四边形):

Type: 1 (00000001b)
Indices: 45, 46, 48

第三面(四面材料):

Type: 3 (00000011b)
Indices: ...

检查源代码以了解该位字段的完整含义。

答案 1 :(得分:0)

在我为KickJS游戏引擎编写的OBJ-> JSON转换器中,每种材料都有自己的索引范围。

这意味着一个简单的OBJ模型,如

    mtllib plane.mtl
    o Plane
    v 1.000000 0.000000 -1.000000
    v 1.000000 0.000000 1.000000
    v -1.000000 0.000000 1.000000
    v -1.000000 0.000000 -1.000000
    usemtl Material
    s 1
    f 2 3 4
    usemtl Material.001
    f 1 2 4

将被翻译成这个(带有两个索引;每个材料一个):

    [
       {
          "vertex": [1,0,1,-1,0,1,-1,0,-1,1,0,-1],
          "name": "Plane mesh",
          "normal": [0,-1,0,0,-1,0,0,-1,0,0,0,0],
          "indices0": [0,1,2],
          "indices1": [3,0,2]
       }
    ]

使用在线模型查看器进行转换:

http://www.kickjs.org/example/model_viewer/model_viewer.html