L'épaisseur des lignes à l'aide de TROIS.LineBasicMaterial
Je suis en utilisant le code ci-dessous pour créer des centaines de lignes dans mon three.js scène
edgeGeometry[i] = new THREE.Geometry();
edgeGeometry[i].vertices[0] = v(x1,y1,z1);
edgeGeometry[i].vertices[1] = v(x2,y2,z2);
edgesMat[i] = new THREE.LineBasicMaterial({
color: 0x6699FF, linewidth: 1, fog:true});
edge[i] = new THREE.Line(edgeGeometry[i], edgesMat[i]);
edge[i].type = THREE.Lines;
scene2.add(edge[i]);
Il fonctionne très bien, mais lorsque je change la valeur de "largeur de raie" à une plus grande OU plus petite valeur, je ne vois PAS de différence dans la scène.
Comment dois-je changer l'épaisseur des lignes? Des idées?
Merci, Dimitris
- Bonjour, selon THREE.JS document: "en Raison des limitations de l'OpenGL Profil de Base avec le WebGL rendu sur la plupart des plates-formes de largeur de raie sera toujours 1 indépendamment de la valeur de consigne."
Vous devez vous connecter pour publier un commentaire.
Êtes-vous à l'aide de Windows?
Je me souviens de cette ne fonctionne pas sur Windows, car il n'a pas été implémentée dans ANGLE.
1) Utiliser OpenGL natifVous pouvez obtenir le rendu des épaisseurs de ligne avec une solution de contournement en configurant votre navigateur pour utiliser OpenGL natif au lieu de l'ANGLE. Vous pouvez lire ici sur comment faire cela sur Chrome.
Gardez à l'esprit que vous ferez l'expérience de la performance des différences si vous permutez natif OpenGL.
EDIT:
Le maître MrDoob lui-même posté ici comment faire pour Chrome et Firefox.
Remarque: Cette première option n'est plus une solution valable depuis les dernières versions d'OpenGL ne supportent plus l'épaisseur de la ligne, soit. Vérifier aussi @gman sa réponse. Cela signifie que si vous voulez utiliser la ligne de l'épaisseur de la deuxième option est le chemin à parcourir.
2) Utiliser
THREE.MeshLine
classeIl y a aussi une autre solution; ce
TROIS.MeshLine
de la classe sur github est une belle solution de contournement. Il est livré avec un spécialTHREE.MeshLineMaterial
. Selon les docs c'est aussi simple que:true
pour le brouillard de l'attribut. Reportez-vous à la ici dans la documentation. Avez-vous essayé? Faut-il encore ne pas fonctionner?MeshLineMaterial
. Vous pourriez essayer d'ajouter ceci ou faire un problème avec une demande de fonctionnalité.Cela se produit dans Windows Chrome et Firefox, à la fois l'aide de l'ANGLE (WebGL pour DirectX wrapper).
Le problème n'est toujours pas résolu par l'ANGLE de projet. Vous pouvez star la question ici pour obtenir plus prioritaires et recevoir une notification si elle va être mis en œuvre:
https://code.google.com/p/angleproject/issues/detail?id=119
Ce n'est plus une question juste dans l'ANGLE, c'est une question sur toutes les plateformes. Les navigateurs nécessaires pour passer à l'OpenGL 4+ profil de base à l'appui de WebGL2 et OpenGL 4+ profil de base ne prend pas en charge les largeurs de ligne supérieure à 1. À partir de l'OpenGL 4.0+ spec, section E. 2.1
Pour dessiner des lignes plus épaisses vous avez besoin de générer la géométrie. Pour three.js il y a cette bibliothèque (souligné par le Flétrissement ainsi)
https://github.com/spite/THREE.MeshLine
Vous pouvez utiliser CanvasRenderer au lieu de Webglrenderer. Découvrez la ifficial documentation ici où chaque forme a une frontière de linewidth = 10;
Vous pouvez obtenir le même effet en utilisant
extruder-polyligne
pour générer un complexe simplicial pour l'épaississement de la (poly)en ligne ettrois-simplicial-complexe
convertir cette three.js Mesh:Voici un exemple complet avec le source. (Il y a actuellement un question sur requirebin qui l'empêche de faire le rendu de la source de l'exemple).
Si vous voulez la texture de la polyligne, les choses deviennent un peu plus compliqué.
- Je utiliser TubeGeometry pour créer une Épaisse ligne entre deux points:
Voir les lignes Vertes en Hélice