STLを読み込み、すべての頂点をリストし、それらが接続されている頂点を取得したいので、その角度と距離を計算できます。 three.jsでこれを行うことは可能でしょうか?
私のアイデアは、低ポリスルールをロードして、実際にstlのワイヤフレーム表現を再現するために、3D印刷してロッドでアセンブルできるコネクタを作成することです。 たとえば、キューブのstlファイルを読み込み、下の図のような3つのブランチを持つ8つのコネクタを作成します。 頂点と接続された頂点
答えて
この質問の言葉は、本当に賞金を適用したはずです。私はあなたのアイデアが好きなので、私はそれを行う方法について好奇心だった。ただし、単純なstlまたはobjファイルでも何千ものエッジが含まれることに注意してください。それは印刷するためのダーベルの多くです。単純で粗い球であっても数百のエッジを含むことができます。
この関数は、エッジとノードのリストを返します。
エッジリストは非常に簡単です。各配列位置はIDであり、値はエッジの長さです。たとえば、エッジ15の長さを見つける必要がある場合は、エッジを見つけるだけです[15]。値は行の長さになります。
ノードには、独自のエッジのリストが含まれています。私はこれらが反時計回りに保存されていると信じていますが、それをテストしたいと思うでしょう。頂点が正しく印刷されているかどうかは、各ノードの順番によって決まりますが、解決する必要がある場合もあります。これらは[0,2,4]のように見えます。これらの値を使用して長さを見つけることができます。ノードには、アングルオブジェクトも含まれています。これらの角度は、エッジと同じ順序でリストに保持されます。各ノードのプロパティ名は、コロンで区切られたスペースのローカル位置です。たとえば、ノードの一意の名前は次のようになります。 "19.09830093383789:190.2113037109375:58.778526306152344"
各角度は、エッジと同じ順序でリストされたローカル空間のラジアンです。これは重要です。角度はローカル空間ではラジアンです。モデルに変換を伴う親モデルがある場合、ワールド空間を得るために変換行列を適用する必要があります。モデルには反転した顔もありません。例えば
、このノードは0,2をEdgeに接続し、4:
ノード> "19.09830093383789:190.2113037109375:58.778526306152344"
Node.edges> [0、2、4]
Node.angles> [0.31415926112916176、0.31415926112916176、0.31415926228226293]
これは縁のN番号のノードで動作します。しかし、モデルは現実世界で働くために水密である必要があります。
function getEdges(geometry){
var material = new THREE.LineBasicMaterial({ color: 0xff0000});
var edges = new THREE.EdgesGeometry(geometry);
var vertexList = edges.attributes.position.array;
var nodes = {};
var edges = [];
var edgeID = 0;
for(var i=0; i<vertexList.length;i=i+6){
var geometry = new THREE.Geometry();
var node1ID = vertexList[i]+":"+vertexList[i+1] +":"+ vertexList[i+2];
var node2ID = vertexList[i+3]+":"+vertexList[i+4] +":"+ vertexList[i+5];
var node1 = nodes[node1ID];
var node2 = nodes[node2ID];
if(node1 == undefined){
node1 = {};
node1.edges = [];
node1.angles = [];
nodes[node1ID] = node1;
}
if(node2 == undefined){
node2 = {};
node2.edges = [];
node2.angles = [];
nodes[node2ID] = node2;
}
var vec1 = new THREE.Vector3(vertexList[i], vertexList[i+1], vertexList[i+2]);
var vec2 = new THREE.Vector3(vertexList[i+3], vertexList[i+4], vertexList[i+5]);
geometry.vertices.push(vec1);
geometry.vertices.push(vec2);
geometry.computeLineDistances();
var edge = new THREE.Line(geometry, material);
node1.edges.push(edgeID);
node1.angles.push(vec1.angleTo(vec2));
node2.edges.push(edgeID);
node2.angles.push(vec2.angleTo(vec1));
edges[edgeID] = geometry.lineDistances[1];
mesh.add(edge);
edgeID++;
}
return {nodes:nodes, edges:edges};
}
作業フィドル: https://jsfiddle.net/y1hs9x4v/
- 1. 頂点シェーダ対頂点
- 2. ほとんどの接続された「頂点」のSQLクエリ
- 3. 頂点の頂点を頂点で4.2で検証する
- 4. 頂点への接続を減らす
- 5. ArangoDBが接続された頂点を見つける
- 6. 頂点からの頂点バッファ
- 7. 頂点バッファデータを配列頂点データフロー
- 8. JComponentとしてレンダリングされた頂点
- 9. igraphを使用して頂点に接続されているすべての頂点を探しますか?
- 10. 頂点シェーダとフラグメントシェーダ
- 11. tinkerpop3で同じクエリ内の頂点と隣接する頂点を出力
- 12. U-SQL頂点グラフに頂点ごとにROW_COUNTが表示されない
- 13. 非ハッシュタイプ:「頂点」
- 14. GLSL頂点シェーダコンパイルエラー
- 15. カスタム頂点カラー()
- 16. XNA - 頂点ストリーム?
- 17. javascript頂点undoManager
- 18. テクスチャデータを頂点シェーダの頂点データとして解釈する
- 19. k個の接続された頂点とワイト・サム・ベローズを見つける
- 20. ブーストグラフライブラリ - 深さ優先接続された頂点を介してのみ検索
- 21. メッシュを接続するための頂点の置換
- 22. DirectX 11頂点シェーダリフレクション
- 23. 6カラーグラフ頂点カラーアルゴリズム
- 24. ブレンダー、リギング、頂点グループ
- 25. 頂点属性バインディング
- 26. GLSL ES頂点シェーダエラー
- 27. 頂点シェーダのテクスチャルックアップ
- 28. pythonグラフツールアクセス頂点プロパティ
- 29. 最小頂点カバー
- 30. sharir kosarajuアルゴリズムと頂点
は、はい、three.jsで行うことが可能です。 – gaitat