Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Three.js THREEJS-具有自定义UV映射的缓冲区几何体_Three.js - Fatal编程技术网

Three.js THREEJS-具有自定义UV映射的缓冲区几何体

Three.js THREEJS-具有自定义UV映射的缓冲区几何体,three.js,Three.js,定义缓冲几何体的UV映射时发生奇怪行为: 我知道,对于索引缓冲区几何体,我不需要重复顶点,可以重复使用它们-因此对于10x10个池的矩阵,我用两种不同的纹理材质连接200个三角形 当我要应用UV贴图时,问题开始出现: var gg=new THREE.BufferGeometry(),vtx=[],uv=[],fc=[[],[]],mm=[ material1, material2 ]; for(var y=0 ; y<11 ; y++) for(var x=0 ;

定义缓冲几何体的UV映射时发生奇怪行为:

我知道,对于索引缓冲区几何体,我不需要重复顶点,可以重复使用它们-因此对于10x10个池的矩阵,我用两种不同的纹理材质连接200个三角形

当我要应用UV贴图时,问题开始出现:

var gg=new THREE.BufferGeometry(),vtx=[],uv=[],fc=[[],[]],mm=[
    material1,
    material2
];
for(var y=0 ; y<11 ; y++)
    for(var x=0 ; x<11 ; x++) {
        vtx.push(x-5,0,y-5);
        if(x&&y) {
            var p=(vtx.length/3)-1;
            fc[(x%2)^(y%2)].push(
            // Incides
            //    A    B     C
                p,   p-11, p-1,
                p-1, p-11, p-12
            );
            uv.push(
            // UV mapping (suppose per triangle??!)
            //    A    B    C
                1,0, 1,1, 0,1,
                0,1, 1,1, 0,0
            );
        }
    }
Array.prototype.push.apply(fc[0],fc[1]); gg.setIndex(fc[0]);
gg.addAttribute('position',new THREE.Float32BufferAttribute(vtx,3));
gg.addAttribute('uv',new THREE.Float32BufferAttribute(uv,2));
gg.computeVertexNormals();
gg.addGroup(0,300,0);
gg.addGroup(300,300,1);
scene.add(new THREE.Mesh(gg,mm));
var gg=new THREE.BufferGeometry(),vtx=[]、uv=[]、fc=[]、[]、mm=[
材料1,
材料2
];

对于(var y=0;y我认为,如果你想要逐面贴图,那么你可能也必须复制顶点。基本上,所有东西都有一个唯一的顶点+法线+uv组合。否则你需要多个索引缓冲区,一个用于顶点,一个用于法线,一个用于uv。我倾向于不太担心顶点数据的数量。真正影响性能的是d原始调用。大多数GPU每帧可以处理超过1m个顶点,但最多可以处理300-1000个绘制调用。我过于简单化了,但这是一个大概的结果。

是的,这确实有效(在中有效),但需要更多顶点(可能会影响更复杂网格中的内存?)这里的长度不是每个变量,而是每个顶点,所以保持300。