2016-05-09 41 views
1

我想對皮膚有動態幾何但增加three.js所material.skinning =真正原因着色器編譯錯誤

material.skinning = true 

我得到它指出:「太多的制服」的着色器編譯錯誤之後。

我已經找到this Github Issue但它已關閉,並未提出解決方案。 我大致明白這個問題,但我的目標既不是有很大的幾何形狀,也沒有骨頭,我不明白,很多制服(> 1024據我最大的統一載體here)如何可以添加的,只是因爲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

回答

0

的問題是:我重視的材料(與skinned=true)到正常的網格,而不是Sk的innedMesh。

由於簡化,我實際上沒有在上面的代碼示例中包含此內容。