2016-05-09 5 views
1

Ich versuche, eine dynamische Geometrie, um die Haut, sondern nach der Zugabe vonThree.js material.skinning = true Ursachen Shader-Kompilierung-Fehler

material.skinning = true 

mir einen Kompilierungsfehler Shader, die „zu vielen Uniformen“, erklärt.

Ich habe bereits this Github Issue gefunden, aber es ist geschlossen und schlägt keine Lösung vor. weder verstehe ich generell das Problem, sondern als mein Objekt hat viel Geometrie, noch Knochen Ich verstehe nicht, wie das viele Uniformen (> 1024 nach meiner Max Uniform Vektoren here) nur hinzugefügt werden kann, da der skinning=true

Mein Code :

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); 

Danke :)

r75

Antwort

0

Problem war: ich habe das Material angebracht (mit skinned=true) zu einem normalen Mesh, keinen Sk innedMesh.

Aufgrund der Vereinfachung habe ich dies im obigen Beispiel nicht berücksichtigt.