我正在尝试手动(没有诸如trix.js之类的LIB)将JSON 3D模型加载到我的WebGL代码中,只是为了娱乐,但是当我的模型具有超过1个纹理时,我很难。在一个obj-> json转换的文件中,我如何知道以下面孔的“活动”是哪个纹理? OBJ文件使用“ USEMTL”标签来识别使用中的纹理/材料,但是在与JSON一起工作时,我似乎找不到这种指针。及时,我正在使用obj-> json转换器编写的 AlteredQ

谢谢一堆,杆

有帮助吗?

解决方案

看看这个文件: three.js / src / extras / loaders / JSONLoader.js.

每张脸的第一个元素 faces JSON文件的数组有点字段。第一位说,如果那张脸有三个o四个索引。第二位说,如果那张脸分配了材料。材料索引(如果有的话)出现在索引之后。

例子: 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: ...

检查源代码是否有该位字段的完整含义。

其他提示

在我为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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top