Three.js较复杂的贴图的UV映射有较成熟的获取方案吗?

发布于 2022-09-06 23:49:20 字数 561 浏览 15 评论 0

我想用 3dmax 做一个模型,使用 ThreeJS 加载,给定贴图规则,贴图图片资源是后来加载的image或者canvas,可以一键替换贴图并重新渲染。
因为模型不是简单地正方形或者其他规则图形,而且不规则的图形,我查找的资料上说可以通过 UV映射 描述贴图与模型的映射关系。但是如果用手写感觉很不现实。请问3D工具如 3d Max 可以做贴图然后将 UV映射 导出加载到 ThreeJS 吗?
我的思路是这样的:

  1. 3dmax 里做贴图
  2. 导出 objmtl 文件
  3. ThreeJS 调用接口修改贴图

请问下这个方向是否可行,在这个方案下 ThreeJs 是否可以修改贴图。
如果不可行的话,希望有大神能指条明路

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

德意的啸 2022-09-13 23:49:20

在学习ThreeJS的过程中,常常会有这样的疑惑,为什么做一个模型这么复杂,复杂的UV映射完全无从下手,Demo里那些看起来很厉害的模型是怎么做出来的
其实大多数的模型都是使用桌面软件制作出来的,包括建模、贴图、动画等,使用ThreeJS也可以完成部分作品,但是费事费力,在我看来不能作为成熟方案用作商业用途


使用3D max建模(各类建模软件都可以),制作UV展开,导出带贴图信息的obj格式文件(以obj为例)
使用ThreeJS加载即可,在这里ThreeJS的作用仅类似于视频播放器,仅完成模型加载渲染的工作,建模贴图等工作交给3D max等桌面软件即可

    var manager = new THREE.LoadingManager();
    manager.onProgress = function ( item, loaded, total ) {
        console.log( item, loaded, total );
    };
    manager.onLoad = function ( item, loaded, total ) {
        console.log( 'load finish' );
    };
    // 加载材质
    var textureLoader = new THREE.TextureLoader( manager );
    var texture = textureLoader.load( '/obj/caizhi.png' );
    
    var onProgress = function ( xhr ) {
        if ( xhr.lengthComputable ) {
            var percentComplete = xhr.loaded / xhr.total * 100;
            console.log( Math.round(percentComplete, 2) + '% downloaded' );
        }
    };

    var onError = function ( xhr ) {
    };
    // 加载模型
    var loader = new THREE.OBJLoader( manager );
    loader.load( '/obj/C-BOX.obj', function ( obj ) {

        obj.traverse( function ( child ) {
            if ( child instanceof THREE.Mesh ) {
                // 为模型赋予材质
                child.material.map = texture;
            }
        } );
        // 模型加载完后向场景中添加模型
        scene.add( obj );
    }, onProgress, onError );
病女 2022-09-13 23:49:20

同问,mark

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文