Three.js modèle lisse polygones
J'ai eu quelque chose comme ceci:
var manager = new THREE.LoadingManager();
manager.onProgress = function ( item, loaded, total ) {
console.log( item, loaded, total );
};
var texture = new THREE.Texture();
var loader = new THREE.ImageLoader( manager );
loader.load( 'obj/'+model+'.jpg', function ( image ) {
texture.anisotropy = anis;
texture.image = image;
texture.needsUpdate = true;
} );
//model
var loader = new THREE.OBJLoader( manager );
loader.load( 'obj/'+model+'.obj', function ( object ) {
object.traverse( function ( child ) {
if ( child instanceof THREE.Mesh ) {
child.material.map = texture;
if(reflex){
child.material.envMap = reflection;
child.material.shading = THREE.SmoothShading;
child.material.reflectivity = reflex;
}
}
} );
object.scale.set(10,10,10);
object.position.y = pos;
object.position.z = 0;
object.position.x = 0;
object.name = "model";
scene.add( object );
} );
Fonctionne très bien, mais... tous les polygones de modèle sont visibles de cette façon...
Je voudrais arranger les choses... j'ai donc lu ici
que je pouvais lisse comme:
//First we want to clone our original geometry.
//Just in case we want to get the low poly version back.
var smooth = THREE.GeometryUtils.clone( geometry );
//Next, we need to merge vertices to clean up any unwanted vertex.
smooth.mergeVertices();
//Create a new instance of the modifier and pass the number of divisions.
var modifier = new THREE.SubdivisionModifier(divisions);
//Apply the modifier to our cloned geometry.
modifier.modify( smooth );
//Finally, add our new detailed geometry to a mesh object and add it to our scene.
var mesh = new THREE.Mesh( smooth, new THREE.MeshPhongMaterial( { color: 0x222222 } ) );
scene.add( mesh );
Mais... je n'ai aucune idée de où puis-je obtenir que la géométrie de l'objet... quelqu'un pourrait-il m'aider?
Ah ok je me le procurer. Il a travaillé... merci!!!!
J'ai tourné mon commentaire en réponse.
J'ai tourné mon commentaire en réponse.
OriginalL'auteur Flash Thunder | 2014-07-13
Vous devez vous connecter pour publier un commentaire.
Il semble que vous avez besoin pour lisser vos vertex normals. Vous pouvez le faire avec
Appeler cette fonction pour chaque enfant de maillage de l'objet (à l'intérieur de votre traversée de la fonction).
Si cela ne fonctionne pas, alors le problème est que les faces adjacentes sur votre modèle ne sont pas le partage des sommets. Dans ce cas, avant de calculer les normales des sommets, l'appel
three.js r.67
OriginalL'auteur WestLangley