0

我是three.js 和webgl 的菜鸟,所以我正在使用three.js 存储库中的示例文件。我希望实现的是从三个.js 的示例之一移植代码 - “Morph Normal 示例”,其中有一只鸟在拍打翅膀。我想将该模型导入到我正在使用我的代码进行的实验中。我所做的是,我从第 90 行到第 107 行复制了正在加载 flamingo.js 模型的 morph normal example 的代码,然后我添加了 2 行代码以便将该模型添加到场景中,我什至复制了 morphColorsToFaceColors( ) 函数位于我正在编辑的同一个 js 文件的底部。但是当我启动浏览器时,所有其他模型都加载但不是 flamingo.js 它在控制台中显示

TypeError {} Three.js:632 f.onreadystatechange Three.js:632 DEPRECATED: [flamingo.js] 似乎使用旧模型格式

获取堆栈:函数(){[本机代码]}消息:“对象[对象对象]没有方法'offsetHSL'”设置堆栈:函数(){[本机代码]}参数:空调用者:空长度:1名称: "" 原型:对象 原型:函数 Empty() {} 原型:错误

这是我修改了几行并添加到我的自定义 js 中的代码

var mesh = new THREE.Object3D();
    mesh.position.y = 48;

    var loader = new THREE.JSONLoader();
                    loader.load( "flamingo.js", function( geometry ) {

                        morphColorsToFaceColors( geometry );
                        geometry.computeMorphNormals();

                        var material = new THREE.MeshLambertMaterial( { color: 0xffffff, morphTargets: true, morphNormals: true, vertexColors: THREE.FaceColors, shading: THREE.FlatShading } );
                        var meshAnim = new THREE.MorphAnimMesh( geometry, material );

                        meshAnim.duration = 800;

                        meshAnim.scale.set( 1.5, 1.5, 1.5 );
                        meshAnim.position.y = 150;

                        mesh.add(meshAnim);

    } );

在我正在处理的同一个 js 文件的末尾,我在调用 animate() 函数后粘贴了 morphcolorstofacecolors 函数

function morphColorsToFaceColors( geometry ) {

    if ( geometry.morphColors && geometry.morphColors.length ) {

        var colorMap = geometry.morphColors[ 0 ];

        for ( var i = 0; i < colorMap.colors.length; i ++ ) {

                geometry.faces[ i ].color = colorMap.colors[ i ];
                 geometry.faces[ i ].color.offsetHSL( 0, 0.3, 0 );

        }

    }

}

Flamingo.js 文件与three.js 示例中提供的相同。

4

1 回答 1

0

听起来您正在使用更新版本的 THREE.js,他们已经更新了模型格式。如果您想使用相同的模型格式,您应该确保您使用的版本与该演示中使用的版本相同。

于 2013-06-01T23:05:22.890 回答