【问题标题】:How does multi-texture OBJ->JSON converted files keeps track of face-texture mapping?多纹理 OBJ->JSON 转换文件如何跟踪面部纹理映射?
【发布时间】:2012-03-07 11:45:14
【问题描述】:

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

非常感谢, 棒

【问题讨论】:

    标签: json load three.js webgl textures


    【解决方案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 位,仅给出 2 种可能性,0 或 1。不过非常有用的答案,谢谢。
    • @rod 不,“位域”没问题。参见维基百科article
    • 不知道。我今天学到的又一新东西:)再次感谢
    【解决方案2】:

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

    【讨论】:

    • 谢谢你的回答,mortennobel。不过,您提供的链接似乎已损坏。我只能看到按钮(Duck、Cube、Teapot 等)。
    • 目前 Firefox 存在问题。试试 Chrome(在我修复 Firefox 问题时)
    • 问题已修复。感谢您的反馈。我希望我的工具很有趣。
    猜你喜欢
    • 2019-10-14
    • 2017-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多