사용자가 제공 한면 수를 기준으로 Three.js를 사용하여 절차 적으로 일반 N -gon을 생성하고 있습니다. 장기적인 목표는 이것을 다면체 프리즘 렌더링의 첫 번째 단계로 사용하는 것입니다.Three.js를 사용하여 일반 다각형 생성
나는 -on의 정점을 계산하기 위해 here 솔루션을 사용하고 있습니다.
다음은 here이라는 기술을 사용하여 N -gon에 얼굴을 생성합니다.
필요한 지오메트리 객체를 생성하는 내 첫 번째 시도는 메쉬에 추가 한 후 아무것도 렌더링하지 않는 것 다음, 결과 : 너무 오랫동안 그와 함께 놀 후
function createGeometry (n, circumradius) {
var geometry = new THREE.Geometry(),
vertices = [],
faces = [],
x;
// Generate the vertices of the n-gon.
for (x = 1; x <= n; x++) {
geometry.vertices.push(new THREE.Vector3(
circumradius * Math.sin((Math.PI/n) + (x * ((2 * Math.PI)/ n))),
circumradius * Math.cos((Math.PI/n) + (x * ((2 * Math.PI)/ n))),
0
));
}
// Generate the faces of the n-gon.
for (x = 0; x < n-2; x++) {
geometry.faces.push(new THREE.Face3(0, x + 1, x + 2));
}
geometry.computeBoundingSphere();
return geometry;
}
, 나는 발견 ShapeGeometry 클래스 이것은 위의 예와 같은 정점 알고리즘을 사용하지만,이 하나는 메쉬에 추가 한 후 제대로 렌더링 다음 ShapeGeometry 예와 형상 예를 들어 문제 해결이야 무슨
function createShapeGeometry (n, circumradius) {
var shape = new THREE.Shape(),
vertices = [],
x;
// Calculate the vertices of the n-gon.
for (x = 1; x <= sides; x++) {
vertices.push([
circumradius * Math.sin((Math.PI/n) + (x * ((2 * Math.PI)/ n))),
circumradius * Math.cos((Math.PI/n) + (x * ((2 * Math.PI)/ n)))
]);
}
// Start at the last vertex.
shape.moveTo.apply(shape, vertices[sides - 1]);
// Connect each vertex to the next in sequential order.
for (x = 0; x < n; x++) {
shape.lineTo.apply(shape, vertices[x]);
}
// It's shape and bake... and I helped!
return new THREE.ShapeGeometry(shape);
}
?
복잡한 정점 계산을 간단한 정수로 바꾸면 문제가없는 다각형이 만들어지기 때문에 카메라 또는 위치 지정에 문제가 있다고 생각하지 않습니다.
제가 처음에 언급했듯이, 저는 이것을 궁극적으로 다면체 렌더링의 첫 단계로 사용하고 싶습니다. ShapeGeometry 객체는 깊이를 제공하기 위해 돌출 될 수 있지만 Three.js가 제공하는 옵션을 사용하더라도 필요한 다면체가 더 불규칙 해지면 장기적으로는 내 필요에 충분하지 않을 수 있습니다.
의견이 있으십니까?
흥미 롭습니다. 필자의 지오메트리 코드는 기본적으로 Three.js "Getting Started"자습서의 주된 예입니다. 따라서 필자가 제공 한 피델과 거의 같습니다. 상수 값을 사용했던 값으로 변경하면 원래의 다각형이 나타납니다. 도움을 주셔서 감사합니다. – Eric