我试图剥去一个动态几何图形,但在添加之后
material.skinning = true我得到一个着色器编译错误,上面写着“太多的制服”。
我已经找到了这个吉特布问题,但它是封闭的,没有提出解决方案。我一般都理解这个问题,但由于我的目标既没有几何学,也没有骨子里,我不明白为什么这么多制服(根据我的最大制服向量这里>1024)只能因为skinning=true而增加
我的代码:
var material = new THREE.MeshLambertMaterial({color: 0xAABBAA, skinning: true});
var maxLength = Math.max(geom.vertices[0].y, geom.vertices[geom.vertices.length-1].y);
// calculate skinweigths
for(var i = 0; i < MAXRESOLUTION; i++){
var skinIndex = geom.vertices[i].y > 0? 1 : 0;
var skinWeight = Math.abs(geom.vertices[i].y/maxLength);
geom.skinIndices.push( new THREE.Vector4( skinIndex, skinIndex + 1, 0, 0 ) );
geom.skinWeights.push( new THREE.Vector4( 1 - skinWeight, skinWeight, 0, 0 ) );
}
// create new mesh
var newMesh = new THREE.SkinnedMesh(geom, material);
skeleton.bones[0].position.y = geom.vertices[0].y;
skeleton.bones[1].position.y = -geom.vertices[0].y;
// combine mesh with skeleton
var root = skeleton.bones[0];
newMesh.add(root);
newMesh.bind(skeleton);谢谢您:)
r75
发布于 2016-05-18 23:08:23
问题是:我把材料(用skinned=true)附加到一个正常的网格上,而不是SkinnedMesh。
由于简化,我实际上没有在上面的代码示例中包括这一点。
https://stackoverflow.com/questions/37126997
复制相似问题