2017-09-09 3 views
1

J'ai trouvé l'ancien code, ça marche presque.Comment réparer Face4 en Face3

var geom = new THREE.Geometry(); 
geom.vertices = testRect.verts(); 

for (var i = 0; i < verts.length; i+=4) { 
    geom.faceVertexUvs[0].push([ 
     new THREE.Vector2(1.0 - ((verts[i].x - testRect.x)/testRect.width), 1.0 - ((verts[i].z - testRect.y)/testRect.height)), 
     new THREE.Vector2(1.0 - ((verts[i+1].x - testRect.x)/testRect.width), 1.0 - ((verts[i+1].z - testRect.y)/testRect.height)), 
     new THREE.Vector2(1.0 - ((verts[i+2].x - testRect.x)/testRect.width), 1.0 - ((verts[i+2].z - testRect.y)/testRect.height)), 
     new THREE.Vector2(1.0 - ((verts[i+3].x - testRect.x)/testRect.width), 1.0 - ((verts[i+3].z - testRect.y)/testRect.height)) 
    ]); 
} 
for (var i=0, vl=verts.length; i<vl; i+=4) { 

    geom.faces.push(new THREE.Face4(i, i+1, i+2, i+3)); 
} 

J'ai trouvé comment y remédier (Face4 à Face3)

THREE.Face4 = function (a, b, c, d, normal, color, materialIndex) { 

    return new THREE.Face3(a, b, c, normal, color, materialIndex); 

}; 

Mais il semble qu'il n'y a pas assez de polygones http://dt-byte.ru/fea28697.png

tenté de le faire

for (var i=0, vl=verts.length; i<vl; i+=4) { 
    geom.faces.push(new THREE.Face4(i, i+1, i+2, i+3)); 
    geom.faces.push(new THREE.Face4(i, i+3, i+2, i+1)); 
} 

Mais quelque chose n'a pas aidé (

aider à résoudre ce problème)

Répondre

2

Si une géométrie est définie par le quad (A, B, C, D), la même géométrie peut être tirer par les 2 triangles (A, B, C) et (A, C, D).

quad to triangles

Adapter le code en quelque sorte comme ceci:

for (var i=0, vl=verts.length; i<vl; i+=4) { 

    geom.faces.push(new THREE.Face3(i, i+1, i+2)); 
    geom.faces.push(new THREE.Face3(i, i+2, i+3)); 
}