代码之家  ›  专栏  ›  技术社区  ›  Nick Heiner

解析.obj文件:如何处理材质/纹理?

  •  2
  • Nick Heiner  · 技术社区  · 14 年前

    我刚接触OpenGL。我在玩慢跑。我用这个 model .

    我正在成功地将其呈现到窗口。但是,我想应用纹理/材质。我不太确定该怎么做。

    从.obj文件:

    f 6307/4525/3 6303/4524/3 6327/4523/3 6315/4526/3
    usemtl kahki_light_pave_W.png
    f 6445/3470/305 6437/4623/305 6593/4624/305 6597/4625/305
    f 6594/4626/306 6438/4627/306 6446/4628/306 6598/4629/306
    f 6595/4630/307 6439/4631/307 6447/4632/307 6599/4633/307
    f 6448/3482/308 6440/4634/308 6596/4635/308 6600/4636/308
    

    维基百科告诉我 usemtl 语句和下一个语句之前 USEMTL 语句应该使用 khaki_light_pave_W.png . 但是,我不知道如何在OpenGL中实现这一点。

    文件顶部定义了一组顶点:

    v 19.886690 3.093822 -21.149584
    v 23.886690 3.093822 -21.149584
    vt 0.918121 0.920883
    vt 0.918121 0.959193
    vt -0.537323 1.541370
    vt -0.537323 1.503060
    vt 0.462677 0.503060
    

    我需要使用 vt 纹理的顶点?这个 f 声明包括索引。这些指控是针对 v 顶点, 及物动词 或者两者都有?

    2 回复  |  直到 14 年前
        1
  •  2
  •   genpfault    14 年前

    TL;博士 vt 条目指定纹理坐标和 f 条目索引(基于1!)分成三个独立的数组( v , 及物动词 以及 vn )

    来自 spec “引用顶点数据”部分:

    对于所有元素,参考号 用于识别几何图形 顶点,纹理顶点,顶点 法线和参数空间顶点。

    每种类型的顶点都是 分别编号,从 1。这意味着文件中的第一个几何顶点是1,第二个是 2,等等。第一个纹理顶点 文件中是1,第二个是2,并且 等等。编号继续 在整个 文件。通常,文件有多个 顶点数据列表。此编号 即使顶点 数据由其他数据分隔。

    除了倒数顶点 从第一个列表的顶部 文件,还可以将顶点计数回 从元素位置向上 在文件中。当你数数 从元素列表,引用 数字是负数。参考文献 数字-1表示顶点 在元素的正上方。一 参考号-2表示2 以上参考文献等

        2
  •  0
  •   Sean R Owens    12 年前

    我编写了一个obj文件加载器和一个示例模型查看器,以使用lwjgl显示模型,这类似于jogl,但并不完全相同。(我用过Jogl和LWJgl——事实上,我最近从Jogl改为LWJgl。)

    我努力使代码尽可能干净和简单。不幸的是,它是“老式”的,因为它使用了固定函数管道而不是自定义的着色器,但我希望它可能对基础知识有所帮助和指导。你可以在找到它;

    http://darksleep.com/oObjLoader/