【问题标题】:Normal map in *.obj file*.obj 文件中的法线贴图
【发布时间】:2015-06-30 06:24:59
【问题描述】:

在搅拌机中我创建了一个法线贴图,我将导出到像 OBJ(Wawefront)这样的搅拌机,并存储在 *.mtl 文件中,如“map_Bump”。

map_Bump 始终具有相同的颠簸尺度。 MTL 文件中的什么参数定义了 THREE.JS 中的bumpscale?

我的 MTL 文件:

newmtl ship_white
Ns 0.000000
Ka 0.000000 0.000000 0.000000
Kd 0.656604 0.656604 0.656604
Ks 0.433962 0.433962 0.433962
Ni 1.000000
d 1.000000
illum 2
map_Kd 2t3l.png
map_Bump 2t3l_normal.jpg

【问题讨论】:

  • 目前不支持。

标签: three.js blender wavefront


【解决方案1】:

目前不支持此功能。但是,您可以从文件中删除凹凸贴图并在 Three.js 中手动映射。

正在加载纹理。

var bmap = THREE.ImageUtils.loadTexture('bumpmap.jpg');

您需要遍历模型并找到它的材料。例如

    object.traverse( function( node ) {
        if ( node instanceof THREE.Mesh ) {
            // for smoothing
            node.geometry.computeVertexNormals();
            console.log(node);
        }
        if (node instanceof THREE.Mesh && node.material instanceof THREE.MeshPhongMaterial ) {
            // console.log(node);
            geometry = node.geometry;
            material = node.material;
        }
    });

然后直接分配您需要的材料。或者创建一个新的三个 JS 网格并将其分配到那里。请注意,如果 OBJ 包含多个网格,您将需要找到“正确”的网格。

mesh = new THREE.Mesh( geometry, material);
material.bumpMap = bmap;
material.bumpScale = 1;

【讨论】:

  • 在我的例子中 obj 文件是从 db 生成的。我不能用三个 js 代码编辑它,那将是糟糕的编码:-(
  • @Komsomol 为了清楚起见,这是否不被three.js OBJLoader 支持,或者根本不是.OBJ 文件格式规范的一部分?
  • 回答我自己的问题,.MTL 语法支持凹凸贴图,THREE.MTLLoader 不支持。将您的 obj/mtl 转换为 THREE.js 的 JSON 语法似乎可行。
  • OBJ 格式支持它,但 OBJLoader 在加载/添加模型时没有考虑到这一点。你说的最好。将其转换为 JSON,然后手动添加地图。
猜你喜欢
  • 2012-08-21
  • 2020-04-15
  • 1970-01-01
  • 2019-01-25
  • 2018-02-02
  • 1970-01-01
  • 2014-08-09
  • 1970-01-01
  • 2013-08-14
相关资源
最近更新 更多