前提・実現したいこと
three.jsで、以下のコードにて読み込んだ3Dモデル(3dsファイル)の頂点座標を取得したいです。
どのようにしたら良いのでしょうか?
該当のソースコード
const loader = new THREE.TDSLoader(); loader.setPath('imgs/'); loader.load('js/3ds.3ds', (object) => { scene.add(object); });
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答2件
0
ベストアンサー
load が終わった直後の状態であれば、
loader.load('js/3ds.3ds', (object) => { object.children[0].geometry.vertices scene.add(object); });
このvertices の中で、配列として取得することができます。
投稿2018/09/02 11:11
総合スコア203
0
バイナリ―形式だと扱いづらいのでJSONに変換します。
コンバーターは検索すれば出てくるので、用途に合うものを使ってください。
Online 3D Converter
convert-to-threejs
投稿2018/08/30 16:10
総合スコア691
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
返事が遅くなってしまいすみません。
調べたところ、blenderのエキスポート機能で作成したjsonファイルでないといけないらしいので、その方法で作成したのですが、うまく読み込まれません。紹介していただいたコンバーターでも無理でした。
////////////////////////////////////////////////////////////////////////////////////////////////
<html>
<head>
<meta charset="utf-8" />
<script src="https://cdnjs.cloudflare.com/ajax/libs/three.js/89/three.min.js"></script>
<script src="js/OrbitControls.js"></script>
<script src="js/TDSLoader.js"></script>
<script>
// ページの読み込みを待つ
window.addEventListener('load', init);
function init() {
// サイズを指定
const width = 960;
const height = 540;
// レンダラーを作成
const renderer = new THREE.WebGLRenderer({
canvas: document.querySelector('#myCanvas'),
});
renderer.setPixelRatio(window.devicePixelRatio);
renderer.setSize(width, height);
// シーンを作成
const scene = new THREE.Scene();
// カメラを作成
const camera = new THREE.PerspectiveCamera(45, width / height, 0.1, 10000);
// カメラの初期座標を設定
camera.position.set(0, 0, 5);
// カメラコントローラーを作成
const controls = new THREE.OrbitControls(camera);
// 平行光源を作成
const directionalLight = new THREE.DirectionalLight(0xFFFFFF);
directionalLight.position.set(1, 1, 1);
scene.add(directionalLight);
// 環境光を追加
const ambientLight = new THREE.AmbientLight(0xFFFFFF);
scene.add(ambientLight);
var loader = new THREE.JSONLoader();
var json = 'js/egg.json'; // jsonパスの指定
loader.load(json, function(geometry, materials) {
var faceMaterial = new THREE.MeshFaceMaterial(materials);
var materialColor = 0xff8700; // マテリアルの色
faceMaterial.materials[0].color = new THREE.Color(materialColor); // マテリアルの色の設定
faceMaterial.materials[0].wireframe = true; // ワイヤーフレーム表示にする
mesh = new THREE.Mesh(geometry, faceMaterial);
mesh.position.set(0, 0, 0); // 位置の設定
mesh.scale.set(10, 10, 10); // スケールの設定
scene.add(mesh); // シーンへメッシュの追加
});
tick();
// 毎フレーム時に実行されるループイベントです
function tick() {
// レンダリング
renderer.render(scene, camera);
requestAnimationFrame(tick);
}
}
</script>
</head>
<body>
<canvas id="myCanvas"></canvas>
</body>
</html>
///////////////////////////////////////////////////////////////////////////////////////
後、jsonに変換して見つけた頂点座標が、three.jsのgeometry.verticesで得られる頂点座標のようにx、y、zプロパティでアクセスできる形ではなかったのですが、一つの頂点座標のx、y、z座標を取得するにはどのようにしたらよいのでしょうか?何度も質問すみません。ご教示いただけると幸いです。
2018/09/02 20:55
質問に「(3dsファイル)の~」とあったので、このような回答をしました。
load後に取得したいということであれば、adrs2002 さんの回答にある方法で良いんじゃないでしょうか。
2018/09/03 06:20
ありがとうございます!
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/09/02 11:58
2018/09/02 12:28 編集
2018/09/03 06:26
2018/09/03 07:02