このウェブサイトの軌道パターンに非常によく似た円を描こうとしています。純粋な WebGL の代わりに Three.js を使用したいと考えています。
質問する
35009 次
9 に答える
12
API は、threejs の新しいバージョンでわずかに変更されました。
var segmentCount = 32,
radius = 100,
geometry = new THREE.Geometry(),
material = new THREE.LineBasicMaterial({ color: 0xFFFFFF });
for (var i = 0; i <= segmentCount; i++) {
var theta = (i / segmentCount) * Math.PI * 2;
geometry.vertices.push(
new THREE.Vector3(
Math.cos(theta) * radius,
Math.sin(theta) * radius,
0));
}
scene.add(new THREE.Line(geometry, material));
segmentCount
シーンの必要に応じて、円をより滑らかにしたりギザギザにしたりします。小さな円の場合、32 セグメントは非常にスムーズです。リンク先のサイトのような軌道の場合、数百が必要になる場合があります。
コンストラクター内の 3 つのコンポーネントの順序を変更してVector3
、円の方向を選択します。ここで指定されているように、円は x/y 平面に配置されます。
于 2013-12-19T23:04:08.290 に答える
4
この github postで Mr.doob が参照しているコードを使用しました。
var resolution = 100;
var amplitude = 100;
var size = 360 / resolution;
var geometry = new THREE.Geometry();
var material = new THREE.LineBasicMaterial( { color: 0xFFFFFF, opacity: 1.0} );
for(var i = 0; i <= resolution; i++) {
var segment = ( i * size ) * Math.PI / 180;
geometry.vertices.push( new THREE.Vertex( new THREE.Vector3( Math.cos( segment ) * amplitude, 0, Math.sin( segment ) * amplitude ) ) );
}
var line = new THREE.Line( geometry, material );
scene.add(line);
于 2012-12-08T01:11:48.513 に答える
1
色付きの線を描画する方法については、three.jsサンプルhttp://mrdoob.github.com/three.js/examples/webgl_lines_colors.htmlを参照してください。
あなたが引用するような円は、小さな直線セグメントの大きな数として描かれます。(実際、表示するのは省略記号の場合があります)
于 2012-12-07T06:01:20.537 に答える
1
var getStuffDashCircle2 = function () {
var segment = 100, radius = 100;
var lineGeometry = new THREE.Geometry();
var vertArray = lineGeometry.vertices;
var angle = 2 * Math.PI / segment;
for (var i = 0; i < segment; i++) {
var x = radius * Math.cos(angle * i);
var y = radius * Math.sin(angle * i);
vertArray.push(new THREE.Vector3(x, y, 0));
}
lineGeometry.computeLineDistances();
var lineMaterial = new THREE.LineDashedMaterial({ color: 0x00cc00, dashSize: 4, gapSize: 2 });
var circle = new THREE.Line(lineGeometry, lineMaterial);
circle.rotation.x = Math.PI / 2;
circle.position.y = cylinderParam.trackHeight+20;
return circle;
}
于 2014-04-24T13:27:38.500 に答える