首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Three.js material.skinning = true导致着色器编译错误

Three.js material.skinning = true导致着色器编译错误
EN

Stack Overflow用户
提问于 2016-05-09 23:28:02
回答 1查看 1.1K关注 0票数 1

我试图剥去一个动态几何图形,但在添加之后

代码语言:javascript
复制
material.skinning = true

我得到一个着色器编译错误,上面写着“太多的制服”。

我已经找到了这个吉特布问题,但它是封闭的,没有提出解决方案。我一般都理解这个问题,但由于我的目标既没有几何学,也没有骨子里,我不明白为什么这么多制服(根据我的最大制服向量这里>1024)只能因为skinning=true而增加

我的代码:

代码语言:javascript
复制
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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-05-18 23:08:23

问题是:我把材料(用skinned=true)附加到一个正常的网格上,而不是SkinnedMesh。

由于简化,我实际上没有在上面的代码示例中包括这一点。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37126997

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档