我是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 示例中提供的相同。